应用中同时录音与语音转文本显示异常问题排查求助
解决思路与方案
核心冲突分析
你遇到的问题本质是两个音频采集工具抢占系统音频输入资源:record包的startRecording会独占麦克风,导致speech_to_text的listen方法无法获取有效音频流,最终表现为转写文本不准确或无输出。
具体解决步骤
1. 放弃双包并行,用单包实现双需求
无需同时依赖两个包,选择其中一个即可兼顾录音与转写:
- 基于
speech_to_text实现:该包支持获取原始音频数据,可在转写回调中将音频流写入文件完成录音。示例代码片段:
SpeechToText speechToText = SpeechToText(); File audioFile = File('your/save/path/audio.wav'); IOSink? audioSink; void startListeningAndRecording() async { bool isInitialized = await speechToText.initialize(); if (!isInitialized) return; audioSink = audioFile.openWrite(); await speechToText.listen( onResult: (result) { // 更新UI显示转写文本 setState(() { transcribedText = result.recognizedWords; }); }, listenFor: Duration(minutes: 10), // 配置音频格式,确保写入文件的格式兼容 audioFormat: AudioFormat( sampleRate: 16000, channels: 1, encoding: AudioEncoding.pcm16, ), onAudioData: (data) { // 将原始音频数据写入文件 audioSink?.add(data); }, ); } // 结束时关闭资源 void stopAll() async { await speechToText.stop(); await audioSink?.close(); }
- 基于
record包实现:先完成录音,再将录制好的音频文件传入speech_to_text的离线转写接口(或第三方语音转写API)完成文本转换。
2. 检查权限与平台配置
- Android:在
AndroidManifest.xml中添加权限
<uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.INTERNET" /> <!-- 在线转写需要 -->
- iOS:在
Info.plist中添加权限描述
<key>NSSpeechRecognitionUsageDescription</key> <string>需要使用语音识别功能</string> <key>NSMicrophoneUsageDescription</key> <string>需要使用麦克风录制音频</string>
- 确保
speech_to_text初始化成功后再调用listen:
bool available = await speechToText.initialize(); if (available) { // 初始化成功,执行监听逻辑 } else { // 提示用户检查权限或设备支持情况 }
3. 排查资源占用问题
测试设备麦克风是否被其他应用占用,可先单独运行speech_to_text的listen方法,确认转写功能正常后,再集成录音逻辑。
内容的提问来源于stack exchange,提问作者Sobhan Ziyaei
相关产品推荐
相关产品推荐

