2013-07-17 1 views
1

Я хочу контролировать вход аудио микрофона со вспышкой (as3).getMicrophone() in as3 работает только при использовании setLoopBack()

Это всего лишь небольшая часть моего кода, но на самом деле проблема в нем.

var mic:Microphone = Microphone.getMicrophone(); 
mic.setLoopBack(true); 

addEventListener(Event.ENTER_FRAME, loop); 

function loop(event:Event):void { 
    trace(mic.activityLevel); 
} 

Если я использовать код, как есть, я могу проследить activityLevel и на самом деле можно увидеть некоторые значения .. (я думаю, что это объем?)

Ну, единственная проблема в том, что звук также outputed к динамикам, что я не хочу ... (mic.setLoopBack(true);)

Но когда я пытаюсь mic.setLoopBack(false);, вспышка не просит микрофон premissions больше и прорисованные activityLevel пребывания «-1» .. ...

Итак, что я могу сделать, чтобы отключить аудио шлейф или просто контролировать аудиоданные от микрофона. ?

(когда я говорю «звуковые данные», я имею в виду все данные, которые необходимы для последующего обнаружения BPM ... я думаю, что это массив байтов аудио, не так ли?)

ответ

3

Вместо того, чтобы использовать setLoopBack(), вам нужно всего лишь прослушать SampleDataEvent с Microphone. Обратите внимание на раздел «Обнаружение активности микрофонов» в this Adobe article, и, в частности, это примечание, что говорит о том, вы можете слушать для микрофона деятельности:

Примечание: Объект Микрофон только рассылает активность события, когда приложение отслеживает микрофон , Таким образом, если вы не вызываете setLoopBack (true), добавьте слушатель для выборочных данных событий или присоедините микрофон к объекту NetStream, после чего события активности не будут отправлены.

var mic:Microhpone = Microphone.getMicrophone; 
mic.addEventListener(SampleDataEvent.SAMPLE_DATA, onSampleData); 

function onSampleData(event:SampleDataEvent):void 
{ 
    trace("activity from: " + mic.name + " level: " + mic.activityLevel); 
} 

Это должно быть более оптимальным решением, так как SampleDataEvent «s отправляются только тогда, когда микрофон улавливает звук, в отличие от текущего подхода, который работает на каждом кадре.

4

Как temp решение для отключения микрофона вы можете попробовать:

var st:SoundTransform = new SoundTransform(0); 
mic.soundTransform = st; 

Вы все равно должны видеть уровень активности.