适用于Android 4.1的Android版本30和31测试版的Chrome似乎无法使用HTML5网络音频和navigator.webkitGetUserMedia正确录制音频。 (Android上的Chrome 30+应该支持这些API。)
症状是代码似乎正常工作,包括显示是否允许麦克风访问的提示,但记录的数据只包含零。
我创建了一个简化的测试用例(转到http://jsfiddle.net/JCFtK/,然后单击“录制”按钮,然后选择适当的选项以允许它访问您的麦克风)。代码的关键部分如下('record'函数是入口点)。
function processAudioBuffer(e) {
var floats = e.inputBuffer.getChannelData(0);
var min = 0, max = 0;
for (var i = 0; i < floats.length; i++) {
var current = floats[i];
min = Math.min(current, min);
max = Math.max(current, max);
}
log('Block min/max: ' + min.toFixed(3) + ', ' + max.toFixed(3));
}
function record() {
if (!window.AudioContext) {
window.AudioContext = window.webkitAudioContext;
}
if (!navigator.getUserMedia) {
navigator.getUserMedia = navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
}
data.context = new AudioContext();
navigator.getUserMedia({audio: true}, function(stream) {
data.mediaStream = stream;
startAudio();
}, function(error) {
log('Stream get error: ' + error);
});
}
function startAudio() {
// Get input media stream.
data.audioStream = data.context.createMediaStreamSource(data.mediaStream);
// Set up JS processor.
data.processor = data.context.createScriptProcessor(2048, 1, 1);
data.processor.onaudioprocess = processAudioBuffer;
// You need to connect the output of processor to the audio output or it
// doesn't work. (In Firefox, connecting it just to a gain node works;
// in Chrome you have to connect to output like this.)
data.processor.connect(data.context.destination);
// Connect input stream to processor, then we're done.
data.audioStream.connect(data.processor);
log('Stream connected OK');
}
测试显示每个记录块的最小/最大音频值。当它工作时 - 例如在桌面Chrome中 - 你会看到最小值/最大值根据背景噪音而变化。当它不起作用时,这些值始终为0.000。
此测试用例如下:
此测试用例不适用于以下内容:
测试用例在Safari或IE等其他浏览器中也不起作用,但这是预期的,因为它们不支持必要的API。我只希望将这项功能用于Android,但事实并非如此。
我已经将此问题作为一个问题使用Chrome问题报告流程(这是私有的,可能是一个黑洞),但我想我也会在这里问:是否有人知道修复此代码的解决方法,所以我可以实际上它可以在Chrome for Android上运行吗?
(我的目的是要求录制的音频必须转到JavaScript事件处理程序,例如此处的处理程序,例如,不能直接作为表单上载的一部分直接发送到服务器,这很可能已经有效。)< / p>
我的印象是,这是最前沿的东西,并没有太多人试图使用它,但我认为这可能值得问。 :)
答案 0 :(得分:3)
我们仍在开发Android的音频输入;它在版本31中启用,但它尚未在所有设备上启用。它适用于Nexus设备,至少--N4,N5,N7。