SoundPool从URL加载

时间:2011-10-27 19:08:38

标签: android

我通过路径将mp3加载到声音池中。由于我不想进入的原因,我不想通过R.raw ...

加载

但我收到错误:

play(int, float, float, int, int, float) in the type SoundPool is not  applicable for the arguments (Object, float, float, int, int, float)

有没有办法将对象转换为int

SoundPool mySoundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
HashMap mySoundPoolMap = new HashMap<Integer, Integer>(); 
mySoundPoolMap.put(0,  mySoundPool.load("android.resource://com.App.Notifications/raw/myMP3",1));

float streamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
streamVolume = streamVolume / mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);

mySoundPool.play(mySoundPoolMap.get(0), streamVolume, streamVolume, 1, 0, 1f);

1 个答案:

答案 0 :(得分:1)

查看SoundPool文档,有几种方法可以向声音池添加内容:

  1. load(AssetFileDescriptor afd, int priority)
  2. load(Context context, int resId, int priority)
  3. load(String path, int priority)
  4. load(FileDescriptor fd, long offset, long length, int priority)
  5. 由于您不想加载捆绑资产,因此无法使用前两个选项中的任何一个。这意味着你必须使用选项3或4.

    最好的选择是自己从网址下载声音文件,然后保存文件,然后使用指向该文件的SoundPool或使用{FileDescriptor将声音添加到String {1}}包含文件的路径。

    更新:使用SoundPoolload添加项目时,会返回int。此int是声音的handle。然后播放声音必须使用 int告诉SoundPool您要播放的声音:

    例如:

    sp = new SoundPool();
    int handle1 = sp.load(/* add sound 1*/);
    int handle2 = sp.load(/* add sound 1*/);
    
    sp.play(handle2, /*other args*/); // play sound 2