将音频文件流式传输到soundpool load()Android

时间:2012-12-29 05:56:53

标签: android soundpool

我想使用SoundPool类来创建播放速度效果。快速或慢速播放声音(1x,0.5x,2x等)。 但问题是soundpool只处理小文件。当我给一个大文件。它没有发挥任何作用。 我想知道是否可以加载音乐流(我的大型音频文件的一些字节)并通过soundpool播放它。任何想法。??

这是我的soundPool播放歌曲的代码

AudioManager mgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
float streamVolumeCurrent = mgr.getStreamVolume(AudioManager.STREAM_MUSIC);
float streamVolumeMax = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
float volume = streamVolumeCurrent / streamVolumeMax;  
soundID = soundPool.load(Environment.getExternalStorageDirectory()+"/cm.mp3", 1);
soundPool.play(soundID, volume, volume, 1, 0, 1.0f);

我找到了JetPlayer和AudioTrack课程,但我找不到任何好的教程来处理这个问题。

1 个答案:

答案 0 :(得分:1)

在使用SoundPool.setOnLoadCompleteListener

播放文件之前,您需要检查文件是否已成功加载
public void loadSound (String strSound, int stream) {
     boolean loaded = false;
     mSoundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
            @Override
            public void onLoadComplete(SoundPool soundPool, int sampleId,
                    int status) {
                loaded = true;
            }
        });
    try {
          stream= mSoundPool.load(aMan.openFd(strSound), 1);
        } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
   // Is the sound loaded already?
   if (loaded) {
     mSoundPool.play(stream, streamVolume, streamVolume, 1, LOOP_1_TIME, 1f);
    }
}

其中aMan是

AssetFileDescriptor aMan =  getAssets();