androidStudio音を出す。
音を出すしたい場合。2種類あって
いや、本当は3種類あるみたいだけど。
自分の本に書いてあるのは2種類だったので、こちらで。
SoundPoolとMediaPlayerがあるんだけど。
SoundPoolが連続再生するとそのうち再生されなくなり。
調子悪し。・・・・いろいろ調整したけど無理っぽい。
MediaPlayerはうまく動くみたいなのでこれで行く。
といっても、停止→再生を繰り返すと、ぷちっと音が入るのが気に入らないが、
まずはこれで実装しましょう。
仕様上は停止しないので問題ないので、連続でイベント発生しない場合は、ほぼ問題ないと思われ。
いつものようにプロジェクト作成はBasicActivityで作っていきました。
まず、音源をresに入れていきます。
左上のProjectの所、普段Androidになっている選択をProjectに変更して、
app→src→main→resの配下にrawディレクトリを作って
音源ファイルをコピーしてください。
今回その名前をbgm.mp3とse.wavにしています。
そして、音源の再生ボタンと停止ボタンを作っていってください。
普通はFirstFragmentの中でボタンを実装しますので、
その手順で行きます。
いつものようにGUIでresのflagment_first修正して
再生用ボタンと停止用ボタンを作ります。
名前をtest_buttonとtest_button2としています。
FirstFragmentクラスに以下の様にMediaPlayerの変数を追加します。
private MediaPlayer mediaPlayer=null;
そしてFirstFlagmentのonViewCreatedの中で以下を追加してボタンの応答を受けられるようにします。
binding.testButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("TAG", "onClick: testButton start bgm");
//stop
if(mediaPlayer!=null) {
mediaPlayer.pause();
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null;
}
//start
MainActivity activity = (MainActivity) getActivity();
//mediaPlayer = MediaPlayer.create(activity, R.raw.bgm);
mediaPlayer = MediaPlayer.create(activity, R.raw.se);
mediaPlayer.setLooping(false);
mediaPlayer.seekTo(0);
mediaPlayer.start();
}
});
binding.testButton2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("TAG", "onClick: testButton2 stop bgm");
//
if(mediaPlayer!=null) {
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null;
}
}
});
上のtestButtonは再生、testButton2が停止。
mediaPlayer.setLooping(false);をtrueにすると再生を繰り返す。
自分のスマホではstopの時にプチッと音が入る。
ちなみに、MainActivity activity = (MainActivity) getActivity();とやって、
MediaPlayer.create(activity, R.raw.se);の入力にしています。
こうすると、Fragmentからでも、mediaPlayerのthisの代わりになってくれます。
ただし、スマホを回転すると、Fragmenを作り直すようなので、注意です。
もしかしたら、mediaPlayer変数はMainActivityに持っておいて、初期化しておいて、
再生時にFragmentから呼び出すようにした方が良いかもしれませんね。