🎶
【Android】MediaPlayerで音声を再生する
Androidでは MediaPlayer API
を介して音声を再生することが可能です。
下記の動画のように音声を再生できるアプリを作ってみましょう
1. AudioPlayerクラスの準備
まず、音声ファイルの再生を管理するAudioPlayer
クラスを作成します。このクラスは、MediaPlayer
インスタンスの初期化、再生、停止、一時停止を担います。
class AudioPlayer(
private val context: Context,
private val resourceId: Int,
private val mediaPlayerFactory: (Context, Int) -> MediaPlayer = { ctx, resId ->
MediaPlayer.create(ctx, resId)
}
) {
private var mediaPlayer: MediaPlayer? = null
init {
prepareMediaPlayer()
}
private fun prepareMediaPlayer() {
mediaPlayer = mediaPlayerFactory(context, resourceId).apply {
setOnCompletionListener {
stopAudio()
}
}
}
fun playAudio() {
mediaPlayer?.start()
}
fun stopAudio() {
mediaPlayer?.stop()
mediaPlayer?.release()
mediaPlayer = null
prepareMediaPlayer()
}
fun pauseAudio() {
mediaPlayer?.pause()
}
}
2. ViewModelの作成
AndroidViewModel
を継承したAudioPlayerViewModel
クラスを作成します。このクラスでは、UIからの操作を受けてAudioPlayer
クラスの各メソッドを呼び出します。
package com.example.myapplication
import android.app.Application
import androidx.lifecycle.AndroidViewModel
import com.example.myapplication.model.AudioPlayer
class AudioPlayerViewModel(
application: Application,
private val resourceId: Int = R.raw.jinglebells
) : AndroidViewModel(application) {
private val audioPlayer = AudioPlayer(application, resourceId)
fun playAudio() {
audioPlayer.playAudio()
}
fun pauseAudio() {
audioPlayer.pauseAudio()
}
fun stopAudio() {
audioPlayer.stopAudio()
}
override fun onCleared() {
super.onCleared()
audioPlayer.stopAudio()
}
}
3. UIの構築
Jetpack Composeを使用してUIを構築します。MainActivity
内でAudioPlayerScreen
コンポーザブル関数を呼び出し、再生と一時停止のボタンを提供します。
class MainActivity : ComponentActivity() {
private val viewModel: AudioPlayerViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
AudioPlayerScreen(viewModel)
}
}
}
@Composable
fun AudioPlayerScreen(viewModel: AudioPlayerViewModel) {
Column(modifier = Modifier.padding(PaddingValues(16.dp))) {
Button(onClick = { viewModel.playAudio() }) {
Text(text = "Play Audio")
}
Button(onClick = { viewModel.pauseAudio()}) {
Text(text = "Pause Audio")
}
}
}
まとめ
この記事では、AndroidでMediaPlayer
を使用して音声ファイルを再生する方法を学びました。MediaPlayer
の基本的な使用方法をマスターすることで、アプリケーションにメディア体験を提供することができます。
サンプルコードをこちらにおいたのでぜひ参考にしてみてください
Discussion