2016-09-08 4 views
0

Я хочу создать приложение для Android, которое воспроизводит несколько mp3 одновременно, с точной синхронизацией (менее 1/10 секунды) и независимым регулятором громкости. Размер каждого mp3 может быть более 1 МБ, время работы до нескольких минут. Я понимаю, что MediaPlayer не будет выполнять точную синхронизацию, и SoundPool не сможет обрабатывать файлы в течение 1 МБ или 5 секунд. Я экспериментирую с superpowered и могу в конечном итоге использовать это, но мне интересно, есть ли что-то более простое, учитывая, что мне не нужна обработка (реверберация, фланец и т. Д.), Что является фокусом супердержавы.Android: одновременное воспроизведение нескольких mp3-файлов, с точной синхронизацией и независимым контролем громкости

Также просмотрел видеоролик YouTube на высокопроизводительном аудио в Android от Google I/O 2016. Хотите узнать, есть ли у кого-нибудь опыт в этом. https://www.youtube.com/watch?v=F2ZDp-eNrh4

+0

Напишите свой собственный звуковой движок. Или вы можете, как вы упомянули, использовать сверхмощные. – Ravenix

ответ

0

Когда вы играете сжатые файлы (AAC, MP3 и т. Д.) На Android, в большинстве случаев они декодируются на аппаратном уровне, чтобы сэкономить электроэнергию, за исключением случаев, когда вывод идет на аудиоинтерфейс USB. Аппаратный кодек принимает данные в больших кусках (опять же, чтобы сэкономить электроэнергию). Так как невозможно запустить команду для запуска сразу нескольких потоков, то часто случается, что один поток уже отправит кусок сжатого аудио в аппаратный кодек, и он начнет воспроизведение, в то время как другие еще не отправили их данных.

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

+1

сверхсильные заявки на поддержку синхронизированного воспроизведения на Android: «Метод play() SuperpoweredAdvancedAudioPlayer имеет« синхронизированный »флаг. Он начнет воспроизведение, синхронизированное с основным темпом и битгидом, установленным в методе process(). Пример можно найти в проект примера пересечения. (Пример проекта для iOS, но весь Superpowered-код является кросс-платформенным). " http://superpowered.com/synchronized-recording-and-playback-of-audio-cpu-requirements-time-stretching-x86-dsp-android-version-support-beat-detection – user1147171

+0

Я не удивлен, потому что их рамки имеет все необходимые компоненты: декодеры сжатого формата, ресамплеры, микшеры и т. д., чтобы они могли создавать отдельный смешанный поток из нескольких источников самостоятельно. Это именно тот подход, который я описал. –

1

Superpowered был создан для моего приложения DJ (DJ Player в App Store), где требуется четкая синхронизация нескольких треков.

Таким образом, синхронизация нескольких mp3-файлов и независимого контроля громкости, безусловно, возможна и ядром для Superpowered. Для этого вам нужен класс SuperpoweredAdvancedAudioPlayer.

Проект CrossExample в SDK имеет два игрока, которые играют синхронно.

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

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

  • Нет связанных вопросов^_^