Цитата:
Свойству isSupported задается значение true, если текущая платформа поддерживает класс Microphone, в противном случае задается значение false.
|
проверил. true выводится вне зависимости от того подключен микрофон или нет.
микрофон подключен
Код AS3:
trace (Microphone.isSupported); //output:true
trace (Microphone.names); //output:Microphone (3- Audio_Device)
микрофон не подключен
Код AS3:
trace (Microphone.isSupported); //output:true
trace (Microphone.names); //output:
Добавлено через 23 минуты
в принципе как более-менее разделить на типы понятно при обработке массива нэймс, хотя тоже как то...
Код AS3:
trace (Microphone.names); //output:Mic in at rear panel (Pink) (Realtek High Definition Audio),Microphone (3- Audio_Device),Microphone (Bluetooth SCO Audio)
Проблема из топика наверно больше относится к блютус микрофонам. Ихнее отключение отслеживается системой и работает не корректно. Даже после отключения блютуса и донгла микрофон продолжает висеть в системе :(
Добавлено через 22 часа 54 минуты
ну в общем я подумал немного и накидал решение
Можно слушать SampleDataEvent.SAMPLE_DATA - оно срабатывает только для рабочего микрофона, с которого можно получить звук. Если в системе микрофон замьючен события не будет. Срабатывает так же иногда, если микрофон неисправен :(
Выслушаю рекомендации/дополнения
Управляющий класс
Код AS3:
public class MicrophoneManager
{
private var micCounter:int = 0;
private var testMic:TestMic;
public function MicrophoneManager()
{
test_microphone();
}
private function test_microphone(e:MicrophoneEvent = null):void
{
trace ("test call",micCounter,Microphone.names.length)
if (micCounter < Microphone.names.length)
{
testMic = new TestMic(micCounter);
testMic.addEventListener(MicrophoneEvent.TEST_COMPLETE, test_microphone);
testMic.test();
micCounter++
}
else {
trace ("end")
}
}
}
Класс тестового микрофона
Код AS3:
public class TestMic extends EventDispatcher
{
public var active:Boolean = false;
public var mic:Microphone;
private var timer:Timer = new Timer(300, 1);
public function TestMic($micId:Number)
{
mic = Microphone.getMicrophone($micId);
}
public function test():void {
mic.addEventListener(SampleDataEvent.SAMPLE_DATA, onSampleData);
timer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
timer.start();
}
private function onTimerComplete(e:TimerEvent):void
{
trace ("mic",mic.name,"active",active)
mic.removeEventListener(SampleDataEvent.SAMPLE_DATA, onSampleData);
timer.removeEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
dispatchEvent(new MicrophoneEvent(MicrophoneEvent.TEST_COMPLETE));
}
private function onSampleData(e:SampleDataEvent):void
{
if (mic.activityLevel > -1) {
active = true;
}
}
}
|