Выполнять код только при изменении значения уровня активности mic

#actionscript-3 #microphone

#actionscript-3 #микрофон

Вопрос:

Я анимирую рот с помощью микрофонного входа. Я использую уровень активности микрофона, который выдает числа примерно от 0 до 10. Каждое число соответствует кадрам в видеоролике «рот», поэтому чем громче сигнал, тем шире открывается рот.

Уровень активности mic постоянно возвращает значение (вероятно, работает один раз в каждом кадре). Таким образом, даже когда уровень остается неизменным некоторое время (особенно при 0, когда нет шума), он продолжает выполнять код для перехода к этому кадру.

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

 import flash.display.BitmapData;
import flash.display.Shape;


var myMic:Microphone = Microphone.getMicrophone();
//Security.showSettings(SecurityPanel.MICROPHONE);
myMic.setLoopBack(true);
myMic.setUseEchoSuppression(true);


stage.addEventListener(Event.ENTER_FRAME, stage_EnterFrame);

function stage_EnterFrame(e:Event){
    var num:Number = myMic.activityLevel * 1;
    trace(num);
    if (num == 0){
        mouth.gotoAndStop(1);
    } else if (num == 1){
        mouth.gotoAndStop(2);
    } else if (num == 2){
        mouth.gotoAndStop(3);
    } else if (num == 3){
        mouth.gotoAndStop(4);
    } else if (num == 4){
        mouth.gotoAndStop(5);
    } else if (num == 5){
        mouth.gotoAndStop(6);
    } else if (num == 6){
        mouth.gotoAndStop(7);
    } else if (num == 7){
        mouth.gotoAndStop(8);
    } else if (num == 8){
        mouth.gotoAndStop(9);
    } else if (num == 9){
        mouth.gotoAndStop(10);
    } else if (num == 10){
        mouth.gotoAndStop(11);
    }
}
  

Ответ №1:

Так что, только если оно изменится? Может быть, что-то вроде

newNum=mic.activityLevel

Если newNum != oldNum{ Gotoandstop (frame) }

oldNum=newNum