【问题标题】:Wami-Recorder not picking up audio the first timeWami-Recorder 第一次没有拾取音频
【发布时间】:2013-01-31 03:33:08
【问题描述】:

我的 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

我无法弄清楚是什么原因造成的,因为它似乎并没有发生在每个人身上。

【问题讨论】:

  • 我认为页面未加载,您正在调用录制声音。可能是因为第一次发送的是空文件。
  • @YogeshSuthar 你是什么意思?如果您的意思是页面尚未完成加载,则整个脚本将包含在 $(document).ready() 函数中。
  • 我知道这听起来像一个非常丑陋的解决方案,但是您如何自动预先录制一个空的 1 秒音频剪辑并忽略它,这样当用户录制自己的音频时,它实际上会被录制?
  • @user1916182 哈哈我实际上已经尝试过了,由于某种原因,它在 Wami 初始化之前运行命令,即使将它放在 setTimeout() 中也是如此。

标签: php javascript flash


【解决方案1】:

我也一直在努力解决这个问题。谢天谢地,我终于找到了解决方法。

我认为问题在于:Chrome 有自己的机制来管理用户使用麦克风的权限,而这些机制取决于操作系统。在 windows 和 Chrome 上,这种特殊机制与 Wami-recorder 的机制发生冲突,导致 Wami-recorder 的权限请求无效(即使它仍然显示)。

我通过强制 Chrome 的权限对话框访问麦克风来使其工作。允许访问麦克风后,此权限将在浏览器-网站会话的其余部分保留。我通过 HTML5 请求使用麦克风来强制许可对话框,从 here 复制代码。

并非所有浏览器都支持 HTML5,或者仅支持通过 HTML5 访问麦克风。此外,在其他浏览器上,这种 hack 是不必要的。为了只为 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({ ... });

【讨论】:

    猜你喜欢
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多