前回はWeb Audio APIで音を出してみましたが、今回はこれをつかって「猫踏んじゃった」を自動演奏させてみることにします。

楽譜はここを参考にしました:【ドレミ付きあり無料楽譜】童謡_ねこふんじゃった 難易度別4楽譜 – ピアノ塾

HTML部分

HTML部分を示します。

style.css

グローバル変数と定数

グローバル変数と定数を示します。

音と周波数で連想配列を定義します。c4が普通の「ド」です。存在しない音(ミとファ、シとドの間は半音なのでここには黒鍵は存在しない)の部分も鍵盤の配置の都合上いれておきます。

ページが読み込まれたときの処理

ページが読み込まれたら鍵盤を生成するとともに、レンジスライダーでボリューム変更ができるようにします。

鍵盤を生成する処理を示します。鍵盤はボタン要素としますが、前回のようにHTMLに直書きしないでこの関数内で動的に生成します。

getName関数は音名(id)から階名を取得します。

レンジスライダーでボリュームの調整ができるようにする処理を示します。

鍵盤が押下されたら音を鳴らす

鍵盤が押下されたら音を鳴らします。

鍵盤が離されたら音を止めます。

playFromHz関数は引数で指定された周波数の音を鳴らします。

自動演奏をする

playTime関数は音名と拍数を指定すると、その間だけ音を鳴らします。

「猫踏んじゃった」の楽譜を探してみたら、ここにあったのでここから拝借します。

【ドレミ付きあり無料楽譜】童謡_ねこふんじゃった 難易度別4楽譜 – ピアノ塾

音名と拍数で配列をつくります。空文字の場合は休止です。

自動演奏をするときはawaitしながらループを回します。途中でstopingがtrueになったら演奏中止です。

ストップボタンが押下されたらstopingフラグをセットします。

東京フレンドパークのフール・オン・ザ・ヒルのようなゲームをつくる

『関口宏の東京フレンドパークII』は、1994年4月11日から2011年3月28日まで、TBS系列で毎週放送されたゲームバラエティ番組です。

フール・オン・ザ・ヒルは演奏者と解答者に分かれ、演奏者はヘッドホンで主旋律を聴きながら、ドラムを模したパッドの光るタイミングと位置と順番を覚えます。そのあと演奏者が覚えた通りに光ったパッドをたたいて主旋律を演奏するのですが、光っていないときに叩くと音は鳴りません。パッドの配置は頭の部分に左右2個ずつ、正面に6個、足で蹴る部分に3個の計13個。演奏を聴いた解答者が曲名を当てるというものです。

これを鍵盤をつかってやろうというわけです。

HTMLは上記のものをそのまま使います。JavaScript部分を加筆します。

changeColor関数は指定された音名の鍵盤を指定された拍数だけ色を変えます。

ストップボタンが押下されたら1秒後に鍵盤が赤く変わります。タイミングよく押下すると音がなります。