このような場合は、2 つのメディアプレーヤーを使用し続けてください。問題はありません。参照を 1 つだけ使用すると、クリップを変更するたびに再作成するか、停止して setDataSource(context, URI) を呼び出す必要があります。
mediaplayer への参照を 1 つだけ使用する場合、ユーザーはクリップを再生するたびに準備が整うまで待機する必要がありますが、実装では両方のサウンド クリップをいつでも再生する準備ができています。
とにかく、ここにsetDataSourceの例があります:
MediaPlayer mp = MediaPlayer.create(context, firstSongUriOrRes);
public void play(int clip)
{
if(mp.isPlaying()) //Stop the mediaplayer if it's already playing
mp.stop();
switch(clip) //Choose the clip to be played
{
case 0:
mp.setDataSource(context, firstSongUriOrRes);
break;
case 1:
mp.setDataSource(context, secondSongUriOrRes);
break;
}
mp.prepare();
mp.start(); //Start the mediaplayer
}
setDataSource を使用するもう 1 つの方法は、オーディオ ファイルをアセット ディレクトリ内に配置し、次のコードを使用することです。
AssetFileDescriptor fd = context.getAssets().openFd("pathInsideAssets/fileName");
mp.setDataSource(fd.getFileDescriptor(), fd.getStartOffset(), fd.getDeclaredLength());