ボタンのクリックに基づいていくつかの音楽(wav形式)ファイルを再生しようとしています。 MediaPlayerを正しく動作させることができません。 MediaPlayerクラスのオブジェクトをインスタンス化しようとするたびに、create()で失敗します。私がコードを投稿する前に、私がやっていることの流れを次に示します。
1. 2つのボタンを含むレイアウトファイル。
2.これらのボタンが読み込まれ、onClickListenersが定義されています。
3.クリックされたボタンに応じて、playAudioFile(View)
という関数が呼び出され、MediaPlayerインスタンスが作成され、ファイルが再生されます。私はここで、上記の問題へのStackOverflowそのディテールソリューションにポストの多くを経ていMediaPlayerでCreate()が失敗する - android
public void playAudioFile(View v) {
/*Steps:
* 1. Take in id of the button.
* 2. Using id, identify what file needs to be played.
* 3. Play file.
*/
String path_to_file = null; //this is the path to the file.
if(b01.getId() == ((Button)v).getId()) {
Log.v(this.toString(), "Button 01 pressed.");
path_to_file = "/sdcard/audio/temp1.wav";
} else if(b02.getId() == ((Button)v).getId()) {
Log.v(this.toString(), "Button02 pressed.");
path_to_file = "/sdcard/audio/temp2.wav";
}
path_to_file = "file://" + path_to_file;
Uri streamUri = Uri.parse(path_to_file);
Log.v(this.toString(), "Path of file = " + path_to_file);
MediaPlayer mp = MediaPlayer.create(this, streamUri);
if(mp == null) {
Log.v(this.toString(), "Create() on MediaPlayer failed.");
}
mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
// TODO Auto-generated method stub
try {
mp.start();
} catch (IllegalStateException e) {
e.printStackTrace();
Log.v(this.toString(), "Illegal state exception thrown in start.");
}
}
});
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
mp.release();
}
});
}
次のようにplayAudioFile(ビュー)のためのコードです。私はそこになされたすべての提案を組み込んだ後、この問題に遭遇しています。どんな助けも大歓迎です。
おかげで、
スリラム
ファイルパスの前に余分な\を追加すると思います。 –
@chirag:ファイルパスの前に余分な\を追加していた場合、mediaplayerはsetDataSource()で失敗していないはずですか?なぜprepare()で?あなたの提案を試してみます。 – Sriram
@chirag:いいえ、ファイルパスが何も変更しないうちに '\'を削除します。ありがとう! – Sriram