前回の記事では、マウスでクリックやタップして演奏できるピアノ鍵盤をつくりました。
今回は、前回つくったピアノ鍵盤を使って楽曲を自動演奏する電子ピアノをつくってみたいと思います。
楽曲は以前の記事で紹介したアメリカ民謡の「I’ve Been Working on the Railroad(日本語の曲名:線路は続くよどこまでも)」を使用します。
楽曲を事前にリストに入れておく必要があります。そのやり方についてはこちらの記事を参照してください。↓↓↓
この記事を読んでいただくと、電子ピアノで楽曲を自動演奏するプログラミングの方法が分かります。
完成品
この章の内容をご自身のScratch環境に反映すると、同じ動きを再現することができます。
完成した動き
「緑の旗でスタート」ボタンを押すと『線路は続くよどこまでも』の自動演奏が始まります。
演奏中は鳴っている音の鍵盤の色が赤に変わり、ステージ上に音符が飛び交います。また、「自動演奏中」のロゴが表示され、演奏が終わる「演奏終了」に変わります。
使用したスプライト
スプライトは「鍵盤」「音符」「文字」「ボタン」の4つです。
【鍵盤・音符のスプライト】
「鍵盤」と「音符」のスプライトは前回の記事のものを流用しているので、前回の記事を参照してください。↓↓↓
【Scratch 3.0】音楽 スプライト1個でピアノ鍵盤を作る方法(Tips)
なお、下の『スクリプトの作り方』の章で鍵盤スプライトのコスチュームの説明が出てくるので下の図を参照してください。
【文字のスプライト】
「自動演奏中」という文字のコスチュームと「演奏終了」という文字のコスチュームを用意します。
【ボタンのスプライト】
「演奏開始」と文字を入れたボタンを押す前と押した後の2パターン用意しています。
演奏する楽曲については、事前に「ピアノ音階」リストと「ピアノ拍」リストに登録しておく必要があります。やり方についてはこちらの記事の『スクリプトの作り方』の章を参考にしてください。
完成したスクリプト
完成したスクリプトの全体です。
【鍵盤のスクリプト】
- i:すべてのスプライト用
- 音階:このスプライトのみ
- ピアノ音階:すべてのスプライト用
- ピアノ拍:すべてのスプライト用
【音符のスクリプト】
【文字のスクリプト】
【ボタンのスクリプト】
【ステージのスクリプト】
- i:すべてのスプライト用
- ピアノ音階:すべてのスプライト用
- ピアノ拍:すべてのスプライト用
スクリプトの作り方
ここからはプログラムを作っていく中でポイントとなる部分を説明します。
ポイント①:リストから音符の情報を読み出して音を鳴らす
楽曲(線路は続くよどこまでも)の情報は、「ピアノ音階」リストと「ピアノ拍」リストに入っている状態です。
それぞれのリストの要素1番目から順番に読み出して、「~の音符を~拍鳴らす」ブロックに値をセットすることで音を鳴らしていきます。
なお、「ピアノ音階」リストの値が空白の要素は休符を表しているので、その場合は「ピアノ拍」リストからだけ値を読み出して「~拍休む」ブロックにセットするようにします。
スクリプトの詳しい説明は、同じ形のスクリプトで説明しているのでこちらの記事を参照してください。↓↓↓
【Scratch 3.0】音楽 リストをつかって演奏する方法(線路は続くよどこまでも)(Tips)
ポイント②:鳴っている鍵盤の色を変える
前回の記事で詳しく説明済みの部分なので簡単に説明すると、「音階」変数は「このスプライトのみ」でつくっている(ローカル変数)ため、クローンごとに60~72の別々の値を持っています。(下図参照)
また、変数「i」は「すべてのスプライト用」でつくっていて(グローバル変数)、「ステージ」スプライト側のスクリプトで値が変化しているのを「鍵盤」のスクリプト側で参照して使っています。
「鍵盤を叩く」定義ブロックが鍵盤の色を赤にしたり戻したりするブロックです。この定義ブロックに引数として「ピアノ音階」リストの「i」番目の要素の値を渡しています。
そして「鍵盤を叩く」定義ブロックの中の処理は、引数の音階が空白でない場合で「音階」変数の値を引数の音階の値が一致した場合にコスチュームを赤色(黒鍵2または白鍵2)に変更するようにしています。
上で述べたように「音階」変数は1つ1つのクローンが60~72のいずれかの値を持っています。その値と定義ブロックが引数で受け取った値が一致した場合、たとえば引数で60を受け取ったら「音階」変数に60を持っている鍵盤のコスチュームが赤くなる、という流れでスクリプトが動きます。
それ以外の条件のとき、つまり、引数の音階が空白か、または「音階」変数の値と引数の音階の値が不一致の場合は元のコスチュームに戻すようにしています。
このようにして、音が鳴るのと同時にその音の鍵盤が赤くなる、という仕組みになっています。
ここまでのポイントを押さえれば、電子ピアノで楽曲を自動演奏するためのスクリプトを完成させることができると思います。(今回説明しなかったスクリプトについては、前回の記事で説明済みのためです)
失敗しやすいポイント
失敗しやすいポイントはありません。
応用編
今回は応用編も特にありません。
まとめ
さいごに、今回の記事で説明した『電子ピアノで楽曲を自動演奏するプログラミング』のポイントをまとめます。
- ポイント①:リストから音符の情報を読み出して音を鳴らす
- ポイント②:鳴っている鍵盤の色を変える
前回の記事の内容を理解いただいていれば、今回の内容はその応用みたいな感じなのでそれほど難しくはなかったかと思います。
楽曲リストを増やしたり、楽器の種類を変えてみたりしてみると面白いと思います。
どうでしたか?上手く再現できたでしょうか?
他にも役に立つTips(ティップス)記事をたくさん書いてますので、ぜひ見てみてください。(記事のタイトルに「Tips」と書いていたり「Tips」タグを貼ってあります)