Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Определения наличия микрофона (http://www.flasher.ru/forum/showthread.php?t=178292)

XoJlToH 18.04.2012 17:58

Определения наличия микрофона
 
Как определить физическое наличие микрофона в момент инициализации флэшки? Проблема такая же, как и с камерой. Для камеры можно смотреть Camera.currentFPS. Что можно придумать с микрофоном?
Можно ли как то определить тип микрофона (внешний, встроенный из вебки)?

MikroAcse 18.04.2012 18:02

Microphone.isSupported, по-моему...

XoJlToH 18.04.2012 18:19

Цитата:

Свойству 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;
                        }
                }
 
        }



Часовой пояс GMT +4, время: 06:48.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.