Flash 麦克风检测动作脚本3

Flash 麦克风检测动作脚本3,flash,actionscript-3,detect,microphone,Flash,Actionscript 3,Detect,Microphone,我在检测是否检测到麦克风时遇到一些问题。我正在运行函数micromic.getmicromic(),如果没有连接麦克风,或者如果用户在安全面板上单击了拒绝,则该函数应该返回null,对吗 我面临的问题是,在一些没有安装麦克风的计算机上,麦克风。GetMirror()仍然作为[对象麦克风]跟踪 例如,假设用户没有麦克风,在安全面板中单击“允许”,我无法验证是否切换到不同的控件 如果有人能告诉我如何检测麦克风是否没有连接,那我洗耳恭听 多谢各位, 威尔好吧,我建议在连接时进行麦克风测试,从用户那里录

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

我面临的问题是,在一些没有安装麦克风的计算机上,
麦克风。GetMirror()
仍然作为
[对象麦克风]
跟踪

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

如果有人能告诉我如何检测麦克风是否没有连接,那我洗耳恭听

多谢各位,
威尔

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


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

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


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

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

测试麦克风的示例代码

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;
}
var-micIndex:String=null//你想瞄准0,1,2的任何话筒
var_activityLevels:Array=[];
var\u micro:microscope=microscopeProvider.getmicroscope(micIndex);
var _testPassed:Boolean=false;
_麦克风设置环回(真);
setTimeout(_timedOut,TIMEOUT_MS)//永远不跑
_检查活动();
函数_checkActivity():void{
如果(麦克风){
变量级别:数字=_mic.activityLevel;
跟踪(“麦克风检查活动”,级别,活动级别);
如果(级别>0&&level!=\u activityLevels[\u activityLevels.length-1])
_活动水平推送(水平);
如果(_activityLevels.length<3&!_testTimedOut)
setTimeout(_checkActivity,100);
否则{
_破坏();
_testPassed=true;
//您的麦克风已检测到并正常工作
}
}
}
函数_timedOut():void{
_testTimedOut=true;
_破坏();
}
函数_destroy():void{
如果(麦克风)
_麦克风设置环回(假);
_mic=null;
}
var mic:Microphone          = Microphone.getMicrophone();

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