HTML5 Web Audio API - 临时录制声音

问题描述 投票:0回答:1

我目前正在创建一个 HTML5 音乐编辑程序。 我从录制音频开始。 我弄清楚了如何访问麦克风等等。 “Recorder.js”中的代码对我帮助很大。

但是我想创建一个临时音频缓冲区,而不是写入 .wave 文件。 我从“onaudioprocess”事件中的 inputtbuffer 获取了 Float32Array,并将它们全部保存在一个 Float32Array 中。 现在我有一个包含值的数组,假设来自 3 秒的记录。 现在我想创建一个音频缓冲区来播放我录制的声音(保存在该数组中)。

阅读了([Webaudio API 规范])1,但没有发现任何使用现有 Float32Array 创建新音频缓冲区的可能性。

也许我的录音方式有误,或者我只是盲目阅读。 我读到的所有其他问题都链接在 Recorder.js 上,但我不想先保存文件然后再次加载它。

有人知道吗? 会很棒的。

html web-audio-api audio-recording
1个回答
0
投票

我对javascript很陌生,但我认为你的问题与我试图做的事情相同,现在我找到了答案。您可以调用 recorder.getBuffer(getBufferCallback) 函数,而不是调用 recorder.exportWAV 函数,如下所示。我希望这有帮助。它对我有用。

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.