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

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

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

Регистрация: Feb 2009
Адрес: WS
Сообщений: 93
The bomb! Синхронное воспроизведение звуков

Работаю над онлайн сексенсером и, как многие здесь, столкнулся с проблемой синхронного воспроизведения звуков. Итак, исходные данные: Есть 3 одинаковых объекта Sound, загруженных из одного MP3. Я воспроизвожу их одновременно по таймеру каждые 500 миллисекунд.
Вариант I: Используем Sound как есть. В этом случае звуки не проигрываются синхронно. Постоянно кто-то отстает, кто-то убегает вперед.
Вариант II: Прочитал, что подобная задержка может быть вызвана тем, что звук в MP3 и необходимо процессорное время для декодирования. Воспользовался волшебным методом Sound.extract() из FlashPlayer10 Sound API и залил содержимое MP3 в ByteArray. После этого создал 3 звука и при помощи события SampleDataEvent напрямую записывал несжатое содержимое звука:
Код AS3:
private function sampleDataHandler(evt:SampleDataEvent) : void {			
			var writeCount:int = (pos + SOUND_BUFFER_SIZE) > ba.length ? (ba.length - pos) : SOUND_BUFFER_SIZE;
			if(writeCount > 0) {
				evt.data.writeBytes(ba, pos, writeCount);					
			} else {
				pos = 0;
				//trace('stopped');
			}
 
			pos += writeCount;
		}
Размер буфера (SOUND_BUFFER_SIZE) использовал максимальный для уменьшения задержек - 65536. Стало лучше, но всё равно звук сбивается!!!
Есть ли способ синхронного воспроизведения динамически подгруженных звуков?


Последний раз редактировалось Vasyaga; 06.09.2011 в 08:14. Причина: Дополнение
Старый 06.09.2011, 09:52
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 2  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Про внутреннюю реализацию работы флэшплеера со звуком: http://www.actionscript.org/resource...ing/Page1.html
Статья старая, но похоже до сих пор актуальна.
__________________
тонкий тролль, осеянный благодатью

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

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
Цитата:
FlashPlayer10 Sound API и залил содержимое MP3 в ByteArray. После этого создал 3 звука и при помощи события SampleDataEvent напрямую записывал несжатое содержимое звука:
нужно смотреть в сторону записи всех 3х звуков в 1 дорожку(объект Sound)
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

Старый 06.09.2011, 12:55
Vasyaga вне форума Посмотреть профиль Отправить личное сообщение для Vasyaga Найти все сообщения от Vasyaga
  № 4  
Ответить с цитированием
Vasyaga

Регистрация: Feb 2009
Адрес: WS
Сообщений: 93
Цитата:
Сообщение от Genzo Посмотреть сообщение
нужно смотреть в сторону записи всех 3х звуков в 1 дорожку(объект Sound)
Идея отличная, но будет слишком много вычислений на этапе проигрывания и как следствие - тормоза. Либо нужно будет все пересчитывать каждый раз при добавлении/удалении трека. В общем от большого количества вычислений где-то в коде не уйти. Должно же быть более простое решение!!!

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

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
Код AS3:
Идея отличная, но будет слишком много вычислений на этапе проигрывания и как следствие - тормоза.
Получив 3 Sound'a вы смешиваете их в 1 ByteArray , а потом уже 1му Sound'у скармливаете этот ba через SampleDataEvent. Вычисления только 1 раз после получения всех 3х Саундов
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

Старый 06.09.2011, 13:24
Vasyaga вне форума Посмотреть профиль Отправить личное сообщение для Vasyaga Найти все сообщения от Vasyaga
  № 6  
Ответить с цитированием
Vasyaga

Регистрация: Feb 2009
Адрес: WS
Сообщений: 93
Genzo, дело в том, что у меня 2 мини-секвенсера 8x16 и 84x16 и один большой секвенсер, который состоит из мини-секвенсеров. Размерность большого секвенсера - 16x25. Представьте, сколько пересчетов нужно будет сделать при замене одного звука/секвенсера.

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

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
Цитата:
Genzo, дело в том, что у меня 2 мини-секвенсера 8x16 и 84x16 и один большой секвенсер, который состоит из мини-секвенсеров. Размерность большого секвенсера - 16x25. Представьте, сколько пересчетов нужно будет сделать при замене одного звука/секвенсера.
Представляю , но как по мне единственно правильный вариант это сводить все в 1 дорожку программно и воспроизводить ибо 100 Sound'ов тоже не вариант.

Добавлено через 1 минуту
Сводить все в 1 дорожку правильнее со всех сторон :
++Так проще сохранить , меньше ресурсов тратиться
--При каждом воспроизведении или изменении необходимо "пере-сводить"
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

Старый 06.09.2011, 13:53
Vasyaga вне форума Посмотреть профиль Отправить личное сообщение для Vasyaga Найти все сообщения от Vasyaga
  № 8  
Ответить с цитированием
Vasyaga

Регистрация: Feb 2009
Адрес: WS
Сообщений: 93
С кучей Sound'ов работает более-или менее прилично и без тормозов. Только не синхронно Тем более, что я не пложу ByteArray, а храню их отдельно в Dictionary, используя в качестве ключа путь к mp3. Т.е. если я добавляю один и тот же звук несколько раз, то будет использован один ByteArray.
В случае вашего варианта - конкретный 4-х секундный звук после extract-а занимает 160 Кб. Соответственно, чтобы сложить 2 таких звука я должен сделать около 50 тыс. операций только сложения (2 канала по 32 бита) + еще нужно делить для выравнивания громкости. А если таких звуков хотя бы 10? Да и для юзера всё станет не так прозрачно - перетащил ячейку в секвенсере - получи прогресс бар и несколько секунд задержки Нет, с микшированием идея интересна, но не вариант

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

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

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

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

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

Теги
SampleDataEvent , sound , синхронизация
Опции темы
Опции просмотра

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

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


 


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


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