|
|
|||||
Регистрация: Feb 2009
Адрес: WS
Сообщений: 93
|
Синхронное воспроизведение звуков
Работаю над онлайн сексенсером и, как многие здесь, столкнулся с проблемой синхронного воспроизведения звуков. Итак, исходные данные: Есть 3 одинаковых объекта Sound, загруженных из одного MP3. Я воспроизвожу их одновременно по таймеру каждые 500 миллисекунд.
Вариант I: Используем Sound как есть. В этом случае звуки не проигрываются синхронно. Постоянно кто-то отстает, кто-то убегает вперед. Вариант II: Прочитал, что подобная задержка может быть вызвана тем, что звук в MP3 и необходимо процессорное время для декодирования. Воспользовался волшебным методом Sound.extract() из FlashPlayer10 Sound API и залил содержимое MP3 в ByteArray. После этого создал 3 звука и при помощи события SampleDataEvent напрямую записывал несжатое содержимое звука: 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; } Есть ли способ синхронного воспроизведения динамически подгруженных звуков? Последний раз редактировалось Vasyaga; 06.09.2011 в 08:14. Причина: Дополнение |
|
|||||
strange mood
|
Про внутреннюю реализацию работы флэшплеера со звуком: http://www.actionscript.org/resource...ing/Page1.html
Статья старая, но похоже до сих пор актуальна.
__________________
тонкий тролль, осеянный благодатью |
|
|||||
Цитата:
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works. |
|
|||||
Регистрация: Feb 2009
Адрес: WS
Сообщений: 93
|
Идея отличная, но будет слишком много вычислений на этапе проигрывания и как следствие - тормоза. Либо нужно будет все пересчитывать каждый раз при добавлении/удалении трека. В общем от большого количества вычислений где-то в коде не уйти. Должно же быть более простое решение!!!
|
|
|||||
Получив 3 Sound'a вы смешиваете их в 1 ByteArray , а потом уже 1му Sound'у скармливаете этот ba через SampleDataEvent. Вычисления только 1 раз после получения всех 3х Саундов
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works. |
|
|||||
Регистрация: Feb 2009
Адрес: WS
Сообщений: 93
|
Genzo, дело в том, что у меня 2 мини-секвенсера 8x16 и 84x16 и один большой секвенсер, который состоит из мини-секвенсеров. Размерность большого секвенсера - 16x25. Представьте, сколько пересчетов нужно будет сделать при замене одного звука/секвенсера.
|
|
|||||
Цитата:
Добавлено через 1 минуту Сводить все в 1 дорожку правильнее со всех сторон : ++Так проще сохранить , меньше ресурсов тратиться --При каждом воспроизведении или изменении необходимо "пере-сводить"
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works. |
|
|||||
Регистрация: Feb 2009
Адрес: WS
Сообщений: 93
|
С кучей Sound'ов работает более-или менее прилично и без тормозов. Только не синхронно Тем более, что я не пложу ByteArray, а храню их отдельно в Dictionary, используя в качестве ключа путь к mp3. Т.е. если я добавляю один и тот же звук несколько раз, то будет использован один ByteArray.
В случае вашего варианта - конкретный 4-х секундный звук после extract-а занимает 160 Кб. Соответственно, чтобы сложить 2 таких звука я должен сделать около 50 тыс. операций только сложения (2 канала по 32 бита) + еще нужно делить для выравнивания громкости. А если таких звуков хотя бы 10? Да и для юзера всё станет не так прозрачно - перетащил ячейку в секвенсере - получи прогресс бар и несколько секунд задержки Нет, с микшированием идея интересна, но не вариант |
|
|||||
Цитата:
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works. |
Часовой пояс GMT +4, время: 15:06. |
|
« Предыдущая тема | Следующая тема » |
Теги |
SampleDataEvent , sound , синхронизация |
Опции темы | |
Опции просмотра | |
|
|