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

桌面端使用mic-recorder-to-mp3录音后无声问题求助

解决mic-recorder-to-mp3录音后无声音的问题

我看了你用mic-recorder-to-mp3实现桌面端音频录制的代码,停止录制后播放没声音大概率是几个常见的兼容性或配置问题导致的,咱们一步步来修复:

1. 替换过时的getUserMedia API

你当前使用的navigator.getUserMedia已经被浏览器废弃,现代浏览器统一使用navigator.mediaDevices.getUserMedia,旧API可能导致权限处理异常,进而无法正常捕获音频流。修改componentDidMount中的代码:

componentDidMount(){
  navigator.mediaDevices.getUserMedia({ audio: true })
    .then(() => {
      console.log('Permission Granted');
      this.setState({ isBlocked: false });
    })
    .catch(() => {
      console.log('Permission Denied');
      this.setState({ isBlocked: true });
    });
}

2. 确保音频元素能正确加载新的Blob URL

有时候React的audio元素不会自动感知src的变化,导致播放的还是旧的空音频资源。给audio标签添加key属性并绑定blobURL,这样每次URL更新时都会重新渲染音频组件:

<audio class="audio" src={this.state.blobURL} controls="controls" key={this.state.blobURL} />

3. 调整Recorder实例的初始化时机

你把Mp3Recorder实例放在全局作用域,可能在麦克风权限还未获取时就完成了初始化,导致它没能绑定到正确的媒体流。可以将实例初始化移到组件内部,比如在权限获取成功后或start方法中:

// 移除全局的Mp3Recorder定义,修改start方法:
start = () => {
  if (this.state.isBlocked) {
    console.log('Permission Denied');
  } else {
    // 每次开始录音时创建新的Recorder实例
    const Mp3Recorder = new MicRecorder({ bitRate: 128 });
    Mp3Recorder
      .start()
      .then(() => {
        this.setState({ isRecording: true })
      }).catch((e) => console.error(e));
  }
};

4. 排查Blob是否有效

在stop方法中打印Blob的大小,确认是否真的录到了音频数据:

stop = () => {
  Mp3Recorder
    .stop()
    .getMp3()
    .then(([buffer, blob]) => {
      console.log('Recorded Blob size:', blob.size); // 如果size为0,说明未捕获到音频
      const blobURL = URL.createObjectURL(blob)
      this.setState({ blobURL, isRecording: false });
    }).catch((e) => console.error(e)); // 改为error输出,方便查看详细错误信息
};

做完这些修改后,记得测试时确保浏览器已授予麦克风权限,且麦克风设备正常工作,应该就能正常播放录制的音频了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 15:47:59