You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

应用中同时录音与语音转文本显示异常问题排查求助

解决思路与方案

核心冲突分析

你遇到的问题本质是两个音频采集工具抢占系统音频输入资源: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 08:17:15