【问题标题】:HTML5 Audio Buffer getting stuckHTML5 音频缓冲区卡住
【发布时间】:2013-04-09 11:00:26
【问题描述】:

我正在使用 HTML5 webkitAudioContext 使用以下代码获取用户麦克风的实时级别:

var liveSource;

function getLevel(){
    var context = new webkitAudioContext();  

    navigator.webkitGetUserMedia({audio: true}, function(stream) {

       liveSource = context.createMediaStreamSource(stream);
       liveSource.connect(context.destination);

       var levelChecker = context.createJavaScriptNode(4096, 1 ,1);
       liveSource.connect(levelChecker);

       levelChecker.connect(context.destination);

       levelChecker.onaudioprocess = function(e) {

            var buffer = e.inputBuffer.getChannelData(0);


        var maxVal = 0;
        // Iterate through buffer to check if any of the |values| exceeds 1.
        for (var i = 0; i < buffer.length; i++) {
            if (maxVal < buffer[i]) {
                maxVal = buffer[i];
            }
        }
        if(maxVal <= 0.01){
            console.log(0.0);
        } else if(maxVal > 1){
            console.log(1);
        } else if(maxVal > 0.2){
            console.log(0.2);
        } else if(maxVal > 0.1){
            console.log(0.1);
        } else if(maxVal > 0.05){
            console.log(0.05);
        } else if(maxVal > 0.025){
            console.log(0.025);
        } else if(maxVal > 0.01){
            console.log(0.01);
        }
};
});

 }

getLevel();

如果您将其复制并粘贴到您的控制台并在麦克风附近单击手指(假设您已启用麦克风输入),您会看到它工作了几秒钟,然后突然停止。它不报告任何错误。谁能解释为什么会这样?谢谢

请参阅http://labs.dinahmoe.com/dynamicmusicengine/ 了解关卡正常工作的示例。

【问题讨论】:

标签: html5-audio webkitaudiocontext


【解决方案1】:

我遇到了同样的问题,但终于找到了解决方案!问题是javascript节点cicle。 我建议您先更改 createJavaScriptNode():

var levelChecker = context.createScriptProcessor(4096, 1 ,1);

垃圾收集器的“levelChecker”变量和他的 onaudioprocess 有问题,因此您必须将 scriptprocessor 或 onaudioProcess 回调绑定到窗口。这里是神圣的解决方案:

 levelChecker.onaudioprocess = window.audioProcess = function(e) { ...

只需在该行中添加 window.audioProcess,您将永远不会再处理 tat 问题。

在这里您可以找到更多信息:http://lists.w3.org/Archives/Public/public-audio/2013JanMar/0304.html

希望对你有用!

【讨论】:

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