1
我有一堆聲音,分配給一組按鈕,我需要播放它。我所有的聲音都在資產文件夾中。但是,它不起作用。 目的是:從assetFodler加載和播放,聽起來。我會出來與我的項目的代碼示例:從資產中加載並使用soundpool
//set up audio player
mSoundPool = new SoundPool(20, AudioManager.STREAM_MUSIC, 0);
mAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
streamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
streamVolume = streamVolume/mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
//getting files lists from asset folder
aMan = this.getAssets();
try {
filelist = aMan.list("");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
對於不有很多的代碼行的目的,我創建了一個基本的程序裝載和打聲音:
public void loadSound (String strSound, int stream) {
try {
stream= mSoundPool.load(aMan.openFd(strSound), 1);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mSoundPool.play(stream, streamVolume, streamVolume, 1, LOOP_1_TIME, 1f);
}
正如你所看到的,我傳遞文件(stringName)和streamID。
最後,這裏是我如何使用它:
case R.id.button1:
//if button was clicked two or more times, when play is still on im doing stop
mSoundPool.stop(mStream1);
loadSound(filelist[0],mStream1);
break;
當我跑項目,沒有任何反應和logcat的說:
12-09 10:38:34.851: W/SoundPool(17331): sample 2 not READY
任何幫助,將不勝感激。
UPD1: 當我做這種方式,而不必LoadSound讀取程序,它工作正常 下面的代碼是的onCreate:
//load fx
try {
mSoundPoolMap.put(RAW_1_1, mSoundPool.load(aMan.openFd(filelist[0]), 1));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
和ONCLICK按鈕:
//resourcePlayer.stop();
mSoundPool.stop(mStream1);
mStream1= mSoundPool.play(mSoundPoolMap.get(RAW_1_1), streamVolume, streamVolume, 1, LOOP_1_TIME, 1f);
我只是不想有這麼多的代碼行,我想讓它看起來不錯
很好,沒有任何反應。似乎沒有加載...爲什麼? – Daler
@Daler:因爲在當前代碼中執行順序的所有內容都會在mSoundPool.load(aMan.openFd(strSound),1)之後進行一些等待。 '叫。你可以看到http://www.vogella.com/blog/2011/06/27/android-soundpool-how-to-check-if-sound-file-is-loaded/例子 –
不幸的是,我當用戶點擊按鈕時不得有任何延遲。它必須立即播放。任何想法如何實現它?其實我可以通過使用R.raw立即播放它,但是我想從資產來做。 – Daler