Декодирование аудио/воспроизведение аудио (AS3)

Мне интересно узнать, как декодировать и воспроизводить аудио в ActionScript 3. Я понимаю, как записывать байты в объект Sound с помощью события SAMPLE_DATA, так что это не проблема. Что я хочу понять, так это то, как я могу реализовать альтернативные аудиоформаты для собственного воспроизведения внутри Flash Player.

Я думаю, что я спрашиваю: как мне взять что-то в формате X и «преобразовать/декодировать» его в формат WAV и записать байты в звуковой объект, воспроизводя звук? Я заинтересован в написании декодера для аудио FLAC и, возможно, аудио OGG, поскольку они, по-видимому, являются одними из наиболее широко используемых аудиоформатов с открытым исходным кодом.

Кто-нибудь может дать мне совет по этому поводу?


person Naftuli Kay    schedule 03.07.2010    source источник


Ответы (2)


Если вы хотите написать декодер, первое, на что вам, вероятно, следует обратить внимание, — это спецификация формата, который вы хотите декодировать.

Спецификацию ogg/vorbis можно найти здесь: http://xiph.org/vorbis/doc/Vorbis_I_spec.html.

Кроме того, может быть полезно посмотреть (или, возможно, портировать) какую-нибудь другую библиотеку с открытым исходным кодом, которая уже делает это (я не знаю ни одной, написанной на Actionscript), например, на Java: http://www.jcraft.com/jorbis/ (я не знаю эту библиотеку, я только что нашел он гуглил "ogg vorbis с открытым исходным кодом".

В любом случае вам придется приложить некоторые усилия, чтобы заставить его работать, и я не хочу вас отговаривать, но я не уверен, что Actionscript достаточно быстр для декодирования звука в реальном времени.

person Juan Pablo Califano    schedule 03.07.2010
comment
Я не уверен, что ActionScript достаточно быстр для декодирования звука в реальном времени... и я не уверен. - person spender; 03.07.2010
comment
Сначала декодируйте его, а затем воспроизводите, или, возможно, декодируйте только буфер и медленно декодируйте во время воспроизведения. - person ; 03.07.2010
comment
@ М28. Да, декодирование во время воспроизведения — это то, что я имел в виду под декодированием звука в реальном времени. Я сомневаюсь, что AS достаточно быстр, как я уже сказал, но я могу ошибаться. С другой стороны, расшифровка всего этого заранее не всегда возможна; а также, у меня есть ощущение, что это займет целую вечность (и вам придется использовать зеленые нити, что сделает его медленнее). - person Juan Pablo Califano; 03.07.2010

Вы можете попробовать, но у вас не останется много ворчания, чтобы делать другие вещи. До Flash 10 я написал статью с подробным описанием хака для передачи данных PCM в звуковой вывод во Flash. . Кто-то связался с нами, потому что они написали декодер AS3 Ogg, но... даже после полной оптимизации кода было обнаружено, что AVM2 действительно не так уж подходит для этой работы. По сути, это довольно медленно, а декодирование OGG довольно интенсивно использует процессор. Я не вижу, чтобы с тех пор что-то сильно изменилось, потому что процессоры стали «шире» и не намного быстрее. ActionScript является однопоточным, поэтому вы не можете разгрузить его на другое ядро.

Вероятно, стоит проверить это.. , возможно, производительность улучшилась.

РЕДАКТИРОВАТЬ: Сказав все это, как сказал Хуан, не расстраивайтесь из-за этого ответа. Я подозреваю, что вычислительные требования декодирования FLAC, вероятно, значительно меньше, чем OGG, и если DSP вас взволновал, то время, потраченное на то, чтобы разобраться во всем этом, стоит того на 100%, даже если маршрут Flash (возможно) приведет к разочарованию. Лично я считаю, что MediaStreamSource для Silverlight выглядит очень многообещающе, но на самом деле еще не пробовали так много.

person spender    schedule 03.07.2010
comment
Позвольте мне сказать вам, что это был потрясающий хак. Я помню, как играл с ним в проекте аудиомикшера, над которым работал в то время (хотя полученные необработанные аудиоданные, сгенерированные пользователем, были слишком большими, чтобы их было практично отправлять на сервер, а написание кодировщика MP3 было далеко не в моей лиге). ; В итоге я отправил данные микса в формате, похожем на midi, и позволил серверу сделать реальное микширование звука). Но работать с ним было очень весело. +1 за это! (также за хороший ответ). - person Juan Pablo Califano; 03.07.2010
comment
@ Хуан ... Спасибо. Обнаружение того, как приготовить секретный рецепт Андре Мишель, было, безусловно, самым забавным, что я когда-либо получал с Флэшем. - person spender; 03.07.2010