音楽の再生(MediaPlayer)

(ブログ記事の一覧は「こちら」)

音楽や動画を再生する機能を持つMediaPlayerクラスについて学びましょう。 ここでは、音楽ファイル(MP3などいろいろなフォーマットに対応)の再生について説明します。

ここで学ぶこと

  • MediaPlayerクラスの使い方

参考:

MediaPlayer(公式サイト)

例題

作成するもの

あらかじめアプリ内に用意した音楽ファイル(MP3)の再生/停止を行うサンプルアプリを作成します。

準備

インターネットでフリーのMP3ファイルを探して、ダウンロードしてください。
(ダウンロードしたファイル名は「sample_music.mp3」として説明していきます。)
次に、app / src / main / res に「raw」フォルダを作成して、rawフォルダに「sample_music.mp3」をコピーします。

レイアウト

  • Button(R.id.buttonPlay) 再生/停止ボタン
  • SeekBar(R.id.seekBarVolume) 音量スライダー(課題1で使用)
  • Button(R.id.buttonBack) 戻るボタン(課題2で使用)
  • Button(R.id.buttonFwrd) 進むボタン(課題2で使用)

プログラム

まず、MediaPlayerクラスのインスタンス mMediaPlayer を宣言します。

public class MainActivity extends AppCompatActivity {

    private MediaPlayer mMediaPlayer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

MP3ファイル「sample_music.mp3」を再生する関数です。

private void playMusic() {
    try {
        // MediaPlayerの生成
        mMediaPlayer = MediaPlayer.create(this, R.raw.sample_music);
        mMediaPlayer.setLooping(true);

        // MediaPlayerの再生
        mMediaPlayer.seekTo(0);
        mMediaPlayer.start();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

playMusic関数は、再生の他に、以下の処理も行っています。

  • ループ再生に対応(setLooping(true))
  • 再生位置を先頭に戻す(seekTo(0))


playMusic関数で再生した音楽を停止する関数です。

private void stopMusic() {
    if (mMediaPlayer == null) return;

    try {
        // MediaPlayerの停止
        mMediaPlayer.stop();
        mMediaPlayer.release();
        mMediaPlayer = null;
    } catch (Exception e) {
        e.printStackTrace();
    }
}

それぞれの関数は以下のように呼び出します。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button buttonPlay = findViewById(R.id.buttonPlay);
    buttonPlay.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (mMediaPlayer == null || !mMediaPlayer.isPlaying()) {
                // (再生していないので)再生を開始
                playMusic();
            } else {
                // (再生中なので)再生を停止
                stopMusic();
            }
        }
    });

}

実行、確認

ボタンを押すと、「sample_music.mp3」が再生/停止されることを確認してください。

課題1

f:id:MJeeeey:20191003220024p:plain:w240

音量スライダーを追加してください。

[ヒント]

  • スライダーは、SeekBar を使用します。
  • 音量の調整は、setVolume関数を使用します。

課題2

3曲の音楽ファイルを切り替えて再生できる機能を追加してください。

  • まず、3曲の音楽ファイルを用意してください。(インターネットで探してください)
  • rawフォルダに曲を追加してください。
  • 曲の切り替えボタン(戻る、進む)を追加してください。

曲の切り替えを行うには、再生中の音楽をいったん停止して、新たに再生した音楽ファイルを指定して再生する処理を行うことで実現できます。