【问题标题】:Filling in my own Web Audio Buffer is not working填写我自己的网络音频缓冲区不起作用
【发布时间】:2014-11-07 05:42:52
【问题描述】:

我将网络音频用于各种目的,虽然通过 URL 加载的样本和振荡器正常工作和播放,但构建自定义源缓冲区却不行。我尝试使用下面的代码将我自己的 AudioBuffer 加载到 AudioBufferSourceNode 中,并通过 Chrome-NetBeans 调试器我可以看到它正在使用数据加载缓冲区并且没有标记任何错误,但是当调用 start 时,没有声音产生。请注意,我只是用噪声填充缓冲区,但我计划用我自己的自定义波形数据填充它。我意识到我很可能用错误的数据类型填充缓冲区,但我无法找到任何有关正确执行方式的文档或示例。任何帮助将不胜感激。

var audioContext = new (window.AudioContext || window.webkitAudioContext)();
var frameCount = 2000;
var sampleRate = 4000;
var myBuffer = audioContext.createBuffer(2, frameCount, sampleRate);

// FILL WITH WHITE NOISE
for (var i = 0; i < frameCount; i++) {
    myBuffer[i] = Math.random() * 2 - 1;
}
sourceNode = audioContext.createBufferSource();
sourceNode.buffer = myBuffer;
sourceNode.connect(audioContext.destination);
sourceNode.start(0);

【问题讨论】:

    标签: html audio web


    【解决方案1】:

    这将在一个回调方法中合成你的噪音,每次你渲染另一个 BUFF_SIZE 数量的样本时都会调用该方法

    var BUFF_SIZE = 2048; // spec allows, yet do not go below 1024 
    var audio_context = new AudioContext();
    var gain_node = audio_context.createGain();
    gain_node.connect( audio_context.destination );
    var source_node = audio_context.createScriptProcessor(BUFF_SIZE, 1, 1);
    
    source_node.onaudioprocess = (function() {
    
        return function(event) {
    
            var synth_buff = event.outputBuffer.getChannelData(0); // mono for now
    
            // FILL WITH WHITE NOISE
            for (var i = 0, buff_size = synth_buff.length; i < buff_size; i++) {
                synth_buff[i] = Math.random() * 2 - 1;
            }
        };
    }());
    
    source_node.connect(gain_node);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-07
      • 1970-01-01
      • 1970-01-01
      • 2014-04-28
      • 2022-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多