2016-02-23 119 views
1

我正在开发一项功能,以从麦克风/耳机捕获HTML5应用程序中的音频。使用MediaStreamRecorder这非常好,我可以捕获所有音频。但是,在播放录制的音频时,我注意到用户点击尖叫上的停止录制按钮时的鼠标点击也被捕获。我想以某种方式摆脱它。一个想法是从记录中放弃最后0.5-1秒,但我不完全确定如何实现这一点。也许还有其他一些更合适的方法,以及...HTML5音频捕获 - 如何截断录制的音频

任何建议与专家的代码示例将是伟大的。

+0

您可以在将大样本阵列切成WAV之前切片 – dandavis

回答

0

MediaStreamRecorder.js不提供灵活性,在两端修剪记录并产生一个准备WAV编码的字节流使用的客户端应用程序。因为字节流已经被WAV编码,所以当时很难应用修整。 Hovever,核心MediaStreamEncoder中的一个小改变可以以可配置的方式提供此功能,即客户端应用程序认为它适合。

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

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

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

这使我们可以灵活地截断一秒的一小部分。

所以,如果我要截断来自前2秒和结束5秒,我会做

trimFromFront = 2; 
trimFromEnd = 5; 

这是所有。最后的WAV编码的字节流出现干净。

0

我可以看到你的问题三种解决方案:

  • 容易,使用ffmpegñ东西发送到服务器,剪辑。 con:服务器参与进来。
  • 像dandavis在评论中说的,使用RecorderJS,只有在从数组形成最终的wav文件的时候,忽略了最后几个条目。 conntia和wav文件可能会很大(因为它是未压缩的)
  • 做编辑客户端,将录制的视频管道传输到音频元素(,将其静音),然后使用mozCaptureStream创建一个流并记录它,并使用在实际完成之前设置超时时间以停止.5秒。 CON:喜欢你也能猜到,只适用于Firefox现在