【问题标题】:HTML5 Web Audio API - Recording Sound TemporaryHTML5 Web Audio API - 临时录制声音
【发布时间】:2014-04-22 11:20:01
【问题描述】:

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

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

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

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

有人知道吗? 会很棒。

谢谢大家!

【问题讨论】:

    标签: html api audio web record


    【解决方案1】:

    我对 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);
    }
    

    【讨论】:

    • 嗯...非常感谢!有用!我刚刚阅读了 w3c 规范中的“只读”,所以我认为您无法操作。但很简单:只需创建一个缓冲区,调用 get Channeldate 并将其设置为任何数据数组......(您不需要 recorder.js)......再次感谢......
    • 非常感谢!很高兴听到它有帮助:) 玩得开心! :)
    猜你喜欢
    • 2013-01-03
    • 2013-02-24
    • 1970-01-01
    • 2023-03-10
    • 2014-04-15
    • 2014-01-22
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多