1

Android プログラミングで MediaPlayer を使用して、Eclipse でオーディオ ファイルを再生しようとしています。コンピューターのハード ドライブに保存されているオーディオ ファイル (.wav または .mp3) を実行する必要があります。私は多くのことを試しました。また、プロジェクトの res フォルダーにファイルをコピーしようとしましたが、何も機能しませんでした。以下は私のコードです。ご覧のとおり、私は多くの方法を試し、いくつかコメントしました。私は最初に IOException を以前に取得していました。しかし、MediaPlayer.create() を使用した後、IllegalStateException が発生します。どんな助けでも大歓迎です。

public void playSound(MainActivity mainActivity){
    System.out.println("in playsound");
    MediaPlayer mp = null;
    FileInputStream fis = null;

     try {
         //fis = new FileInputStream("C:\\Users\\Anupam-PC\\Downloads\\trailsoundfilerecordings\\jagmeet.wav");

         //mp.setDataSource(fis.getFD());
         System.out.println("inside try");
         //mp.setDataSource("/res/raw/hai.wav");
         //mp.setDataSource("C:\\Users\\Anupam-PC\\Downloads\\trailsoundfilerecordings\\jagmeet.wav");
         //mp.setDataSource("android.resource://com.example.texttospeech/agreji.mp3");
         //mp.setDataSource("agreji.mp3");

         mp = MediaPlayer.create(mainActivity, R.raw.hai);
         System.out.println("after DS");
         mp.prepare();
         System.out.println("after prepare");
            mp.start();

           // fis.close();
        } catch (Exception e) {
            System.out.println(e);
        } finally{
            try{
                fis.close();
            } catch (Exception e){

            }
        }
4

2 に答える 2

1

を実装する必要はありませんmp.prepare();create(/**/)

これは魅力のように機能する私の例です:

class Vulcan implements MediaPlayer.OnPreparedListener{

MediaPlayer mediaPlayer = null;
...

boolean isPrepearedToPlayAudio = false; 

mediaPlayer=MediaPlayer.create(context,R.raw.mini_vulcan_gun_1);

mediaPlayer.setOnPreparedListener(this);


public void stop(){

    mediaPlayer.pause();
}


public void start(){

    if(isPrepearedToPlayAudio){
               mediaPlayer.start();
       mediaPlayer.setLooping( true );
            } 
}


@Override
public void onPrepared(MediaPlayer mp) {
    isPrepearedToPlayAudio = true;
}
于 2013-07-31T20:16:53.837 に答える
0

MediaPlayer.create(...)already callsの呼び出しprepare()、および への複数の呼び出しprepare()により、ISE が発生します。あなたがする必要があるのは、削除することだけです:

mp.prepare();

Javadoc :

特定のリソース ID の MediaPlayer を作成する便利なメソッド。成功すると、prepare() はすでに呼び出されているため、再度呼び出してはなりません。

MediaPlayer を使い終わったら、release() を呼び出してリソースを解放する必要があります。リリースされていない場合、MediaPlayer インスタンスが多すぎると例外が発生します。

于 2013-07-31T20:19:13.307 に答える