Flutter开发:如何基于SpeechtoText检测发音相似度百分比?
解决方案与实施步骤
一、发音评估API选型
放弃仅能实现文本转写的SpeechtoText包,选择自带发音评分能力的云端API,推荐两个成熟选项:
- Google Cloud Speech-to-Text(发音评估功能):支持多语言,能返回单词级、音素级的准确性评分,适配多语种游戏场景。
- Microsoft Azure Speech Services(发音评估):提供准确性、流利度、完整性三维评分,还能定位具体发音错误的音素,便于生成针对性提升建议。
二、核心实现步骤
替换语音识别模块
以Azure为例,调用发音评估接口时,需传入录音音频流(优先PCM格式)、目标单词/文本、语言参数,接口会返回结构化评分数据:# 伪代码示例(Azure SDK) from azure.cognitiveservices.speech import SpeechConfig, SpeechRecognizer, PronunciationAssessmentConfig speech_config = SpeechConfig(subscription="你的密钥", region="对应区域") pronunciation_config = PronunciationAssessmentConfig(reference_text="apple", grading_system="HundredMark", granularity="Phoneme") recognizer = SpeechRecognizer(speech_config=speech_config) pronunciation_config.apply_to(recognizer) result = recognizer.recognize_once() if result.reason == ResultReason.RecognizedSpeech: pron_result = PronunciationAssessmentResult(result) accuracy_score = pron_result.accuracy_score # 0-100的准确性得分关卡内容管理
用JSON配置文件存储关卡数据,示例结构:{ "levels": [ { "level_id": 1, "words": ["apple", "banana", "cat"] }, { "level_id": 2, "words": ["dog", "elephant", "fish"] } ] }加载配置后按顺序展示各关卡的待朗读单词。
单单词评分逻辑
直接采用API返回的准确性得分(如Azure的accuracy_score):- 得分≥95:判定为发音完全标准,给100%得分
- 得分60-94:发音正确但有提升空间,直接取API得分作为该单词最终得分
- 得分<60:发音偏差较大,提示用户重录或计入低分
累计得分计算
- 单关卡得分:该关卡所有单词得分的平均值
- 游戏累计得分:所有关卡得分的平均值,保留1位小数
发音提升建议生成
基于API返回的音素级错误数据,生成针对性建议:- 若某音素(如/æ/)多次发音错误:提示“你在发/æ/音时存在偏误,建议练习包含该音素的单词:cat, bag, hat”
- 若流利度得分低:提示“朗读时语速偏快或停顿不当,建议放慢语速,逐词清晰发音”
- 若完整性得分低:提示“部分单词未读完,建议朗读时确保每个单词发音完整”
三、实施建议
- 先做最小可运行版本:优先集成单个API,实现单单词评分+基础关卡逻辑,再逐步扩展多关卡、累计得分和建议功能。
- 优化录音质量:提示用户在安静环境下录制,设置录音时长为单词长度+1秒(避免截断),支持录音重录功能。
- 考虑离线备选:如果需要支持无网络场景,可调研CMU Sphinx的语音评分扩展方案,但云端API的准确性远高于离线方案。
- 强化实时反馈:读完单词后立即展示得分和简短建议,关卡结束显示关卡得分,游戏结束展示总得分+综合提升报告。
内容的提问来源于stack exchange,提问作者ayokona
相关产品推荐
相关产品推荐

