|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Aug 2010
Сообщений: 107
|
Проблемы с анализатором спектра computeSpectrum ()
Код ниже (сильно упрощен), должен рисовать спектрограмму звуковой волны такого вида как на картинке ниже.
Происходит это следующим образом. По таймеру, 100 раз в секунду, вызывается функция draw_spectrogramma которая суммирует массив bytes. Далее из библиотеки берется элемент размером 1x на 2y пикселя и добавляется на экран. scaleY элемента устанавливается в зависимости от суммы intreger массива bytes. Затем элемент сдваигается вправо на один пиксель и за ним сразу же рисуется следующий элемент с уже другой высотой. Таким образом мыдолжны получать то что на картинке выше. Однако Я получаю вот эту фигню А все потому, что сумма intreger массива bytes два или три раза подряд оказывается одинаковой о чем говорит trace(num);. В результате элементы из библиотеки получают одинаковый scaleY и мы видим то, что ы видим. То есть получается низкое разрешение звуковой волны на семпл. Если я ставлю вызов функции не 100 а 30 раз в секунду, то все нормально, сумма каждый раз разная, но мне мало 30 раз в секунду, нужно минимум 100. Как решить проблему? 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); Здесь код рисования спектрограммы } |
|
|||||
Регистрация: Mar 2011
Сообщений: 243
|
Максимальное fps = 60. Так что чаще опрашивать не получится. Выставляйте приложению 60fps - будет максимальная точность
|
|
|||||
Регистрация: Aug 2010
Сообщений: 107
|
Цитата:
Такое впечатление, что цикл не успевает срабатывать каждый раз при вызове функции Последний раз редактировалось Mulin; 03.04.2012 в 17:31. |
|
|||||
Регистрация: Mar 2011
Сообщений: 243
|
Точно сказать не могу, сам анализом спектра не занимался. Но мне кажется, что у вашего приложения выставлено 30fps. Но я могу и ошибаться.
|
|
|||||
Регистрация: Aug 2010
Сообщений: 107
|
60 fps. Но все равно это не важно, функция вызывается по таймеру и не превязана к fps
|
|
|||||
SoundMixer.computeSpectrum - выполняется не мгновенно, а с изрядными тормозами.
Если хотите нарисовать точный спектр, используйте Sound#extract();
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works. |
|
|||||
Цитата:
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works. |
|
|||||
FFT не нужно, на частотную диаграмму картинки не похожи
__________________
...я люблю людей!.. |
Часовой пояс GMT +4, время: 21:07. |
|
« Предыдущая тема | Следующая тема » |
|
|