Javascript 音频 API : onaudioprocess not fired

标签 javascript api audio process

我正在构建一个简单的应用程序,我试图在其中获取缓冲区,但似乎没有触发以下代码中的 onaudio 进程:( PasteBin )

<script>
var audio_context;
var recorder;
window.onload = function init() {
    try {
        window.AudioContext = window.AudioContext || window.webkitAudioContext;
        navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia;
        window.URL = window.URL || window.webkitURL;
        audio_context = new AudioContext;
        } catch (e) {
        console.log(e);
    }
    navigator.getUserMedia({audio: true}, startUserMedia);
    function startUserMedia(stream) {
        console.log('Initializing');
        var input = audio_context.createMediaStreamSource(stream);
        input.connect(audio_context.destination);
        var node = input.context.createGain(4096, 2, 2);
        node.onaudioprocess = function(e){
            console.log('done');
        }
        node.connect(audio_context.destination);
    }
};
</script>

如果代码正常工作,我应该得到 Initiliazing\n done,问题是我只得到 Initiazing 而 onaudioprocess 没有被触发。我正在使用最新的 chrome:

enter image description here

最佳答案

onaudioprocess 不是 GainNode 的属性,而是 ScriptProcessorNode 的属性。查看API reference here .

我对 Web Audio API 不是很熟悉,但如果我理解正确的话,您需要将它插入到您获得的节点和您的目的地之间,以便能够处理这些事件:

var node = input.context.createGain(4096, 2, 2);
var processor = input.context.createScriptProcessor(4096,1,1);

processor.onaudioprocess = function(e){
  console.log('done');
}

node.connect(processor);
processor.connect(audio_context.destination);

Example at jsFiddle .如您所见,它在处理流时将 done 打印到控制台,但我无法说明此设置的正确性(因为正如我所说,经验不足)所以请仔细检查节点之间的连接 - 如有必要,调整第一个参数(缓冲区大小)。


注意:我假设您想做一些改变流的事情(您的问题中并不清楚)。如果你想做其他事情(例如,只是分析它)但不想改变输入,你可以像以前一样连接节点(nodedestination) 并创建具有一个输入但没有输出ScriptProcessorNode:

var node = input.context.createGain(4096, 2, 2);
node.connect(audio_context.destination);

var processor = input.context.createScriptProcessor(4096,1,0);

processor.onaudioprocess = function(e){
  console.log('done');
}

node.connect(processor);

关于Javascript 音频 API : onaudioprocess not fired,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20602720/

相关文章:

javascript - 修改 Angular $scope 后 DOM 没有刷新

javascript - 如何使传单 map 根据动态面板点击动态缩放到位置?

java - 尝试从 Google Analytics API 中提取受众数据

c# - 带均衡器的声音

javascript - webapi 3D 空间化 : how to apply distance delay

javascript - 从客户端设置和清除 Node 服务器上的超时

javascript - 在一个 ViewModel 中绑定(bind)多个 ObservableArrays 的 Knockout.js 最佳实践

ios - 文本转语音 API 不适用于 iOS

Java 排序集合/api

audio - 关于 youtube-dl