【スクラッチ×ロボット】周波数でドレミを奏でよう!「チューリップ」演奏プログラミング完全ガイド
プログラミング学習において、「音」を扱うことは非常に直感的で楽しいステップです。特に、画面の中だけでなく、実際のロボットから自分がプログラムした通りのメロディが流れてきた時の感動はひとしおです。
本記事では、スクラッチ(Scratch)とプログラミングロボット「クムクム」を使って、BEEP音(ビープ音)の周波数を制御し、童謡「チューリップ」を演奏する方法を解説します。単に音を鳴らすだけでなく、周波数の指定方法、リズムの調整、そしてロボット制御特有の「通信遅延」への対策など、実践的なノウハウを詳しく学んでいきましょう。
1. このチュートリアルで学べること
この動画および本記事を通じて習得できる主なスキルは以下の通りです。
基礎スキル:周波数による音階指定
通常のピアノ鍵盤のような入力ではなく、「周波数(ヘルツ:Hz)」という数値を使って「ド・レ・ミ」を指定する方法を学びます。これはコンピュータが音を生成する仕組みの基礎的な理解につながります。
論理的思考:繰り返し処理(ループ)の活用
「さいた さいた」のように同じフレーズが続く場合、コードをコピー&ペーストするのではなく、「繰り返す」ブロックを使ってプログラムを効率化する方法を実践します。
実践的課題解決:ハードウェア制御のタイミング調整
画面上のキャラクターを動かすのとは異なり、物理的なロボットを制御する際に発生する「通信のタイムラグ」や「音の重なり」をどのように調整するか、試行錯誤のプロセスを体験します。
2. 詳細手順:チューリップを演奏するプログラムの作り方
それでは、実際にスクラッチを使ってプログラムを作成していく手順を詳細に見ていきましょう。
ステップ1:音階と周波数の対応を知る
まず、ロボットに「ドレミ」を歌わせるためには、それぞれの音に対応する周波数を指定する必要があります。動画内で使用されている設定値は以下の通りです。
- ド: 522 Hz
- レ: 586 Hz
- ミ: 654 Hz
- ソ: 784 Hz
スクラッチの「音(周波数)Hz、時間(秒)を指定する」ブロックを使用し、これらの数値を入力していきます。
ステップ2:「さいた」のフレーズを作る
まずは曲の冒頭部分「ド・レ・ミ」を作成します。
「522Hz(ド)」を配置
「586Hz(レ)」を配置
「654Hz(ミ)」を配置
重要なポイント:
音を連続して配置するだけでは、音がくっついて聞こえたり、ロボット側の処理が追いつかなかったりすることがあります。これを防ぐために、各音のブロックの間に「0.5秒待つ」などの制御ブロックを挟み込みます。これにより、一音一音がはっきりと聞こえるようになります。
ステップ3:繰り返しとリズムの調整
「さいた(ドレミ)」というフレーズは2回繰り返されます。ここで「2回繰り返す」ブロックを使用し、コードを短くまとめます。
しかし、実際に再生してみると「さいた・さいた」のつなぎ目が不自然になったり、最後の「た(ミ)」の音が短く感じたりすることがあります。
動画では、フレーズの終わりの音(ミ)の長さを「1秒」に変更することで、曲としてのリズムを整えています。プログラムは単に動けば良いというものではなく、人間の感覚に合わせて微調整する「感性」も重要になる場面です。
ステップ4:後半パート「チューリップの花が」の実装
後半のメロディ「ソ・ミ・レ・ド」「レ・ミ・レ」を作成します。
ここでも同様に周波数を指定し、ブロックをつなげていきます。
・「ソ(784Hz)」→「ミ(654Hz)」→「レ(586Hz)」→「ド(522Hz)」
・「レ(586Hz)」→「ミ(654Hz)」→「レ(586Hz)」
これらのブロック群を作成したら、前半の「さいた」パートと合体させます。これで一通りのプログラムは完成です。
3. ロボットプログラミング特有の注意点と対策
画面上のプログラミングと、ロボットプログラミングの最大の違いは「物理的な制約」と「通信環境」です。動画内でも触れられている重要な注意点を解説します。
通信遅延(レイテンシ)の影響
PC(スクラッチ)からロボットへ指令を送る際、BluetoothやWi-Fiなどの無線通信を使用している場合、どうしてもわずかな「遅延」が発生します。
動画の最後でも言及されていますが、これによりリズムがわずかにもたついたり、意図したタイミングとずれて音が鳴ったりすることがあります。
対策:
厳密なリズムが求められる場合、PC側から一音ずつ命令を送るのではなく、可能であればロボット本体にあらかじめメロディデータを送信して再生させる方式を検討するか、あるいは「待つ」ブロックの秒数を通信遅延分を見越して微調整する(例:0.5秒を0.4秒にするなど)工夫が必要です。
音の重なりと処理落ち
前の音が鳴り終わる前に次の音の命令が届くと、命令が無視されたり、音が重なってノイズのようになったりすることがあります。「待つ」ブロックは、単なる休符としての役割だけでなく、ハードウェアが前の処理を完了するのを待つ「バッファ」としての役割も果たしています。
4. 応用への道:ここからどう発展させる?
「チューリップ」が演奏できたら、次のようなステップアップに挑戦してみましょう。
他の曲への挑戦と「関数(ブロック定義)」の利用
「キラキラ星」や「カエルの歌」など、他の童謡にも挑戦してみましょう。その際、毎回「522Hz」と入力するのは大変です。
スクラッチの「ブロック定義」機能を使い、「ド」というブロックを作って、中身に「522Hzで鳴らす」と定義しておけば、以降は「ド」「レ」「ミ」というブロックを並べるだけで作曲ができるようになります。これはプログラミングにおける「抽象化」の素晴らしい練習になります。
動作との連動(ダンス)
音が鳴るだけでなく、リズムに合わせてロボットの手を上げたり、首を振ったりする動作を追加してみましょう。「音を鳴らす命令」と「動く命令」を並列処理(「緑の旗が押されたとき」を2つ作るなど)で実行することで、歌って踊るロボットプログラムへと進化させることができます。
5. まとめ
今回のチュートリアルでは、スクラッチとロボットを使った音楽プログラミングの基礎を学びました。周波数という数値が音楽に変わる面白さ、そしてハードウェアならではの「遅延」との戦いなど、実践的な学びが多く含まれています。
最初はぎこちない演奏かもしれませんが、秒数や周波数を微調整して、自分だけの完璧な演奏を目指してみてください。この試行錯誤のプロセスこそが、プログラミング的思考を養う最短の近道です。



コメント