私は、再生したいMIDIファイルを動的に作成するアプリケーションを作成しています。私のアプリでボタンを押すたびに、新しいMIDIファイルが作成され、外部ストレージに書き込まれます。私はその後、そのファイルを読んでそれを再生するアプリをしたい。 SoundPoolを使ってファイルを再生しています。しかし、私が見つけたサンプルから、SoundPoolはonCreateの間に初期化されるため、私のファイルは一度だけ読み込まれます。つまり、私が行った変更にかかわらず、ボタンを押すたびに同じファイルが再生されます。私はSound1の初期化をAudio1ButtonHandlerメソッドに移そうとしましたが、サウンドが得られなかったり、 "sample x not ready"というエラーが発生しました。私のアプリから関連するコードはここにある:MIDIファイルの動的再読
public void onCreate(Bundle savedInstanceState) {
…………
soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
soundPoolMap = new HashMap<Integer, Integer>();
soundPoolMap.put(SOUNDPOSITION, soundPool.load("/sdcard/test.mid", 1));
}
public void Audio1ButtonHandler(View target) {
ArrayList<Integer> chord = new ArrayList<Integer>();
chord = Chord.calculateChord(kSelection, cSelection);
for (int i = 0; i < chord.size(); i++) {
System.out.println("chord value is " + chord.get(i).toString());
}
Midi.createMidiFile(chord);
playSound();
releaseSound();
}
public void playSound() {
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;
soundPool.play(soundPoolMap.get(SOUNDPOSITION), volume, volume, 1, 0, 1f);
}
public void releaseSound() {
soundPoolMap.clear();
soundPool.release();
}
あなたは私がしようとすると再読み込みが、無駄にするためにそれらを強制的に(releaseSound以内)リソースを解放しようとしている見ることができるように。
すべてのポインタが大きく受信されます。 ありがとう