我在检测是否检测到麦克风时遇到了一些问题。我正在运行函数Microphone.getMicrophone()
,如果没有连接麦克风,或者用户在安全面板上点击了“拒绝”,那么它应返回 null ,对吗?
我遇到的问题是,在某些没有安装麦克风的计算机上,Microphone.getMicrophone()
仍然会显示为[object Microphone]
。
所以说例如用户没有麦克风,并且在安全面板中单击允许,我无法验证是否切换到不同的控件。
如果有人能够了解如何检测是否没有连接麦克风,那么我全都听见了。
非常感谢, 将
答案 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;
}