麦克风检测动作脚本3

时间:2009-10-08 16:43:55

标签: flash actionscript-3 detect microphone

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

我遇到的问题是,在某些没有安装麦克风的计算机上,Microphone.getMicrophone()仍然会显示为[object Microphone]

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

如果有人能够了解如何检测是否没有连接麦克风,那么我全都听见了。

非常感谢, 将

5 个答案:

答案 0 :(得分:2)

var mic:Microphone          = Microphone.getMicrophone();

try {
    micName = mic.name
    trace("mic.name "+mic.name)
} catch (e:Error) {
    trace("no mic detected")
}

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

答案 4 :(得分: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;
}