提问者:小点点

HTML5 Web音频API-录制声音临时


我目前正在创建一个HTML5音乐编辑程序。我从录制音频开始。我想出了如何访问microphon等等。“recorder.js”中的代码帮了我很大的忙。

但我想创建一个临时AudioBuffer,而不是写入.wave文件。我从“OnAudioProcess”事件中的inputtbuffer中获取了Float32Array并将它们一起保存在一个Float32Array中。现在我有一个数组的值,让我们假设从3秒的记录。现在我想创建一个Audiobuffer来播放我录制的声音(保存在那个数组中)。

在阅读([Webaudio API Specification])1时,没有找到使用现有的Float32Array创建新的audiobuffer的任何可能性。

也许是我录音做错了,或者我只是在阅读上瞎了眼。我读到的其他问题都是在recorder.js上链接,但我不想先保存一个文件然后再加载它。

有人知道吗?会很棒的。

谢谢大家!


共1个答案

匿名用户

我对javascript很陌生,但我想你的问题和我想要做的是一样的,现在我找到了答案。您不是调用recorder.exportwav函数,而是调用recorder.getBuffer(getBufferCallback)函数,如下所示。希望这能帮上忙。对我有用。

function stopRecording() {
        recorder.stop();
        recorder.getBuffer(getBufferCallback);

    //recorder.exportWAV(function(s) {  
        //source = window.URL.createObjectURL(s);
            //audio.src = source;
        //});
}

function getBufferCallback(buffers) {
    window.newSource = context.createBufferSource();
    window.buffers0 = buffers[0]; /*store the buffers in a variable so you can use them in future*/
    window.buffers1 = buffers[1];

    var newBuffer = context.createBuffer(2, window.buffers0.length, context.sampleRate);
    newBuffer.getChannelData(0).set(window.buffers0);
    newBuffer.getChannelData(1).set(window.buffers1);
    window.newSource.buffer = newBuffer;
    window.newSource.connect(context.destination);
    window.newSource.start(0);
}