html - 填写我自己的Web音频缓冲区不起作用

标签 html audio web

我将Web Audio用于各种目的,并且通过URL和振荡器加载的样本可以正常工作并正常播放,而构建自定义源缓冲区则不能。我尝试使用下面的代码并通过Chrome-NetBeans调试器将我自己的AudioBuffer加载到AudioBufferSourceNode中,我可以看到它正在加载具有数据的缓冲区,并且未标记任何错误,但是调用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);

最佳答案

这会将您的噪音合成在一个回调方法中,该方法每次渲染另一个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);

关于html - 填写我自己的Web音频缓冲区不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26794845/

相关文章:

javascript - 如何使用 BeautifulSoup 读取定期生成的 innerHTML 元素?

html - 如何在 PHONE GAP 中为 Android 设备修复此 STICKY 页脚?

c - 阿尔萨 API : How to play two wave files simultaneously?

web - 如何为学校网站做 SEO

javascript - 初始化后如何访问类的成员?

css - IE7 和 header 中的嵌套跨度

html - CSS3 Hover Effect 重新定位问题

Windows 核心音频 API + WaveOutXxx API

python - 如何使用pygame播放音乐(Python)

Angular Routing - 嵌套路由器导出(一个主要 + 两个命名导出) - 导航到第三个路由器导出时出错