Код ниже (сильно упрощен), должен рисовать спектрограмму звуковой волны такого вида как на картинке ниже.
Происходит это следующим образом. По таймеру, 100 раз в секунду, вызывается функция
draw_spectrogramma которая суммирует массив
bytes. Далее из библиотеки берется элемент размером 1x на 2y пикселя и добавляется на экран. scaleY элемента устанавливается в зависимости от суммы
intreger массива
bytes. Затем элемент сдваигается вправо на один пиксель и за ним сразу же рисуется следующий элемент с уже другой высотой. Таким образом мыдолжны получать то что на картинке выше. Однако Я получаю вот эту фигню
А все потому, что сумма
intreger массива
bytes два или три раза подряд оказывается одинаковой о чем говорит
trace(num);. В результате элементы из библиотеки получают одинаковый scaleY и мы видим то, что ы видим. То есть получается низкое разрешение звуковой волны на семпл. Если я ставлю вызов функции не 100 а 30 раз в секунду, то все нормально, сумма каждый раз разная, но мне мало 30 раз в секунду, нужно минимум 100.
Как решить проблему?

Код AS3:
var snd:Sound = new Sound();
var req:URLRequest = new URLRequest("track.mp3");
snd.load(req);
snd.play();
var complete_wave_res:uint=256; //разрешение волны
var bytes:ByteArray = new ByteArray();
var myTimer2:Timer = new Timer(10, 0);
myTimer2.addEventListener(TimerEvent.TIMER, draw_spectrogramma);
myTimer2.start();
var i:uint=0;
function draw_spectrogramma(event:Event)
{
var temp:Number = num;
SoundMixer.computeSpectrum(bytes,true,0);
var num:Number=0;
for(i;i<complete_wave_res;i++)
{
var intreger:Number = bytes.readFloat();
num += intreger;
}
trace(num);
Здесь код рисования спектрограммы
}
Во вложении прилагаю полный файл проекта, там еще есть дополнительные фичи