Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 03.04.2012, 17:18
Mulin вне форума Посмотреть профиль Отправить личное сообщение для Mulin Найти все сообщения от Mulin
  № 1  
Ответить с цитированием
Mulin
 
Аватар для Mulin

Регистрация: Aug 2010
Сообщений: 107
По умолчанию Проблемы с анализатором спектра computeSpectrum ()

Код ниже (сильно упрощен), должен рисовать спектрограмму звуковой волны такого вида как на картинке ниже.



Происходит это следующим образом. По таймеру, 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);
 
          Здесь код рисования спектрограммы
}
Во вложении прилагаю полный файл проекта, там еще есть дополнительные фичи
Изображения
   
Вложения
Тип файла: rar Звук.rar (234.9 Кб, 21 просмотров)

Старый 03.04.2012, 17:26
Deimos747 вне форума Посмотреть профиль Отправить личное сообщение для Deimos747 Найти все сообщения от Deimos747
  № 2  
Ответить с цитированием
Deimos747
 
Аватар для Deimos747

Регистрация: Mar 2011
Сообщений: 243
Максимальное fps = 60. Так что чаще опрашивать не получится. Выставляйте приложению 60fps - будет максимальная точность

Старый 03.04.2012, 17:29
Mulin вне форума Посмотреть профиль Отправить личное сообщение для Mulin Найти все сообщения от Mulin
  № 3  
Ответить с цитированием
Mulin
 
Аватар для Mulin

Регистрация: Aug 2010
Сообщений: 107
Цитата:
Сообщение от Deimos747 Посмотреть сообщение
Максимальное fps = 60. Так что чаще опрашивать не получится. Выставляйте приложению 60fps - будет максимальная точность
В том то и дело, что даже если я привязываю вызов функции к FPS через
Код AS1/AS2:
addEventListener(Event.ENTER_FRAME,draw_spectrogramma)
то все равно таже фигня выходит.
Такое впечатление, что цикл не успевает срабатывать каждый раз при вызове функции


Последний раз редактировалось Mulin; 03.04.2012 в 17:31.
Старый 03.04.2012, 17:31
Deimos747 вне форума Посмотреть профиль Отправить личное сообщение для Deimos747 Найти все сообщения от Deimos747
  № 4  
Ответить с цитированием
Deimos747
 
Аватар для Deimos747

Регистрация: Mar 2011
Сообщений: 243
Точно сказать не могу, сам анализом спектра не занимался. Но мне кажется, что у вашего приложения выставлено 30fps. Но я могу и ошибаться.

Старый 03.04.2012, 17:38
Mulin вне форума Посмотреть профиль Отправить личное сообщение для Mulin Найти все сообщения от Mulin
  № 5  
Ответить с цитированием
Mulin
 
Аватар для Mulin

Регистрация: Aug 2010
Сообщений: 107
60 fps. Но все равно это не важно, функция вызывается по таймеру и не превязана к fps

Старый 03.04.2012, 17:41
Genzo вне форума Посмотреть профиль Отправить личное сообщение для Genzo Посетить домашнюю страницу Genzo Найти все сообщения от Genzo
  № 6  
Ответить с цитированием
Genzo
 
Аватар для Genzo

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
SoundMixer.computeSpectrum - выполняется не мгновенно, а с изрядными тормозами.
Если хотите нарисовать точный спектр, используйте Sound#extract();
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

Старый 03.04.2012, 17:46
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 7  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Для него надо будет добавить FFT, что добавит тормозов. Хотя есть довольно шустрые реализации.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 03.04.2012, 17:56
Genzo вне форума Посмотреть профиль Отправить личное сообщение для Genzo Посетить домашнюю страницу Genzo Найти все сообщения от Genzo
  № 8  
Ответить с цитированием
Genzo
 
Аватар для Genzo

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
Цитата:
Для него надо будет добавить FFT, что добавит тормозов. Хотя есть довольно шустрые реализации.
Зачем для него FFT? Он выдает просто обычный ByteArray с Number'ами от [-1 до 1]
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

Старый 03.04.2012, 18:03
K.A.T.A.F.A.L.K.E.R вне форума Посмотреть профиль Отправить личное сообщение для K.A.T.A.F.A.L.K.E.R Найти все сообщения от K.A.T.A.F.A.L.K.E.R
  № 9  
Ответить с цитированием
K.A.T.A.F.A.L.K.E.R
 
Аватар для K.A.T.A.F.A.L.K.E.R

Регистрация: Jul 2005
Адрес: Go, Ukraine!
Сообщений: 787
Отправить сообщение для K.A.T.A.F.A.L.K.E.R с помощью ICQ
FFT не нужно, на частотную диаграмму картинки не похожи
__________________
...я люблю людей!..

Старый 03.04.2012, 18:10
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 10  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Второй параметр в computeSpectrum.
__________________
משיח לא בא
משיח גם לא מטלפן

Создать новую тему Ответ Часовой пояс GMT +4, время: 21:07.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 21:07.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.