前回はスコアとコンボの回数をカウントする部分のプログラムについて説明しました。
今回は、音楽を流して前回作ったプログラムと組み合わせていきます。音楽のリズムに合わせてノートを流す部分がミソです。
音ゲーは、音楽のリズムに合わせてノートと呼ばれる目印(丸や四角形)を流したり、ボタンを押すタイミングによって得点や視覚エフェクトを変えたり、複数のボタンを押したときでも正確に同時処理を行う必要があったりと、内容が複雑で説明のポイントが多いのでテーマを絞って複数の記事に分けて説明しています。
音ゲーの作り方の第4回目は『音楽のリズムに合わせてノートを生成する方法』について解説します。
完成品
この章の内容をご自身のScratch環境に反映すると、同じ動きを再現することができます。
完成した動き(最終形態)
この記事の内容で到達する状態のGIFアニメーションです。
GIFアニメーションの序盤部分を載せておきます。(フル版はファイルサイズが大きいため、ダウンロードボタンからダウンロードできます)
なお、GIF画像なので音声は聞こえませんが、実際のゲームでは有名な『カノン』の楽曲が流れていて、その音楽のリズムに合わせてノートが流れています。後段のところでライセンスフリーのクラシック音源のダウンロードサイトを紹介します。
また、実際の音源(mp3ファイル)はテンポ90bpmなので、それを元に計算して今演奏している拍数をステージ上に表示しています。
GIFアニメのフル版は下からダウンロード(右クリックで名前を付けてリンク先を保存)して見てください。↓↓↓ ただし、サイズが100MB近くありますので通信環境にご注意ください。
使用したスプライトと背景
スプライトは「Dノート」「Fノート」「Jノート」「Kノート」「DFJKキー押下」「判定ライン」「ノート生成」「エフェクト1」「エフェクト2」「エフェクト3」「楽曲データ」の11個、それと「ステージ」です。
【D/F/J/Kノートのスプライト】
以前の記事を参照してください↓↓↓(※リンクをクリックすると対象の文章まで飛びます)
【Scratch 3.0】音楽 音ゲーの作り方①【ノートの生成とキーイベント】(Tips)
【DFJKキー押下のスプライト】
「DFJKキー押下」スプライトはプログラム専用なのでコスチュームはありません。
【判定ラインのスプライト】
以前の記事を参照してください↓↓↓(※リンクをクリックすると対象の文章まで飛びます)
【Scratch 3.0】音楽 音ゲーの作り方①【ノートの生成とキーイベント】(Tips)
【ノート生成のスプライト】
「ノート生成」スプライトはプログラム専用なのでコスチュームはありません。
【エフェクト1/2/3のスプライト】
前々回の記事を参照してください↓↓↓(※リンクをクリックすると対象の文章まで飛びます)
【Scratch 3.0】音楽 音ゲーの作り方②【3つのエフェクト(視覚効果)】(Tips)
【楽曲データのスプライト】
「楽曲データ」スプライトはプログラム専用なのでコスチュームはありません。
【ステージ】
以前の記事を参照してください↓↓↓(※リンクをクリックすると対象の文章まで飛びます)
【Scratch 3.0】音楽 音ゲーの作り方①【ノートの生成とキーイベント】(Tips)
使用した音源
キー押下時の効果音
以前の記事を参照してください↓↓↓(※リンクをクリックすると対象の文章まで飛びます)
【Scratch 3.0】音楽 音ゲーの作り方①【ノートの生成とキーイベント】(Tips)
ライセンスフリーのクラシック音源
今回使用している音源は『パッヘルベルのカノン』です。
以下のサイトよりmp3ファイルをダウンロードしてScratchアップロードして使っています。こちらのサイトの楽曲は、ライセンスフリーなので無料で許諾なし(商用可)で利用できます。
クラシック名曲サウンドライブラリー(http://andotowa.quu.cc/)
完成したスクリプト
完成したスクリプトの全体です。
これまで「音ゲー」シリーズの記事内容と変更がないスクリプトは記載していませんので、それぞれ過去の記事を参照してください。
【D/F/J/Kノートのスクリプト】
前回までの内容で完成しているので省略します。
【DFJKキー押下のスクリプト】
前回までの内容で完成しているので省略します。
【判定ラインのスクリプト】
前回までの内容で完成しているので省略します。
【ノート生成のスクリプト】
- D要素番号:すべてのスプライト用
- F要素番号:すべてのスプライト用
- J要素番号:すべてのスプライト用
- K要素番号:すべてのスプライト用
- 楽曲データ:すべてのスプライト用
【エフェクト1/2/3のスクリプト】
前回までの内容で完成しているので省略します。
【楽曲データのスクリプト】
- 曲名:すべてのスプライト用
- 今何拍目?:すべてのスプライト用
- BPM:すべてのスプライト用
【ステージのスクリプト】
前回までの内容で完成しているので省略します。
スクリプトの作り方
ここからはプログラムを作っていく中でポイントとなる部分を説明します。
ポイント①:音楽ファイルのBPMと曲の長さ(秒)を把握する
曲の長さ(秒)
曲の長さ(秒)を調べるには、mp3形式かwav形式の音楽ファイル(*.mp3, *.wav)をScratchにアップロードすると自動的に表示されるのでその値を使用します。下の例でいうと252.63秒です。
BPM(1分間の拍数)
BPMは1分間にいくつ拍を鳴らすかという音楽のテンポ(速さ)を表す指標です。数値が大きければ速い曲に、小さければ遅い曲になります。
その楽曲のBPMを把握するにはメトロノームを使って実際の音楽を聴いて、一番リズムがピッタリ合うBPM数を自分の耳で聴いて感じ取る必要があります。
最初は慣れないかもしれませんが、私のような素人でもずっと聴いていると一致するテンポが分かるようになります。今回用意した「カノン」ではBPM=90がちょうど良いテンポでした。
メトロノームは、PC用でもスマホ用でも無料のアプリがたくさんあるので好みのアプリをインストールして使ってください。
ポイント②:ノートの生成タイミングを計算して楽曲データリストをつくる
「楽曲データ」リストに入っているデータを下の図に示します。
リストに格納されている数字は、ゲームスタート直後にタイマーがリセットされてからの経過時間(秒)を表しています。
また、この1つのリストの中に「D・F・J・K」すべてのノートを生成する時間(秒)を格納しています。
たとえば、1番目の要素に入っている文字「D」は、この次の要素からDノートを発生させるということを意味していて326番目の要素にある文字「—」までがDノートの範囲であることを意味しています。
同じように327番目から471番目の要素までがFノートの範囲、472番目から717番目の要素までがJノートの範囲、718番目から最後までがKノートの範囲になっています。
そして、この細かい時間(秒)の計算は以下の式によって算出しています。
\(1拍あたりの時間[秒]=60[秒]\divテンポ[bpm]\)
\(ノート生成時間[秒]=(初回ノートを発生させる拍数[拍]+ステップ[拍])*1拍あたりの時間[秒]-1(秒)\)
※\(ステップはノートを何拍ずつスキップさせるかを表します。ただし各ノートの初期値は0。\)
上図の楽曲データリストの「D」ノートの例で実際に計算してみると以下のようになります。
・\(1拍あたりの時間[秒]=60\div90=0.666666…\)
・\(ノート生成時間[秒]=(17+0)*0.666666-1≒10.333322\) ←2番目の要素に該当
・\(ノート生成時間[秒]=(17+2)*0.666666-1≒11.666654\) ←3番目の要素に該当
単調なゲームにならないようにFノートのときは、初回ノートを発生させる拍数を24に、ステップを3に変えたりするなどして変化を持たせるようにいます。
ここで重要なのは「-1秒」としている部分です。以前の記事で説明しましたが、ノートがステージの上端から現れて、赤い判定ラインまで移動するのにピッタリ1秒かかるようにプログラムを組んでいるので、計算で得られたノート生成時間から1秒早く表示する必要があるため「-1秒」が必要になっています。
このリストの値を変えれば、ノートを発生させるタイミングを変えることができるので好みに合わせてカスタマイズすると良いと思います。
ポイント③:楽曲データリストに合わせてノートを生成する
「楽曲データ」リストにそれぞれのノートの発生タイミングが時間(秒)として値を格納することができたら、それらを次々と読み出してノートのクローンを発生させます。
ここではタイマーを使って生成タイミングを計っているので、ゲームがスタートしたらすぐにタイマーをリセットします。
リストから読み出すにあたって、「Dノート」はリストの文字「D」の次の要素から読み取り始め、「ノート」はリストの文字「F」の次の要素から読み取り始める必要があります。「Jノート」と「Kノート」も同様です。
要素を順番に読み取りますが、読み取った時間とタイマーの時間を比較して、タイマーの数字が読み取った時間よりも大きくなった瞬間にノートのクローンを作成します。
作成したクローンを判定ラインまで動かすスクリプトについては、以前の記事で解説済みですのでここでは省略します。
ここまでのポイントを押さえれば、音楽のリズムに合わせてノートを生成するためのスクリプトを完成させることができると思います。
失敗しやすいポイント
失敗しやすいポイントはありません。
応用編
今回応用編は特にありません。
まとめ
さいごに、今回の記事で説明した『音ゲーの音楽のリズムに合わせてノートを生成するプログラミング』のポイントをまとめます。
- ポイント①:音楽ファイルのBPMと曲の長さ(秒)を把握する(BPMは実際の曲とメトロノームアプリを使用)
- ポイント②:ノートの生成タイミングを計算して楽曲データリストをつくる(計算した時間からノートの移動時間を引く)
- ポイント③:楽曲データリストに合わせてノートを生成する
音ゲーはタイミングが命なので、このプログラムを仕上げるのには結構苦労しました。最初は音符が読めない???BPMの意味が分からん???という状態から始めたので、音楽理論の初歩中の初歩から勉強しました。そういった基礎知識についても必要最小限に絞って解説に加えるようにしています。
次回は、楽曲データリストを自動生成するプログラムについて紹介します。
どうでしたか?上手く再現できたでしょうか?
他にも役に立つTips(ティップス)記事をたくさん書いてますので、ぜひ見てみてください。(記事のタイトルに「Tips」と書いていたり「Tips」タグを貼ってあります)