【问题标题】:Live processing getUserMedia audio using the ScriptProcessorNode使用 ScriptProcessorNode 实时处理 getUserMedia 音频
【发布时间】:2013-09-17 14:41:23
【问题描述】:

我正在尝试获取一些有关麦克风数据的实时数据。所以我将一个 ScriptProcessorNode 连接到我的现场音频的输出,如下所示(coffeescript):

audioSource = navigator.getUserMedia({audio:true},(stream)->
    source = context.createMediaStreamSource(stream)

    analyser = context.createScriptProcessor(1024,1,1)
    source.connect(analyser)

    analyser.onaudioprocess = (e)->
        \\Processing Takes Place here

然而,永远不会调用 onaudioprocess 函数。我需要做什么才能让它运行?

【问题讨论】:

  • 你没有说你是否得到了 getUserMedia 回调,如果音频输入在其他地方工作......你有一个现场例子可以调试吗?
  • 如果我添加source.connect(context.destination),我可以听到我的音频循环返回,所以输入正常。
  • 您确实应该将简化的测试用例发布到 JSFiddle。我怀疑还有更多的事情发生。您将getUserMedia 的返回值(顺便说一句,未定义)分配给变量的事实对我来说似乎是一个危险信号。如果没有完整的代码示例,任何人都无法提供太多帮助。
  • getUserMedia 在成功函数之后有一个错误函数,你应该在那里添加一个。您需要为页面提供服务(不仅仅是来自本地),getUserMedia 才能正常工作。

标签: javascript html coffeescript web-audio-api getusermedia


【解决方案1】:

ScriptProcesseronaudioprocess 事件如果其输出未连接到其他节点,则不会启动。

您可以查看此fiddle 以查看它的实际效果。

var scr = context.createScriptProcessor(1024,1,1);

// uncomment the line below and onaudioprocess will start
//scr.connect(context.destination);

scr.onaudioprocess = function(){
    console.log('test');
};

只需将ScriptProcessor 的输出连接到context.destination 或虚拟gain 节点,onaudioprocess 就会启动。

【讨论】:

【解决方案2】:

试试这样。我认为它对你有用。

var source = context.createMediaStreamSource(stream);
        var proc = context.createScriptProcessor(2048, 2, 2);
        source.connect(proc);
        proc.connect(context.destination);
        proc.onaudioprocess = function(event)
        {
            var audio_data = event.inputBuffer.getChannelData(0)|| new Float32Array(2048);
            console.log(audio_data);
            iosocket.emit('audiomsg',audio_data); 
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-18
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 2021-01-21
    相关资源
    最近更新 更多