Как определить, доступен ли новый микрофон? - PullRequest
2 голосов
/ 01 июня 2011

Похоже, что если у вас есть микрофон, можно добавить прослушиватель событий для StatusEvent. Однако это говорит только о том, разрешен или запрещен микрофон.

Что я действительно хотел бы сделать, так это определить, изменяется ли статическое свойство Microphone.names. Я ожидал, что это свойство будет привязываемым.

Если щелкнуть правой кнопкой мыши и выбрать «настройки» сразу после подключения микрофона, я вижу, что flash обновил список доступных микрофонов. Однако, похоже, в коде нет способа получить такое же обновление.

В документах говорится: «Вызов Microphone.names требует тщательного изучения аппаратного обеспечения, и для создания массива может потребоваться несколько секунд». Поэтому я думаю, что опрос каждые несколько секунд не является возможным вариантом.

Ответы [ 3 ]

0 голосов
/ 01 июня 2011

Я не уверен, что вы можете установить наблюдатель изменений для массива 'names' в Microphone, который будет работать, потому что наблюдатель будет вызываться только в том случае, если ссылка на массив обновляется каждый раз (новый массив). Так что это не проверено, но что-то попробовать:

var watcher:ChangeWatcher = ChangeWatcher.watch(Microphone, ['names'], onNameChange);

Просто нужно создать обработчик onNameChange, чтобы увидеть, действительно ли он вызывается. Если это не сработает, тогда вам нужно будет выполнять какой-то «опрос» имен каждые x раз.

0 голосов
/ 02 июня 2011

Я запустил небольшой тестовый скрипт:

var ta:TextArea = new TextArea();
    ta.width = ta.height = 500;
    addChild(ta);
    var t:Timer = new Timer(5000);
    t.addEventListener(TimerEvent.TIMER, function(e:Event):void{
        var t0:uint = getTimer();

        var m:* = Microphone.getMicrophone();

        ta.text += "mic found: "+(m?true:false)+" "+(getTimer()-t0);

        t0 = getTimer();
        var o:* = Microphone.names;
        ta.text += "\t\ttime to get names: "+(getTimer()-t0)+"\n";

    });
    t.start();

Результаты всегда были меньше 10 мс (getMicrophone был 0-3 мс, имена были 2-9 мс), что мне кажется довольно быстрым.Я не знаю, возможно, это мой компьютер, но он не кажется слишком интенсивным.Поскольку getMicrophone - это все, что мне нужно, никаких официальных предупреждений о его использовании нет, и он незначительно быстрее, я собираюсь опрашивать getMicrophone каждые несколько секунд, чтобы разобраться с этим.

Если кто-то здесь захочет запуститьЭтот сценарий и дать некоторые отзывы о ваших результатах, это может помочь мне и другим сделать лучший выбор.

0 голосов
/ 01 июня 2011

Нет событий, выставленных на этот счет, как вы говорите.Это свойство не может быть привязано, поскольку микрофон - это функция проигрывателя Flash, а не оболочка для Flex-микрофона (на сегодняшний день привязка - только для Flex).

Я предлагаю вам каждые несколько секунд запрашивать Microphone.getMicrophone () и утверждатьэто не нуль.Этот вызов гораздо менее "интенсивен для экзамена", чем Microphone.names.

...