Android - одновременное потоковое аудио - PullRequest
7 голосов
/ 13 апреля 2011

В настоящее время у меня есть необходимость реализовать приложение на устройстве Android, которое может открывать живые аудиопотоки и воспроизводить их пользователю. Это не имеет большого значения, и я успешно настроил потоковый сервер и заставил его работать для одного файла. Мой вопрос, однако, как я могу транслировать и воспроизводить несколько аудиофайлов одновременно?

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

Я рассмотрел использование SoundPool, но, похоже, он предназначен только для локальных носителей, и я ДОЛЖЕН иметь эту потоковую передачу, поскольку она важна для скорости воспроизведения (без времени ожидания и т.

Любая помощь или понимание очень ценится! Заранее спасибо!

1 Ответ

1 голос
/ 18 мая 2013

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

import android.media.AudioManager;
import android.media.SoundPool;
import android.media.SoundPool.OnLoadCompleteListener;
import android.util.SparseIntArray;

Создание SoundPool и SparseIntArray Я использую звуковые файлы здесь, вам придется изменить эту часть.

private static SoundPool soundPool;
private static SparseIntArray soundPoolMap;
public static final int S1 = R.raw.good_1, S2 = R.raw.bad_1,
        P1 = R.raw.power_1,
        P2 = R.raw.power_2, 
        P3 = R.raw.power_3, 
        P4 = R.raw.power_4, 
        P5 = R.raw.power_5, 
        WIN = R.raw.round_win;

Инициализируйте свои звуки и добавьте их на карту

public static void initSounds(Context context)
{
    soundPool = new SoundPool(2, AudioManager.STREAM_MUSIC, 100);
    soundPoolMap = new SparseIntArray(8);    

    soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
        public void onLoadComplete(SoundPool soundPool, int sampleId,
                int status) {
            loaded = true;
        }
    });
    soundPoolMap.put(S1, soundPool.load(context, R.raw.good_1, 1));
    soundPoolMap.put(S2, soundPool.load(context, R.raw.bad_1, 2));

    soundPoolMap.put(P1, soundPool.load(context, R.raw.power_1, 3));
    soundPoolMap.put(P2, soundPool.load(context, R.raw.power_2, 4));
    soundPoolMap.put(P3, soundPool.load(context, R.raw.power_3, 5));
    soundPoolMap.put(P4, soundPool.load(context, R.raw.power_4, 6));
    soundPoolMap.put(P5, soundPool.load(context, R.raw.power_5, 7));

    soundPoolMap.put(WIN, soundPool.load(context, R.raw.round_win, 8));
}

Воспроизведите звук

public static void playSound(Context context, int soundID)
{
    float volume = 1;
    if(soundPool == null || soundPoolMap == null)
    {
       initSounds(context);
    }
    soundPool.play(soundPoolMap.get(soundID), volume, volume, 1, 0, 1f);
}

Пример: playSound (this, P1);

Что происходит, я использую класс SoundPool , а затем отображаю аудиопотоки с помощью SparseIntArray

...