2

我在检测是否检测到麦克风时遇到了一些问题。我正在运行该函数,如果没有连接麦克风,或者如果用户在安全面板上单击了“拒绝”,Microphone.getMicrophone()它应该返回null ,对吗?

我面临的问题是,在一些没有安装麦克风的计算机上,Microphone.getMicrophone()仍然可以追溯到[object Microphone].

例如,假设用户没有麦克风,并且在安全面板中单击允许,我无法验证是否切换到不同的控件。

如果有人可以阐明如何检测是否没有连接麦克风,那么我全神贯注。

非常感谢,威尔

4

5 回答 5

2
var mic:Microphone          = Microphone.getMicrophone();

try {
    micName = mic.name
    trace("mic.name "+mic.name)
} catch (e:Error) {
    trace("no mic detected")
}
于 2012-02-21T10:41:50.333 回答
1

好吧,我建议在连接时进行麦克风测试,记录用户的 1-2 秒并将其发送回服务器进行评估,将其发送回用户并制作一些按钮让用户在听到声音时进行批准。这就是 Skype 所做的,您可以在同一个测试屏幕上添加一些花哨的控制器以具有适当的噪声阈值水平和输入/输出音量等。

我不确定,但即使 getMicrophone() 返回错误/不存在的设备,它也无法正确记录它。

于 2009-10-24T10:52:06.517 回答
0

您可以检查 mic.activityLevel 属性以检查是否有任何麦克风级别

此外,如果计算机有多个麦克风,您可以在 flash.media.Microphone.names 中迭代 amic 以检查每个级别。

于 2010-05-26T21:42:53.580 回答
0

测试麦克风的示例代码

var micIndex:String = null;//whatever mic you want to target 0,1,2
var _activityLevels:Array=[];
var _mic:Microphone = MicrophoneProvider.getMicrophone(micIndex);
var _testPassed:Boolean=false;
_mic.setLoopBack(true);
setTimeout(_timedOut, TIMEOUT_MS);//to not run forever
_checkActivity();

function _checkActivity():void{
    if (_mic) {
        var level:Number = _mic.activityLevel;
        trace("MIC _checkActivity", level, _activityLevels);
        if (level>0 && level != _activityLevels[_activityLevels.length - 1])
            _activityLevels.push(level);
        if (_activityLevels.length < 3 && !_testTimedOut)
            setTimeout(_checkActivity, 100);
        else{
            _destroy();
            _testPassed=true;
            //your mic is detected and working
        }
    }
}
function _timedOut():void{
    _testTimedOut = true;
    _destroy();
}
function _destroy():void{
            if  (_mic)
         _mic.setLoopBack(false);
    _mic=null;
}
于 2011-12-14T19:51:14.860 回答
0

我建议检查一下flash.media.Microphone.names它是否为空。

于 2010-09-16T10:35:00.837 回答