在移动版Chrome中使用HTML5捕获麦克风输入

4
我正在尝试在Chrome 29 Beta for Android上使用HTML5录制麦克风(它已经在其beta 29中启用了Web音频支持)。 在下面的代码中,ProcessAudio是Web音频过滤器函数,在其中我从麦克风接收输入缓冲区。 我得到了正确的采样大小。 但是,在移动版Chrome中,音频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>

FYI,自从Chrome移动版(稳定版和Beta版)更新以来已经有一段时间了,好消息是现在所有功能都正常工作,包括实时输入。赶紧试试吧!PS:也许是我的错误报告起了作用 C: - JSmyth
2个回答

2

现在,Chrome for Android Beta(31.0.1650.11)已经支持Web音频输入。


1
目前在 Chrome beta for Android 中存在 inputBuffer 的问题 - 它总是包含零(至少在我测试的设备上是这样),正如你所提到的 - 已确认。但为了演示目的,我现在能做到的最好的就是通过 <audio> 对象播放“实时”输入流。请参见此处。点击“录制”,然后开始播放音频对象。除此之外,在当前的beta版中,其他功能都很糟糕。我想我正在等待G公司尽快修补它。不过,我发现zingaya.com在Chrome Beta for Android上运行良好(即,记录您的音频并将其回放给您)。只需尝试一下,它们就会回放您的流。显然,这是通过利用WebRTC实现的。换句话说,你显然可以通过这种方式记录音频流,但我还没有弄清楚如何做到这一点。如果你有什么想法,请发表出来。另一方面,G公司正在快速工作 - 他们不到一周时间就发布了一个新的beta版本,至少可以播放使用XHR获取的音频。之前的版本甚至不能做到这一点。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接