これは何
先日、弊社で行った出張授業(中学校)で題材としてScratchを使用しました。今回はScratchの理解を深めるための一環として、ジングルベルを演奏してみました。
※プログラム経験のある方を前提として書いているので、ある程度の動きの解説は省いています。プロミング経験がない方でもなんとなくやっていることが理解できるかもしれません。
記事の最後に、実際のプロジェクトを公開しているので、まずはじめに演奏を聴きたい方は、最後までスクロールしてください!
Scratchとは?
Scratchは、世界最大の子ども向けコーディングコミュニティーで、若者がデジタルな物語、ゲーム、アニメーションを作るために使っている、シンプルなビジュアルインターフェースを持ったコーディング言語です。Scratchは非営利団体Scratch財団によって設計、開発、維持されています。
引用:Scratchについて
上記にありますが、ビジュアルインターフェースでプログラムが書けるので、プログラムの勉強の第一歩に向いています。
Scratch の準備
特に準備は必要なく、ブラウザ上で簡単に作成を始めることができます。
https://scratch.mit.edu/
音楽ライブラリの追加
まずはじめに演奏系の処理は、拡張機能となるため、プロジェクト画面の左下のボタンを押し、拡張機能の中から音楽
を選択します。その後、プロジェクト画面の左のツールバーに音楽
が追加されます。
主旋律を作る
ここはプログラミングというよりは、音楽の知識と気合が必要です。
ジングルベルは最小でも八分音符単位の刻みでなんとかなりそうだったので、拍数に関しては、0.25の倍数をもとにひたすらに主旋律を入れていきます。
※音符の番号に関しては、タップするとキーボードが表示されます。
追加したものがこちら↓
スクショの都合上、分割しないと表示しきれなかったため、ブロック定義(処理を一まとめにできる)というものを使って、オルガン前半
とオルガン後半
を分けています。
その他の部分に関してはなんとなく見ていただければ処理の流れが理解できるかと思います。
ドラムを作る
オルガンだけでは少し寂しい気がしたので、ドラムも追加していきます。
ここも気合が必要ですが、繰り返しが使えたので、主旋律よりは楽でした。
同時に鳴らすために
ここで問題となってくるのが、音を同時に鳴らすためにはどうしたらいいかです。
調べてみたところ、メッセージという機能を使うことで、同時に処理を始めることができそうなので、改修します。
やや複雑になってきましたが、演奏開始
というメッセージを受けて、それぞれのブロック定義関数が同時に演奏されていきます。
※バスドラムやスネアドラムの音が大きかったので、調整をしています。
同期をとる
同時に音が鳴らせるようなりましたが、実行時のマシン負荷によって徐々に音がずれていく問題が発生。なので1小節ごとに同期をとるように修正します。
幸いにも 〇〇まで待つ
という処理があったので、各楽器ごとに変数を持って1小節ごとにインクリメントします。もしズレが発生しているようであれば、一番遅れている楽器が次の小節始めまで、他の楽器を待つという感じにします。
最後に
一つ一つの処理についてはプログラムをやったことがある人にとっては、少し簡単かもしれません。ですが、同期処理などを考え出すと意外と難しく、難解なパズルをやっているようで楽しかったです。
今回の同期処理はなんちゃって感があるので、時間があれば、もう少し美しい実装ができるように頑張ってみたいと思います。
実際のプロジェクトも公開しているので、ぜひ下記からジングルベルを聞いてみてください!
https://scratch.mit.edu/projects/765521817
メリークリスマス♪