[Android] 簡単なMediaPlayerで音楽を再生する

MediaPlayer()を使って簡単な音楽再生アプリが作れます。Audioを扱うものとしては他にはSoundPoolやAudioTrackがあります。

 

Android Studio 3.0
Android 8.0

 



MediaPlayer

 
MediaPlayerの特徴としては、呼び出してから再生まである程度時間がかかります。ゲームで言うとBGMを流しっぱなしには向きますが、爆発音を出したい時はタイミングが合わないかもしれません。
 
ゲームでの爆発音などはSoundPoolが使えます。更に、時間遅延が無いのはAudioTrackです。それぞれ一長一短がありますので用途に合わせた使い方が必要です。
 
MediaPlayerでの音楽ファイルはassetsあるいはrawに置きます。
assetsとrawの違いは、

  • assetsフォルダー分けができる
    • たくさんファイルがあるケースではassetsが便利
  • raw:ベタにただファイルを入れる配置
     
 

assetsの設定

 
mp3ファイルを入れるため「assets」フォルダーを作ります。appを選択した状態で
「New」->「Folder」->「assets folder」からフォルダを作成して、そこにmp3ファイルを入れます。
 
audioplayer_1

あるいは直接フォルダーをmainの下に作ることでもできます。
..\app\src\main\assets
手順としては

  1. assetsをオープンして音楽素材を取得
  2. MediaPlayerのインスタンスを生成して
  3. 音楽素材を設定
  4. 準備ができるまで待ち
  5. 再生を始める
     

 

音量を調整する場合、アプリでボリュームを作成することもできますが、もともとある音量調整ボタンでユーザーが好みで設定できる方が無駄がなく、ユーザーにとっても便利です。そこで setVolumeControlStream を使います。

これを設定しないと、ボリュームでコントロールされるのは(通知音と着信音)となります。

 
まとめるとこうなります
MainActivity.java

 
レイアウト
activity_main.xml

 
リソース
strings.xml

 
BGMとして繰り返し再生させる場合は、release()でリソースを解放しないと、メモリーが圧迫されて止まりますので注意です。再生終了を検知させてもいいのですが、ここは簡単にインスタンスを生成する前にリリースさせます。

 

 

rawフォルダを使う

 
assetsからデータを取り出しましたが、参考のためrawフォルダに置いた場合です。
この場合mp3などの拡張子はいりません。

rawフォルダをresの下に作成して
音楽素材を入れます。
あるいは直接作ってもできます。
..\app\src\main\res\raw
 
前のコードの audioSetup() の部分のみ変更します。この場合 try catch や prepare() もいりません。
 
MainActivity.java

 
 

Reference:
MediaPlayer Refence