1

我希望能够将音频输入记录到缓冲区中,并像普通<audio>标签一样使用控件进行播放。是否可以控制播放(暂停、播放、跳过、擦洗等)?

例如,在 Chris Wilson 的项目:http ://webaudiodemos.appspot.com/AudioRecorder/index.html中,他记录了麦克风输入,并允许将其作为 WAV 下载。而不是下载,在录制之后,我希望能够使用标准音频控件来播放它。我不确定缓冲区是否打算以这种方式使用。

如果这不可能,我是否需要先将该缓冲区转换为音频文件(ogg/mp3/wav)?为了提供更多上下文,想象正在创建的应用程序就像一个带有音频输入的 GarageBand 类型的程序,可以在录制后播放和编辑。

我的问题似乎与这个有关除了我没有向服务器发送任何内容,并且我正在通过RecorderJS 项目audioRecorder.getBuffers()中定义的方式获取我的音频输入。

4

1 回答 1

2

所以,你有两个选择——

1)您可以直接从RecordJS获取(合并!)AudioBuffer并直接播放。这是最有效的;您不是将其“编码”为 WAV,然后必须再次对其进行解码。缺点是直接播放音频缓冲区意味着您必须自己实现播放器控件 - 实现暂停、播放、跳过、擦洗等很容易,但您必须这样做。(“scrub”难度适中,但其余部分非常简单。请注意,您在 AudioBufferSourceNode 中并没有真正的“暂停” - 您需要 stop() BufferSource 节点,记住您所在的位置,然后创建一个新的 BufferSource node 和 start() 当传输停止时。)嗯,这听起来像是一个很好的副项目作为一个例子 - 不幸的是,

2)您可以,而不是“下载”,只需获取blob URL并将其用作元素的SRC - 这将为您进行播放。这会容易得多,但您没有细粒度的控制 - 并且您在此处至少有效地复制缓冲区一次。

对于像 GarageBand 这样的类似 DAW 的项目,我强烈推荐 #1,因为无论如何你都会想做自定义传输控制(因为你想同步播放多个轨道等)这需要更长的时间实施,但它更有效,更接近你想要做的。

于 2013-10-09T16:41:05.843 回答