IT技術 育児

小学プログラミング:Scratchで音楽を作って並列処理を覚えよう

IT技術

Scratchでは音楽をつくることができます。
作り方は簡単なのですが、譜面を扱えなのでちょっと作りにくいのが難点です。
しかし、小学校の授業でも扱うテーマのようなので解説をしておきたいと思います。
それともう一つ、並列処理という技術を覚えてみましょう。

Scratchで音楽を作る

音楽コード(部品)を用意しよう

Scratchで音楽を作るには「音楽」のコードを用意します。
これはオプションになっています。

左下の拡張機能ボタンを押します。

拡張機能を選ぶ画面で「音楽」を押します。

すると音楽用の部品が使えるようになります。

音楽部品の使い方

音楽を作るために使う部品について少し説明しておきましょう。
一つずつ説明していきます。

〇のドラムを〇拍鳴らす

打楽器系の楽器をどれだけの時間鳴らすかを決める部品です。
このイメージではスネアドラムを0.25拍鳴らすとあります。
「スネアドラム」は楽器の名前ですね。
色々な打楽器系から選ぶことができます。
Scratchでは打楽器に音階を付けることはできないようです。

もう一つ解説しておきたいのが0.25拍のところです。

Scratchの〇拍について

Scratchでは音を鳴らす時間を拍数とテンポで決めます。
譜面の表現と一緒ですね。
ただし、拍数を数値で表現します。
四分音符

を1として基準の長さになります。
八分音符

ならその半分なので0.5と表現します。

〇拍休む

休符のことです。

長さは1を四分音符と同じ長さとしています。

〇の音符を〇拍鳴らす

この部品がドレミファソラシドの音を鳴らす部品です。
ただ、少し難しいのは音階を数字で表しているのです。
Midiのようなコンピュータミュージックをやっていると馴染みがあるのですがわかりにくいですね。
ただ、数字のところを押すと鍵盤が表示されるので数字を覚える必要はないです。

ド(C) ⇒ 60
ド#(C#) ⇒ 61
レ(D) ⇒ 62
・・・
といった具合に鍵盤の左から順に番号が振られています。

〇拍鳴らすは音の長さです。
四分音符の場合は1と表現します。

八分音符は0.5になります。

楽器を〇にする

鳴らす楽器の音を変えることができます。
演奏が始まる前に必ず配置するようにしましょう。

テンポを〇にする

曲のスピードを決めます。
1分間に四分音符を何個鳴らせるスピードで演奏するかという数字です。
これはプログラミングの特別な仕組みではなく、一般的な譜面の読み方と同じです。

テンポを〇ずつ変える

「テンポを〇にする」の部品で指定したテンポに対して、早くしたり遅くしたりします。
20を指定するとテンポを20早くします。
-20を指定するとテンポを20遅くします。
「ずつ」というのが気になる表現ですが・・・気にしないでいいでしょう。
英語からの翻訳の問題でしょう。

テンポ

今、設定されているテンポの数字を確認できます。
変数などを組み合わせて使います。
手の込んだことをしない限り必要ないかなと思います。

カエルの歌を作ってみよう

これまで説明した部品を使ってカエルの歌を作ってみましょう。
ちなみに、カエルの歌の譜面はこちらです。

これをScratchで入力すると次のようになります。

テンポと楽器はおまけで追加しておきましょう。
あとは譜面をそのままプログラムに置き換えているだけです。

余談:コンピュータミュージックの世界

ちょっとおまけの話をします。
不要なら読み飛ばしてください。

なぜ、こんな面倒なプログラムを作って音楽を作る必要があるのでしょうか。
五線譜に音符を並べて作ったらよいですよね。
それはScratchがプログラミングのお勉強教材だからです。

ただ、Scratchが独自のやり方をしているわけではありません。。
コンピュータミュージックの最もメジャーなMIDIという規格があります。
このMIDIで作る音楽に作りがそっくりです。
MIDIでカエルの歌を作るとこのようになります。

赤枠のデータの列で音階を入力しています。
右側の1:000や480という数字で音の長さを指定しています。
Scratchと同じような感じですね。

とはいえ、これで音楽を作るのは大変です。
普通は五線譜に音符を並べて作ることができます。

五線譜で作った音楽をこのようなコードに変換して演奏しています。

並列処理で輪唱をしてみよう

次は並列処理というのを覚えてみましょう。
並列処理というのは複数のプログラムを同時に実行する機能のことです。
この機能を使うと、カエルの歌を同時に何個か演奏することができます。
そして、演奏開始のタイミングをずらすことで輪唱を作ることができます。

並列処理のイメージを描いてみました。

楽器の演奏に例えると、一人で一つの楽器を演奏しているのが普通のプログラム実行です。
一方、複数人で同時にそれぞれ楽器を演奏しているのが並列処理です。
単独演奏では単音しか鳴らすことしかできませんが、並列処理を使うと和音を鳴らすことができます。
どんな時に役に立つかはちょっと難しいですが、同時に音を鳴らしたい演奏が使いやすいでしょう。

では、カエルの歌で並列処理を使って輪唱をやってみましょう。
使う部品は「メッセージを送る」「メッセージを受け取ったとき」です。

「メッセージを送る」の部品が実行されると、「メッセージを受け取ったとき」の部品に続くプログラムが実行されます。
「メッセージを受け取ったとき」は複数配置できます。

これで輪唱を作ってみます。

「メッセージ1を送る」が実行されると、赤矢印と青矢印のルートの「メッセージ1を受け取ったとき」が実行されます。
その下に続くカエルの歌が演奏されます。
輪唱にするために青矢印の演奏には「8拍休む」を追加して遅れて演奏されるようにしています。

応用編

もう少し格好いいプログラムにしてみます。
ブロック定義という部品を使っています。
説明は別の機会にしたいと思います。
どんな仕組みになっているか考えてみてください。

並列処理の注意事項

少し難しい話になるので、わからなくても問題ありません。
並列処理はプログラムを同時に実行します。
しかし、並列で実行されているプログラムは足並みをそろえて実行されているわけではありません。
カエルの歌の輪唱で赤と青の演奏タイミングがずれてしまい、うまく輪唱にならないこともあります。
これはパソコンの負荷状態など原因は様々です。

コメント

タイトルとURLをコピーしました