次のコードがあります:
AssetFileDescriptor afd = getAssets().openFd("AudioFile.mp3");
player = new MediaPlayer();
player.setDataSource(afd.getFileDescriptor());
player.prepare();
player.start();
問題は、このコードを実行すると、要求したオーディオ ファイルだけが再生されるのではなく、アセット ディレクトリ内のすべてのオーディオ ファイルがアルファベット順に再生され始めることです。何が間違っているのでしょうか。アセット ディレクトリからオーディオ ファイルを再生するより良い方法はありますか。
追加の質問: オーディオ ファイルをアセット ディレクトリに保存する場合と、res/raw ディレクトリに保存する場合とで違いはありますか? アセット ディレクトリにある場合は ID が付与されないという点を除きます。オーディオ ファイルを res/raw フォルダーに移動すると、MediaPlayer
ID パラメーターがないため、 の再利用に問題が発生しますsetDataSource()
。この種の問題に対処するための適切なガイドラインが見つかりません。
ベストアンサー1
player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
あなたのバージョンは、アセット ディレクトリにファイルが 1 つだけあれば動作します。アセット ディレクトリの内容は、実際にはディスク上の「実際のファイル」ではありません。それらはすべて、次々にまとめられます。したがって、開始位置と読み取りバイト数を指定しないと、プレーヤーは最後まで読み取ります (つまり、アセット ディレクトリ内のすべてのファイルを再生し続けます)。