22 音を鳴らしてみよう

22.1 音を鳴らす方法

SoundTurtleを使うと、MP3、WAVE、MIDI形式のファイルを制御して、音を鳴らすことができます。

MP3、WAVE、MIDI以外のファイルを鳴らしたい場合は、変換サイトで対応できるファイル形式に変換してください。

22.2 SoundTurtleの使い方

まず再生するファイルを指定して、SoundTurtleオブジェクトを作成します。

SoundTurtle bgm = new SoundTurtle("bgm.mp3"); 
				

そして、作成したSoundTurtleオブジェクトに対して、play() や stop() などの命令を行います。

bgm.play(); //BGMを再生する
bgm.stop(); //BGMを停止する
				

22.3 あらかじめ音を読み込んでおく

音の再生時に反応速度が重要な場合は、あらかじめ音を読み込んでおくこと、再生するまでの反応速度を早くすることができます。

SoundTurtle fire = new SoundTurtle("fire.mp3"); 				
fire.loadOnMemory();// あらかじめ効果音を読み込んでおく
fire.play();// 効果音を再生する				
				

ただし、再生時間が長い大きなファイルを読み込む場合は、それだけメモリが必要になります。

22.4 SoundTurtleで利用できる命令

22.4.1 再生と停止

play()
音を1度だけ再生します。
loop()
音をループ再生します。音の再生が終わると、もう一度はじめから再生します。stop()が呼ばれるまで再生し続けます。
stop()
音を停止します。
isPlaying()
音が再生中かどうか調べます。必ず、if文の条件文の中に書いて下さい。

22.4.2 音量の取得・変更

getVolume()
音量を取得します。取得する音量は0(消音)から100(最大音量)のいずれかです。
setVolume(??)
音量を??に設定します。設定できる音量は0(消音)から100(最大音量)までです。

22.4.3 音の読み込み

loadOnMemory()
指定した音ファイルを読み込みます。ファイルを読み込んだ場合、反応速度が早くなりますが、ファイルを読み込むためのメモリ領域が必要です。

22.5 練習問題

22.5.1 シューティングゲームに効果音をつけよう

「ゲームを作ろう」で紹介したシューティングゲームに、効果音をつけましょう。

次の2つの場合において、好きな音を鳴らして下さい。

ファイル名は「SoundEffect.java」とすること.

22.5.2 シューティングゲームにBGMをつけよう

「ゲームを作ろう」で紹介したシューティングゲームに、BGMをつけましょう。

ファイル名は「BGM.java」とすること.

22.6 練習問題解答例

リスト 22.6.1 ShootingGameWithSound.java
  1: /**
  2:  * シューティングゲーム(音付き)
  3:  * 
  4:  * Yoshiaki Matsuzawa (2011/09/28)
  5:  */
  6: public class ShootingGameWithSound extends Turtle {
  7: 
  8: 	// 起動処理
  9: 	public static void main(String[] args) {
 10: 		Turtle.startTurtle(new ShootingGameWithSound());
 11: 	}
 12: 
 13: 	// タートルを動かす処理
 14: 	public void start() {
 15: 		System.out.println("ShootingGameWithSound: Version 8");
 16: 
 17: 		hide();// タートルを消す
 18: 
 19: 		// 画面の調整
 20: 		window.size(640, 480);
 21: 		window.warp(100, 100);
 22: 
 23: 		int score; // 得点を入れる変数
 24: 
 25: 		// キャラクターの生成
 26: 		Star enemy = new Star(); // enemyという名前の星を生成
 27: 		Doraemon player = new Doraemon(); // playerという名前のドラえもんを生成
 28: 		Circle bullet = new Circle(); // bullet(弾)という名前の円を作成
 29: 
 30: 		// 得点板の生成
 31: 		TextTurtle scoreBoard = new TextTurtle(); // scoreBoardという名前のTextTurtleを生成
 32: 
 33: 		// 音楽の生成
 34: 		SoundTurtle hit = new SoundTurtle("hit.mp3");
 35: 		hit.loadOnMemory();
 36: 		SoundTurtle fire = new SoundTurtle("fire.mp3");
 37: 		fire.loadOnMemory();
 38: 
 39: 		SoundTurtle bgm = new SoundTurtle("bgm.mp3");
 40: 		// BSound bgm = new BSound("bgm.mp3");
 41: 		bgm.play();
 42: 
 43: 		// 弾を適切な大きさに調整
 44: 		bullet.size(20, 20);
 45: 
 46: 		// キャラクターの位置を調整
 47: 		enemy.warp(200, 100);
 48: 		player.warp(320, 350);
 49: 		bullet.warp(-100, -100);// 弾は最初見えない位置に置いておく
 50: 
 51: 		// 得点板の位置を調整
 52: 		scoreBoard.warp(600, 50);
 53: 
 54: 		// 得点を初期化
 55: 		score = 0;
 56: 
 57: 		while (true) {
 58: 
 59: 			// --- 待つ ---
 60: 			sleep(0.025);
 61: 
 62: 			// --- 処理 ---
 63: 
 64: 			// 敵を動かす(流れ星と一緒)
 65: 			enemy.warp(enemy.x() + 5, enemy.y());
 66: 			enemy.rt(10);
 67: 
 68: 			// もし,敵が右端だったら
 69: 			if (enemy.x() > 640) {
 70: 				enemy.warp(0, enemy.y());// 左端にワープ
 71: 			}
 72: 
 73: 			// ドラえもんを左右に動かす
 74: 			if (key() == 37) { // 左
 75: 				player.warp(player.x() - 5, player.y());
 76: 			} else if (key() == 39) { // 右
 77: 				player.warp(player.x() + 5, player.y());
 78: 			}
 79: 
 80: 			// 上が押されたら,
 81: 			if (key() == 38) {
 82: 				// 弾を出す(弾をドラえもんと同じ位置にする)
 83: 				bullet.warp(player.x(), player.y());
 84: 				fire.play();
 85: 			}
 86: 
 87: 			// 弾を上に動かす
 88: 			// (見えなくても,上に動かしつづける)
 89: 			bullet.warp(bullet.x(), bullet.y() - 5);
 90: 
 91: 			// もし,弾が敵に当たっていたら
 92: 			if (bullet.intersects(enemy)) {
 93: 				score++;// 得点を増やす
 94: 
 95: 				// 衝突音を鳴らす
 96: 				hit.play();
 97: 			}
 98: 
 99: 			// 得点板の数字を更新
100: 			scoreBoard.text(score);
101: 
102: 			// --- 再描画 ---
103: 			update();
104: 		}
105: 
106: 	}
107: 
108: }

ここ をクリックすると、プログラムをダウンロードできます。

下のボタンを押すと、ShootingGameWithSoundプログラムが実行できます。