アプリで音声ファイルをループ再生して、任意のタイミングで止める


前回の記事で、音声ファイルを再生するコードを書きました。

あれだけだと、ファイルを1回再生してすぐ止まったと思います。
あのままだと実用性が低いので、今回はループ再生して、好きなだけ鳴らして、ある程度の時間が経ったら止める、という処理をやってみようと思います。

Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); // アラーム音

//音量設定を取得
AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
int Vol = am.getStreamVolume(AudioManager.STREAM_MUSIC); //[res]-[raw]の音源を再生するときの音量
int max = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC); //[res]-[raw]の音源を再生するときの最大音量
System.out.println("Vol:" + Vol);
System.out.println("max:" + max);
//音量を上げる
am.setStreamVolume(AudioManager.STREAM_MUSIC, max, 0);

ここまでは一緒です。

MediaPlayerインスタンスの宣言から、ちょっと変えていきます。

final MediaPlayer mp = MediaPlayer.create(context, uri);
mp.setLooping(true);
mp.start();

int timeout = 30*1000;
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
	@Override
	public void run() {
		if (mp.isPlaying())
			mp.stop();
	}
}, timeout);

timeoutという変数で、音が鳴りやむまでの時間を設定しています。
ここでは30秒鳴って止めています。秒数を変えたいなら、この30を変えれば変更できます。

注意としては、mp.stop();を必ず実行するようにしてください。
これがないとマジでずっと鳴り続けます。Activityを閉じても、アプリを終了しても、ずっと、ずっと……。

アプリで音声ファイルをループ再生して、任意のタイミングで止める” への1件のコメント
1 Ping/トラックバック のために "アプリで音声ファイルをループ再生して、任意のタイミングで止める"
  1. […] してみます。 基本的には、下記の記事を参考に、組み合わせるだけです。 アプリで音声ファイルをループ再生して、任意のタイミングで止める Androidアプリでアラーム通知をする その1 […]

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください