我通过路径将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);
答案 0 :(得分:1)
查看SoundPool文档,有几种方法可以向声音池添加内容:
load(AssetFileDescriptor afd, int priority)
load(Context context, int resId, int priority)
load(String path, int priority)
load(FileDescriptor fd, long offset, long length, int priority)
由于您不想加载捆绑资产,因此无法使用前两个选项中的任何一个。这意味着你必须使用选项3或4.
最好的选择是自己从网址下载声音文件,然后保存文件,然后使用指向该文件的SoundPool
或使用{FileDescriptor
将声音添加到String
{1}}包含文件的路径。
更新:使用SoundPool
向load
添加项目时,会返回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