Dee*_*psy 9 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>
Run Code Online (Sandbox Code Playgroud)
如果代码按照我应该得到的方式工作Initiliazing \n done,那么问题是我只获得了Initiazing并且没有触发onaudioprocess.我正在使用最新的铬:

onaudioprocess不属于GainNode,但属于ScriptProcessorNode.请参阅此处的API参考.
我对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);
Run Code Online (Sandbox Code Playgroud)
jsFiddle的例子.正如您所看到的那样,它done在处理流时会打印到控制台,但我不能说这个设置的正确性(因为,正如我所说,经验不多)所以请仔细检查节点之间的连接 - 如有必要,请调整第一个参数(缓冲区大小).
注意:我假设您想要做一些改变流的事情(在您的问题中不清楚).如果你想要其他东西(例如,只是分析它)但不会改变输入,你可以像之前(node和destination)那样连接节点并创建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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4342 次 |
| 最近记录: |