Медленное декодирование MP3 на Android - PullRequest
3 голосов
/ 02 декабря 2011

Я работаю над декодированием MP3 в Android на основе этого урока

Почему-то для декодирования песни продолжительностью 4:30 требуется более 1 минуты, что совершенно недопустимо вмое дело.Я пытался выяснить, в чем проблема, и искал способ улучшить скорость.Я искал в интернете несколько дней и до сих пор не мог понять почему, потому что ресурс очень ограничен.Я думаю, что я полностью застрял здесь, так как ничего не мог получить от исследований.

Может кто-нибудь указать какую-либо информацию об обработке файла MP3 в Android?Я использую Libmad для декодирования файла MP3 и переноса его на Android с помощью NDK.Может быть, кто-то может указать какие-либо альтернативы для декодирования MP3.Я ценю любую информацию об этом, большое спасибо.

1 Ответ

1 голос
/ 02 декабря 2011

Все ответы, которые вы ищете, уже находятся на странице учебника.

Как он объясняет в статье, время, которое требуется, кажется нормальным:

Я протестировал его с песней «Schism» с помощью инструмента, который представляет собой песню длиной 6: 47 минут,закодирован на 192 кбит / с.Вес файла составляет 9,31 Мб, что довольно много для imo mp3 ... Без каких-либо оптимизаций (код большого пальца, -O0, -DFPM_DEFAULT == стандартная математика с фиксированной запятой в libmad, без оптимизированной для ассемблера fp математики) для декодирования всех файлов требуется184 секунды на моем Milestone.

Затем он объясняет, как он оптимизировал его.Вы должны выполнить те же шаги:

Святое дерьмо, Бэтмен!Если я устраню вызов buffer.get (samples), который снизится до 44 секунд!Невероятный.Теперь я все еще думал, что это медленный путь, поэтому я начал добавлять оптимизации.Первое, что я сделал, это компилировал в прямую руку вместо кода большого пальца.Вы можете указать для этого цепочку инструментов NDK, поместив ее в файл Android.mk:

LOCAL_ARM_MODE := arm

При включенном декодировании это занимает 36 секунд.Следующее, что я сделал, была агрессивная оптимизация через -O3 в качестве CFLAG.Это сбрило всего 2 секунды, так что ничего особенного.Последняя оптимизация зависит от libmad.Файл config.h, на который я ссылался выше, не определяет математический режим с фиксированной запятой, который должен использовать libmad.Теперь, когда вы посмотрите на fixed.h из libmad, вы можете увидеть некоторые варианты математики с фиксированной точкой.Есть также специальная опция для процессоров, которые используют небольшой код для сборки манипуляторов для выполнения тяжелой работы.Вы можете включить это, передав -DFPM_ARM как CFLAG.Теперь это творило чудеса!Теперь у меня до 20 секунд для декодирования 407 секунд аудио в формате mp3.Это примерно в 20 раз больше, чем у меня.Песня, которую я выбрал, находится на крайнем конце спектра длины песни, который мне придется обработать в моем следующем проекте аудио игры.Песня, которую использует пользователь, будет обработана один раз, и ожидание в течение этих 20 секунд нормально в моей книге.

И самое важное:

Боюсь, я не выпущу источник портированной звуковой платформы , так как это немного беспорядок и потребует некоторой работы для очистки.

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

...