2012-06-14 2 views
0

Я думаю о написании FLAC в ALAC и/или FLAC в AAC-конвертер, возможно, на C. Это так же просто, как чтение в одном формате и вывод другого, в соответствии с спецификациями формата?Как программно конвертировать аудио (diy)?

Любые советы по методу, языку и т. Д. Были бы замечательными! Благодаря!

ответ

4

Сделайте это самостоятельно до конца? Звучит сложно.

Это как «просто», как чтение в одном формате и выводящее другое, но маленькие детали на самом деле огромные гиганты с довольно сложной математикой.

В принципе, вам нужно будет прочитать в FLAC, проанализировать его формат контейнера, декодировать аудио FLAC в некоторой промежуточной форме, закодировать его в Apple Lossless и поместить в аудиоконтейнер MPEG4 (потому что это то, что использует ALAC) ,

Если вы отказались от выполнения всего этого самостоятельно и использовали библиотеки для декодирования FLAC и кодировки ALAC, это было бы совсем не сложно, разумеется - это просто, что кодеры и декодеры не просто писать.

Зайдите в libflac и libavcodec для кодировщиков/декодеров, а затем написать свою программу вокруг них не должно быть слишком сложно.

+0

Спасибо за ответ, я рассмотрю использование библиотек. Не понял, насколько это было бы тяжело! – nighthawk454

3

Нет, это не так просто.

FLAC декодирование относительно прост, насколько DSP идет. Но это все еще около 3000 строк кода в libav, который не содержит кучу кода поддержки, расположенного в другом месте библиотеки, которую он использует.

AAC кодировка чрезвычайно сложный, так как это кодек с потерями; как таковой, кодирование в AAC включает в себя много очень субъективных психоакустических решений. Кодек AAC в libav составляет почти 12 000 строк кода (опять же, не включая код для создания контейнера MPEG4), и его результаты даже не особенно высокого качества. Если вы еще не знакомы с кодировкой MDCT, попытка написать кодер с нуля будет бесполезной.

Возможно, вам лучше всего использовать библиотеку (например libav!), Которая уже может выполнить это преобразование. Не пытайтесь писать это с нуля.

(придирчивый отметим, что строки кода не является большой мерой сложности я знаю об этом. - Я просто использую его как «приблизительная цифра» здесь.)

+0

Спасибо за ответ, между вашим ответом и cha0site, я обязательно посмотрю библиотеки – nighthawk454

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