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

Google Cloud Speech-to-text不同麦克风下韩语识别不返回isFinal=true问题

问题分析与解决方案

问题核心

使用Node.js + Google Cloud Speech-to-Text + node-record-lpcm16(sox录音器)时,仅在**AirPods Pro + 韩语(ko-KR)**组合下无法返回isFinal: true的识别结果,其他组合(内置麦克风+韩语、AirPods Pro+英语)均正常。

可能原因

  1. AirPods Pro默认双声道输出,韩语语音断句检测对单声道音频的兼容性更好
  2. 韩语模型对音频信噪比、静音时长的判断逻辑与英语不同,AirPods的音频输入特性触发了检测异常
  3. sox录音参数未适配AirPods的硬件特性

具体解决方案

1. 强制录制单声道音频

修改node-record-lpcm16的配置,强制使用单声道录制,匹配Google Speech-to-Text的最优输入格式:

let recording = record
  .record({
    sampleRate: 16000,
    threshold: 0,
    recordProgram: 'sox',
    channels: 1, // 新增:强制单声道录制
  });

2. 优化Google Speech配置

调整韩语识别的参数,启用自动标点、更换更适合短句的模型,辅助断句检测:

const request = {
  config: {
    encoding: 'LINEAR16',
    sampleRateHertz: 16000,
    languageCode: 'ko-KR',
    enableAutomaticPunctuation: true, // 启用自动标点帮助断句
    model: 'command_and_search', // 切换为更适合短句的识别模型
    // 可选:添加常用韩语短语,提升识别精度与断句准确性
    speechContexts: [{
      phrases: ['안녕하세요', '감사합니다', '네', '아니요']
    }]
  },
  interimResults: true,
};

3. 指定AirPods为录音设备

通过sox -L命令查看系统音频设备列表,找到AirPods的设备名称,在配置中指定,避免sox自动选择设备导致的参数不匹配:

let recording = record
  .record({
    sampleRate: 16000,
    threshold: 0,
    recordProgram: 'sox',
    channels: 1,
    device: 'AirPods Pro', // 替换为你的AirPods实际设备名
  });

4. 手动监测静音触发停止录制

如果以上方法无效,可在代码中添加静音监测逻辑,当检测到超过设定时长的静音时,主动停止录制,强制Google返回最终结果:

// 在startListening函数内新增变量
let lastAudioTime = Date.now();
const SILENCE_THRESHOLD = 1500; // 1.5秒静音后停止
let silenceTimeout;

// 修改recording.stream的data事件处理
recording.stream()
  .on('data', buf => {
    totalSize += buf.length;
    lastAudioTime = Date.now(); // 更新最后有音频输入的时间
    if (!expireTime) {
      // 原有初始化逻辑...
    };
    // 新增静音监测
    if (!stopped) {
      clearTimeout(silenceTimeout);
      silenceTimeout = setTimeout(() => {
        recording.stop();
        console.log('[speech] Stop (silence detected)');
        stopped = true;
      }, SILENCE_THRESHOLD);
    }
  })

// 修改stop函数,清除静音定时器
return {
  stop() {
    clearTimeout(stopTimeout);
    clearTimeout(silenceTimeout); // 新增
    if (!stopped) {
      recording.stop();
      console.log('[speech] Stop (user)');
      stopped = true;
    }
  }
};

内容的提问来源于stack exchange,提问作者devonnuri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:25:30