У меня есть куча звуков, назначенных группе кнопок, которые мне нужно воспроизвести. Все мои звуки находятся в папке с активами. Однако это не работает. Цель: загрузить из assetsFodler и воспроизвести звук. Я приведу примеры кода из моего проекта:
//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);
Я просто не хочу иметь так много строк кода, я хотел, чтобы это выглядело красиво.