Little Strange Software

スマホアプリの開発を行う LittleStrangeSoftware のブログです。

自作アプリにBGMを!KotlinでMediaPlayerを扱ってみる

 どうも!LSSです!

 

 ちょっと間が空きましたが、今回はKotlin記事です!

 

 


 自作アプリにBGM効果音を入れる、って話をちらっと書いてはいましたが、今回は実際にKotlinでBGMを流す方法の記事となります。

 

 記事タイトル通り、MediaPlayerっていうのを使います。

 

 このMediaPlayerというのは手軽に音楽を鳴らしたり止めたり出来ますが、複数同時に音楽を鳴らす事ができないのでBGM向けで、複数同時に鳴らす事ができるSoundPool効果音向け、という位置づけです!

効果音演奏に使用するSoundPoolはこちらを参照

  

little-strange.hatenablog.com

 little-strange.hatenablog.com

 

 

 

まずは素材ファイルの用意!

 

 音声ファイルをAndroidStudioに入れます。

 

 AndroidStudioの画面左で、app>res>raw>の中に入れます。

 デフォルトではrawディレクトリは作られていないので、まずresの中に作ってあげる必要があります。

 

 

f:id:little_strange:20191109162729p:plain

「res」を右クリックして「New」にマウスカーソルをのせると、更に右に候補が出てきます。

 その中の「Directory」をクリックします。

 

 

f:id:little_strange:20191109162957p:plain

すると↑こんなダイアログが出てくるので、rawと入れてOKを押せば、resの下にrawが出来ます!

 

  あとは、別途 Windowsエクスプローラで音声ファイル(mp3など)を右クリックでコピー、AndroidStudioのrawを右クリックして「Paste」を選択すれば、

f:id:little_strange:20191109163213p:plain

 ↑これで素材の用意は完了です!

 

 

今回の肝!

 

MediaPlayerを使うにあたって必要な記載です。

なお、以下に出てくるmp0は任意の名前(好きに変えちゃってOK!な部分)、
plusmaniaは任意の音声ファイルのファイル名(から拡張子を除いたもの)です。

 

MediaPlayerのインスタンスを、Activity直下で宣言

lateinit var mp0:MediaPlayer

 

再生する音声ファイルを、onCreate内で設定 あわせて、ループ再生する・しないを指定

mp0= MediaPlayer.create(this,R.raw.plusmania)
mp0.isLooping=true

 

再生を開始させたいところに記載

mp0.start()

 

onDestroy内に記載

mp0.release()

 

 

 

他にもよく使いそうなもの

 

再生を停止させたいところに記載

mp0.stop()

 

音声ファイルの再生開始位置を指定(0で曲の最初から。引数のInt型の整数値で指定します。)

mp0.seekTo(0)


思ったんですが、Androidアプリで何かするのって大抵…

 Androidアプリ開発初心者ですが、MediaPlayerに限らず、

  • まずActivity直下lateinit varで存在を宣言。
  • onCreate内で初期設定。
  • 使いたいタイミング(ボタンのonClickに設定した関数内など)で実行。
  • onDestroy内.release()で解放。

で、大抵の事は運ぶように思えてきました。
※場合によっては、onCreate・onDestroyじゃなくてonResume・onPauseだったり、onStart・onStopだったりするかもですが。



コード全文はこんな感じになります

↓MediaPlayer関連の部分を赤文字にしてみました。 

 

package jp.littlestrangesoftware.a20191109music

import android.media.MediaPlayer
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

class MainActivity : AppCompatActivity() {

lateinit var mp0:MediaPlayer

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

mp0= MediaPlayer.create(this,R.raw.plusmania)
mp0.isLooping=true

mp0.start()


}

override fun onDestroy() {
mp0.release()
super.onDestroy()
}

}

 

 

お手軽ですねぇ

  宣言1行、初期設定2行、あと使用するのは短い1行コード。

 最初の頃だったらこの、宣言や設定をそれぞれ事前に行うの正直メンドクセって感覚がありましたが、最近はこのぐらいが普通って感じに思えてきましたw 

 

 というところで、今回はここまで!

SoundPoolを使って効果音を鳴らすのは、また後日記事にしますが、MediaPlayerよりもうちょっとだけメンドクサイですw

 

 

追記:公開済みのゲームで、使用しています

 GooglePlayで公開中の足し算ゲーム、 

ぷらすまにあ

のBGM演奏に、このMediaPlayerを使用しています。

 実装したらどんな感じなのか見て(聴いて?)みたい方、DLしてみてねw(宣伝)

 

 

参考書籍

↑サンプルコードは全部Javaですが、Androidで「あれやりたい」「これやりたい」がぎっしり詰まっている本。

 辞書的に重宝しています^^

 

 

 ではまた!次回もよろしくです!!

 

 

AndroidStudio+Kotlin記事インデックス