使用html5捕获移动Chrome上的麦克风输入

时间:2013-07-22 11:24:37

标签: html5 google-chrome mobile microphone web-audio

我正在尝试使用适用于Android的Chrome 29 Beta中的HTML5从麦克风录制(它已在其测试版29中启用了网络音频支持)。在下面的代码中,ProcessAudio是Web音频过滤器功能,我从麦克风接收输入缓冲区。我得到了正确的样本量。但是,移动铬合金中的音频pcm样本始终为零。 chrome是否禁用其移动版本中音频滤镜的输入?有没有人在Chrome移动版中使用HTML5进行录音? 以下代码在chrome(桌面版)中工作正常。

    <!DOCTYPE HTML>
    <html>
    <head>
    <script>
        function GetMedia(obj, fnSuccess, fnFailure)
        {
            if(navigator.getUserMedia)
            {
                return navigator.getUserMedia(obj, fnSuccess, fnFailure);
            }
            else if(navigator.webkitGetUserMedia)
            {
                return navigator.webkitGetUserMedia(obj, fnSuccess, fnFailure);
            }
            else if(navigator.mozGetUserMedia)
            {
                return navigator.mozGetUserMedia(obj, fnSuccess, fnFailure);
            }
            else if(navigator.msGetUserMedia)
            {
                return navigator.msGetUserMedia(obj, fnSuccess, fnFailure);
            }
            alert("no audio capture");
        }

        var incrementer = 0;
        function ProcessAudio(e)
        {
            var inputBuffer = e.inputBuffer.getChannelData(0);
            var outputBuffer = e.outputBuffer.getChannelData(0);
            outputBuffer.set(inputBuffer, 0);
            document.getElementById("display").innerText = 
                            incrementer + " " + inputBuffer[0];
            incrementer++;

        }

        var context = null;

        function Success(localMediaStream)
        {
            context = new window.webkitAudioContext();
            var microphone = context.createMediaStreamSource(localMediaStream);
            var node = context.createScriptProcessor(4096, 1, 1);
            node.onaudioprocess = ProcessAudio;
            microphone.connect(node);
            node.connect(context.destination);
        }
        function Error(err)
        {
            alert("no audio support");
        }
        function load(e)
        {
            GetMedia({audio:true,video:false}, Success, Error);
        }
    </script>
    </head>
    <body onload="load(event)">
    <div>Audio Player</div>
    <div id="display"></div>
    <video id="localvideo" autoplay="autoplay" style="opacity:1"></video>
    </body>
    </html>

2 个答案:

答案 0 :(得分:2)

我们现在已在Chrome for Android Beta(31.0.1650.11)中使用网络音频输入。

答案 1 :(得分:1)

目前,Android版Chrome测试版中的inputBuffer存在问题 - 它总是包含零(至少在我测试的那些设备上),如您所述 - 已确认。这对我的帮助不大,但是出于演示的目的,我现在可以实现的最好的方法是通过<audio>对象播放“实时”输入流。见here。点击“记录”,然后开始播放音频对象。除此之外的其余部分是TARFU目前的测试版。猜猜我在等待G-folks尽快修补它。我发现的是,zingaya.com可以在适用于Android的Chrome测试版中正常工作(即记录您的音频并播放给您)。试试吧,他们会回放你的流。显然,这是通过利用WebRTC来实现的。换句话说,你显然可以以这种方式录制音频流,我还没想出如何做到这一点。如果你拿出一些东西,请张贴。另一方面,G-guys正在快速工作 - 他们在不到一周前发布了一个新的测试版,至少可以播放用XHR获取的音频。之前的版本甚至无法做到这一点。