Phân tích kỹ thuật app com.aitutor.ai.language.tutor
Ngày phân tích: 2026-05-13
APK version: LeranItalian_v-23_release
Package: com.ai.tutor.translate
1. Speech-to-Text (STT) — Nhận diện giọng nói
Engine: Android Native SpeechRecognizer (Google Speech Services)
- Sử dụng
android.speech.SpeechRecognizer.createSpeechRecognizer()— API STT có sẵn trên Android. - Không dùng bất kỳ SDK bên thứ 3 nào (không Azure, không Whisper, không Deepgram, không AssemblyAI...).
- Intent:
android.speech.action.RECOGNIZE_SPEECH, language model:free_form. - Hỗ trợ nhiều ngôn ngữ: en-US, es-ES, hi-IN, tl-PH, ar-SA, id-ID, pt-PT, ja-JP, zh-CN, fr-FR, ru-RU, nl-NL, vi-VN, tr-TR, ko-KR, it-IT, th-TH, ms-MY, de-DE.
Các class xử lý STT
| Class | File | Mô tả |
|---|---|---|
SpeechHelper |
utils/SpeechHelper.java |
Hardcode en-US, callback đơn giản (onTextDetected, onError) |
VoiceToTextRecognizer |
helper/VoiceToTextRecognizer.java |
Dùng Locale.getDefault(), hỗ trợ partial results, toggle start/stop |
AiTutorChatActivity |
activity/AiTutorChatActivity.java |
initSpeechRecognizer() — map ngôn ngữ theo cài đặt user, hỗ trợ listen liên tục (free-hand mode) |
LearnSpeakActivity |
activity/speak/LearnSpeakActivity.java |
STT cho bài luyện phát âm, kết hợp với scoring |
2. Text-to-Speech (TTS) — Đọc văn bản
Engine: Android Native TextToSpeech (ưu tiên Google TTS — com.google.android.tts)
- Sử dụng
android.speech.tts.TextToSpeech— API TTS có sẵn trên Android. - Không dùng SDK TTS bên thứ 3 nào (không ElevenLabs, không Azure TTS, không Amazon Polly...).
- Ưu tiên Google TTS engine, kiểm tra qua helper
isGoogleTts():// ContextKt.java public static final boolean isGoogleTts(TextToSpeech tts) { return Intrinsics.areEqual(tts.getDefaultEngine(), "com.google.android.tts"); } - Nếu thiết bị không có Google TTS cho CJK (zh, ja, ko), hiển thị dialog
DialogTtsEngineBindinghướng dẫn user mở Settings > TTS để cài.
Cấu hình TTS
| Tham số | Giá trị |
|---|---|
| Pitch | 1.0 |
| Speech Rate | 0.95 |
| Voice selection | Chọn theo ngôn ngữ học, lưu index vào voiceNumber (SharedPreferences) |
| Speed modes (LearnSpeak) | Normal, Slow, Very Slow |
Flow TTS
- Khởi tạo
TextToSpeechtrongBaseActivity.onCreate()/ParentActivity.onCreate(). - Preload bằng
tts.speak("", 0, null, "preload"). - Lọc text trước khi đọc qua
cleanTextForTts()— loại bỏ ký tự đặc biệt tuỳ ngôn ngữ. - Theo dõi tiến trình qua
UtteranceProgressListener(onStart, onDone, onError). - Hỗ trợ hàng đợi đọc nhiều đoạn (
speakQueue,speakTexts()).
3. Đánh giá phát âm (Pronunciation Assessment)
Engine: Tự xây dựng phía client — so sánh text đơn giản
KHÔNG dùng SDK chuyên dụng nào (không Azure Speech Assessment, không SpeechAce, không Chivox, không ELSA, không iFlytek)
Thuật toán scoring
Nằm trong LearnSpeakActivity.calculateScore(phrase, spoken):
1. Normalize cả câu mẫu (phrase) và câu nói (spoken):
- Loại bỏ ký tự đặc biệt
- Chuyển lowercase
- Split theo khoảng trắng
2. Đếm số từ khớp (exact word match):
matchedWords = đếm từ trong phrase có xuất hiện trong spoken
3. Score = (matchedWords / totalWordsInPhrase) * 100
Clamp trong khoảng [0, 100]
Bảng đánh giá
| Score | Đánh giá | Màu |
|---|---|---|
| >= 90% | Excellent | Xanh lá |
| >= 70% | Good | Xanh lá |
| >= 50% | Fair | Vàng (#FFC107) |
| < 50% | Try Again | Đỏ (#F44336) |
Hạn chế
- Chỉ so sánh từ (word-level match), không phân tích âm vị (phoneme).
- Không đánh giá ngữ điệu, trọng âm, hay chất lượng phát âm.
- Phụ thuộc hoàn toàn vào độ chính xác của Google SpeechRecognizer.
- Thứ tự từ không ảnh hưởng đến điểm.
UI hiển thị
scoreCard: hiển thị % và label đánh giá.accuracyBar: thanh progress bar.highlightSpokenWords(): tô màu từng từ đúng/sai trong câu mẫu.cardPronunciation: hiển thị phiên âm (howToPronounce) cho từ vựng.
4. AI Chat Backend
Engine: OpenAI-compatible API thông qua backend riêng (Apero server)
Kiến trúc
App --> Apero Backend (ai_base_url từ Firebase Remote Config)
|
v
OpenAI-compatible API
(model chọn dynamic qua ModelProvider.selectedModel)
Các thành phần chính
| Class | Chức năng |
|---|---|
AssistantManager |
Tạo assistant, lấy danh sách models, generate signature |
ConversationManager |
Tạo/xoá conversation, gửi tin nhắn, lấy lịch sử, sửa ngữ pháp |
ModelProvider |
Singleton lưu model đang chọn (selectedModel) |
ApiClient |
Định nghĩa data classes: Message(role, content), RequestBodyData(model, messages) |
AIChatManagerKt |
Lấy base URL từ Remote Config, fetch server timestamp |
Bảo mật API
- Sử dụng signature-based authentication (
com.apero.signature.SignatureParser). - Signature =
parseData(apiKey, publicKey, serverTimestamp). - API key và public key PEM lấy từ Firebase Remote Config.
- Device ID dùng để định danh request.
Tính năng AI
- Chat với AI tutor (conversation-based).
- Dịch tin nhắn (
translatedMessage). - Sửa ngữ pháp (
sendGrammarFixRequest→GrammarResultvớicorrectSentencevàchangeWords). - Hỗ trợ avatar/video playback kèm chat (ExoPlayer).
5. Tổng hợp
| Tính năng | Engine | Loại | SDK bên thứ 3 |
|---|---|---|---|
| STT | Android SpeechRecognizer | Native Android API | Không |
| TTS | Android TextToSpeech (Google TTS) | Native Android API | Không |
| Pronunciation Scoring | Tự code (word matching) | Client-side | Không |
| AI Chat | OpenAI-compatible API | Server-side (Apero backend) | Không (tự host) |
Nhận xét
- App sử dụng hoàn toàn các API native của Android cho speech, không tích hợp bất kỳ SDK speech chuyên dụng nào.
- Pronunciation assessment rất cơ bản (chỉ word-level matching), không có phân tích phoneme hay đánh giá chất lượng phát âm thực sự.
- AI chat đi qua backend Apero với OpenAI-compatible API, model được cấu hình dynamic qua Firebase Remote Config.
- TTS ưu tiên Google TTS engine, có xử lý fallback nếu engine không hỗ trợ ngôn ngữ.