我对Wami录音机有一个非常奇怪的问题。允许Flash文件许可使用我的麦克风后,我试图录制一个音频文件夹。然而,大多数情况下,并非所有时间,第一次录制尝试都会将空音频片段传递给服务器。
FLASH: Listening...
FLASH: Recording at rate: 22050
FLASH: POST 44 bytes of type audio/x-wav
FLASH: Expected Samples: 27849 Actual Samples: 0
FLASH: Unlistening.
FLASH: POST openHandler: [Event type="open" bubbles=false cancelable=false eventPhase=2]
FLASH: POST progressHandler loaded:7 total: 0
FLASH: POST: completeHandler
与
相反FLASH: Listening...
FLASH: Recording at rate: 22050
FLASH: POST 34860 bytes of type audio/x-wav
FLASH: Expected Samples: 19161 Actual Samples: 17408
FLASH: Unlistening.
FLASH: POST openHandler: [Event type="open" bubbles=false cancelable=false eventPhase=2]
FLASH: POST progressHandler loaded:7 total: 0
FLASH: POST: completeHandler
我无法弄清楚造成这种情况的原因,因为它似乎并没有发生在每个人身上。
答案 0 :(得分:1)
我也一直在努力解决这个问题。谢天谢地,我终于找到了解决方法。
我认为问题在于:Chrome有自己的机制来管理用户使用麦克风的权限,这些机制取决于操作系统。在Windows + Chrome上,这种特殊的机制与Wami-recorder的机制相冲突,导致Wami-recorder的权限请求变得无用(即使它仍然显示)。
我通过强制Chrome的权限对话框访问麦克风来实现它。允许访问麦克风后,此权限适用于浏览器 - 网站会话的其余部分。我强制通过权限对话,请求通过HTML5使用麦克风,从here复制代码。
并非所有浏览器都支持HTML5或仅通过HTML5访问麦克风。而且,在其他浏览器上,这种黑客攻击不是必需的。要仅针对Chrome强制对话,我将代码置于测试Chrome的条件中。奇怪的是,这实际上打破了Chromium上的录音机(奇怪地与Chrome上的同行相反,它正在运行)。我找到了一些区分Chrome和Chromium here的代码。
这是我的代码:
/**
* isChrome (WithPDFReader)
* thanks to Rob W from
* https://stackoverflow.com/questions/17278770/how-do-i-detect-chromium-specifically-vs-chrome
*/
function isChrome()
{
for (var i=0; i<navigator.plugins.length; i++)
if (navigator.plugins[i].name == 'Chrome PDF Viewer') return true;
return false;
}
/* somewhere else: */
/*
* If on Chrome (not Chromium), force permission request
*/
if( isChrome() )
{
var context = new window.webkitAudioContext();
navigator.webkitGetUserMedia({audio: true}, function(stream) {
var microphone = context.createMediaStreamSource(stream);
var filter = context.createBiquadFilter();
// microphone -> filter -> destination.
microphone.connect(filter);
filter.connect(context.destination);
}, function(){ /* do something */ });
}
// initialize Wami
Wami.setup({ ... });