web-dev-qa-db-ja.com

Androidアプリのres / rawフォルダーでmp3を再生するにはどうすればよいですか?

私のAndroidアプリのres/rawフォルダーに小さな(200kb)mp3があります。Eclipseのエミュレーターで実行しようとしています。Rファイルのリソースとして認識されています。しかし、準備/開始しようとすると、アクティビティがクラッシュします!マニフェストに何か変更する必要がありましたか?

 MediaPlayer mPlayer = MediaPlayer.create(FakeCallScreen.this、R.raw.mysoundfile); 
 
 try {
 mPlayer.prepare(); 
 mPlayer.start(); 
} catch(IOException e){
 //後で処理する
} 
24
damonkashu

アクティビティを開始するとき、つまりonCreateで次のコードを入力します。

  public void onCreate(Bundle savedInstanceState) {


        super.onCreate(savedInstanceState);         
        setContentView(R.layout.main);

        MediaPlayer mPlayer = MediaPlayer.create(FakeCallScreen.this, R.raw.mysoundfile);
        mPlayer.start();

    }

アクティビティを停止するとき、つまりonDestroyで次のコードを入力します。

   public void onDestroy() {

    mPlayer.stop();
    super.onDestroy();

}

それが役に立てば幸い :)

72
Muhammad Shahab

SoundPool クラスを使用することをお勧めします。サウンドを再生するときの待機時間を短縮し、一度に再生する数が多すぎるときにサウンドを優先できるなど、他の優れた機能も提供します。

ドキュメントから:

SoundPoolは、APK内のリソースまたはファイルシステム内のファイルからメモリにロードできるサンプルのコレクションです。 SoundPoolライブラリは、MediaPlayerサービスを使用して、オーディオを生の16ビットPCMモノまたはステレオストリームにデコードします。これにより、アプリケーションは、CPUの負荷や再生中の圧縮解除の遅延に悩まされることなく、圧縮ストリームで出荷できます。

例えば:

/**
 * How many sounds can be played at once.
 */
private static final int MAX_SOUND_POOL_STREAMS = 4;

/**
 * Modify this as part of your own priority scheme. Higher numbers mean higher
 * priority. If you don't care, it's okay to use the same priority for every
 * sound.
 */
private static final int NORMAL_PRIORITY = 10;

private int mySoundId;

@Override
public void setupContent() {
    this.soundPool = new SoundPool(MAX_SOUND_POOL_STREAMS,
            AudioManager.STREAM_MUSIC, 100);
    this.mySoundId = this.soundPool.load(this.getApplicationContext(),
            R.raw.mySound, 1);
}

@Override
private void playMySound() {
    this.soundPool.play(this.mySoundId, 1, 1, NORMAL_PRIORITY, 0, 1);
}
8
Michael Scheper

これは私のプロジェクトで使用する静的な方法です。 Utilsクラスに追加します。

    public static void playSound(final Context context, final SoundType type)
    {

            new Thread(new Runnable()
            {

                @Override
                public void run()
                {
                    MediaPlayer mediaPlayer = new MediaPlayer();
                    int resId = -1;
                    switch (type)
                    {
                    case INCOMING_NOTIFICATION:
                        resId=R.raw.noti_sound;
                        break;
                    case SEND_BETTING_SLIP:
                        resId=R.raw.slip_sent;
                        break;
                    case TRIVIA_RIGHT_ANSWER:
                        resId=R.raw.game_bonus;
                        break;
                    case TRIVIA_WRONG_ANSWER:
                        resId=R.raw.whistle_referee_trivia_bad_answer;
                        break;
                    }

                    if (resId != -1)
                    {
                        mediaPlayer = MediaPlayer.create(context, resId);
                        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                        mediaPlayer.setLooping(false);
                        mediaPlayer.start();

                        while (mediaPlayer.isPlaying() == true)
                        {
                        }
                    }
                }
            }).start();

        }
}

今、私は列挙型(SoundType)を見つけ、mp3ファイルをresフォルダーの下のrawフォルダーに配置しました。

2
Gal Rom