2010-07-03 4 views
1

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

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

Может ли кто-нибудь дать мне совет по этому вопросу?

ответ

2

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

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

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

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

+0

«Я не уверен, что ActionScript достаточно быстр для декодирования звука в реальном времени» ... и не я. – spender

+0

Сначала декодируйте его, а затем воспроизведите его или, возможно, декодируйте только буфер и медленно декодируйте во время воспроизведения. – 2010-07-03 01:21:31

+0

@ M28. Да, декодирование во время воспроизведения было тем, что я имел в виду под «декодированием звука в реальном времени». Я сомневаюсь, что AS достаточно быстро, как я уже сказал, но я могу ошибаться.С другой стороны, декодирование всего этого заранее не всегда является опцией; а также, у меня есть ощущение, что потребуется много времени (и вам придется использовать «зеленые потоки», что сделает его медленнее). –

1

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

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

EDIT: Сказав все это, как сказал Хуан, не отчаивайтесь этим ответом. Я подозреваю, что вычислительные требования к декодированию FLAC, вероятно, значительно меньше, чем OGG, и если DSP вас возбудит, то время, затрачиваемое на то, чтобы все это было на 100%, даже если маршрут Flash (возможно) приводит к разочарованию. Лично я считаю, что MediaStreamSource для Silverlight выглядит очень многообещающе, но на самом деле это не так сильно.

+0

Позвольте мне сказать вам, что это был потрясающий взлом. Я помню, что я играл с ним в проекте аудиомикшера, над которым я работал время (хотя результирующие пользовательские звуковые исходные данные были слишком большими, чтобы быть практичными tal отправить его на сервер и написать MP3-кодер был выход из моей лиги; Я закончил тем, что отправил «данные микширования» в формате midi, и дал серверу реальное микширование звука). Но было очень весело работать с ним. +1 за это! (а также за хороший ответ). –

+0

@Juan ... Спасибо. Обнаружение того, как сделать секретный рецепт Андре Мишель, было, безусловно, самым забавным, что я когда-либо имел с Flash. – spender

Смежные вопросы