#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