繁体   English   中英

Android - 多个同步流媒体音频

[英]Android — Multiple, Simultaneous Streaming Audio

我目前需要在Android设备上实现一个可以打开实时音频流并将其播放回用户的应用程序。 这不是什么大问题,我已经成功建立了一个流媒体服务器并让它适用于一个文件。 但问题是,我如何一次流式播放多个音频文件?

当我打开多个流(使用MediaPlayer)并准备和播放每个文件时,我只能听到一个文件中的音频。 我不确定目前是否可行,但我希望是这样。

我研究过使用SoundPool,但它似乎只适用于本地媒体,我必须有这种流媒体,因为它对于回放速度很重要(没有等待时间等)。

非常感谢任何帮助或见解! 提前致谢!

我之前正在修补一个应用程序,我有一个类似的问题,并能够修复它,除了我没有流式传输音频。 希望这可以提供帮助,您需要根据您的目的修改它:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM