HTML5 音频捕捉 - 如何截断录制的音频

HTML5 Audio Capture - How to truncate recorded audio

我正在开发一项功能,用于从 microphone/headset 的 HTML5 应用程序中捕获音频。使用效果很好的 MediaStreamRecorder,我能够捕获所有音频。但是,在播放录制的音频期间,我注意到还捕获了用户单击尖叫声上的“停止录制”按钮所产生的鼠标点击。我想以某种方式摆脱它。一个想法是从录音中删除最后 0.5-1 秒,但我不完全确定如何实现这一点。也许还有其他一些更合适的方法...

专家对代码示例的任何建议都很棒。

我可以看到针对您的问题的三个解决方案:

  • 很简单,将其发送到服务器,使用 ffmpeg n 东西进行剪辑。缺点:服务器参与。
  • 就像 dandavis 在评论中说的那样,使用 RecorderJS,仅在从数组形成最终的 wav 文件时,忽略最后几个条目。缺点:乏味,wav 文件可能很大(因为它是未压缩的)
  • 在客户端进行编辑,将录制的视频通过管道传输到音频元素(将其静音),然后使用 mozCaptureStream 创建一个流并进行录制,然后使用设置超时在实际播放前 0.5 秒停止播放结束。缺点:就像您猜到的那样,目前仅适用于 firefox

MediaStreamRecorder.js 不为任何一端的 trim 录音提供灵活性,并为客户端应用程序生成随时可用的 WAV 编码字节流。因为字节流已经是WAV编码了,所以在那个时候应用trimming是非常困难的。然而,核心 MediaStreamEncoder 中的一个小变化可以以可配置的方式提供此功能,即客户端应用程序认为它合适。

trimFromFront 和 trimFromEnd 属性必须添加到 Recorder,然后可以在 WAV 编码发生之前使用。

收集样本的最终缓冲区在 Float32Array 中管理。我们知道采样率通常是 44100 bps。我们可以应用它从最终缓冲区中提取一个子数组,截断感兴趣的部分。

interleaved = interleaved.subarray(trimFromFront * sampleRate, interleaved.length - trimFrontEnd * sampleRate)

这也让我们可以灵活地截断几分之一秒。

因此,如果我想从前面截断 2 秒,从结尾截断 5 秒,我会这样做

trimFromFront = 2;
trimFromEnd = 5;

就是这样。最终的 WAV 编码字节流是干净的。