2014-02-19 3 views
7

Я создаю приложение, которое использует два медиаплеера для одновременного воспроизведения двух аудиофайлов. Это отлично работает на моем устройстве Samsung Galaxy S3, но когда я запускаю его на Nexus 5, звук становится фрагментированным/не прослушиваемым.Несколько MediaPlayers не работают на Nexus 5

Мне интересно, возможно ли использование двух медиаплееров одновременно на Nexus 5, и если нет, то как я могу одновременно воспроизводить два аудиофайла?

ответ

4

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

SoundPool soundPool = new SoundPool(2, // number of streams 
            AudioManager.STREAM_MUSIC, // stream type 
            0); // source quality, does nothing 
soundPool.setOnLoadCompleteListener(loadCompleteListener); 
int soundOneId = soundPool.load(context, R.raw.sound1, 1); 
int soundTwoId = soundPool.load(context, R.raw.sound2, 1); 
// Once loadCompleteListener.onLoadComplete has been called for both sounds 
soundPool.play(soundOneId); 
soundPool.play(soundTwoId); 
+1

im работает с большими аудиофайлами (например, целая песня или аудиокнига). Im тестирует код, который вы отправили, и soundPoolOnLoadCompleteListener никогда не вызывает onLoadComplete –

+0

Вы одновременно играете с двумя более длинными файлами? Или только один длинный файл и один короткий звук? – ianhanniballake

+0

Два длинных файла одновременно. Протестировано снова, onLoadComplete вызывается после долгого ожидания. Теперь они играют вместе красиво, но оба они вырезаны через несколько секунд; проблема в том, что мне нужно, чтобы загрузка происходила быстро, и мне нужно все, чтобы играть. –

4

Используйте AudioTrack, который обеспечивает звук с низкой задержкой даже при потоковой передаче. http://developer.android.com/reference/android/media/AudioTrack.html.

+0

Вы можете создать образец кода, который воспроизводит два аудиофайла mp3/wav/aac> 1 мин. Длительности? Спасибо – Shubhank

2

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

Обратите внимание, что воспроизведение с использованием AudioTrack по-прежнему не выполняется, если на Nexus 5 и других устройствах с одинаковым ограничением не поддерживаются несколько экземпляров одного и того же кодека, поэтому ваше приложение может не работать на всех устройствах.

+0

он действительно работает, но для нескольких секунд wav-файлов, я думаю, вы можете работать над образцом, который использует более длинные wav-файлы и прекрасно работает?. В настоящее время он, похоже, играет звуковой поток очень медленно, как на скорости 0,1 х и много шумов. – Shubhank

+0

Я думаю, это означает, что AudioTrack не работает и для N5. В этом случае переход на OpenSL ES (Android 4.1+) или создание собственного микширования с необработанными данными PCM может стать для вас способом. Смешивание raw PCM: http://stackoverflow.com/questions/16766248/mix-audio-in-android, смешивание с OpenSL ES: [Простой потоковый аудиомикшер для Android с OpenSL ES - часть 1] (http: // sbcgamesdev. blogspot.tw/2013/01/simple-streaming-audio-mixer-for.html), [часть 2] (http://sbcgamesdev.blogspot.tw/2013/02/simple-streaming-audio-mixer-for. HTML) – Kai

0

У меня такая же проблема, это всего кошмар:

http://forum.openframeworks.cc/t/choppy-audio-with-ofxandroidsoundplayer-mediaplayer/20961/5

Единственное решение, кажется, использовать что-то еще, чтобы воспроизводить многодорожечный аудио, будь то FMOD или ExoPlayer или скрученные вручную Смеситель WAV, упомянутый выше.