プログラミングドリル

【スクラッチ】ピアノの鍵盤で楽器の音を出してみよう①

Scratch先生
Scratch先生

こんにちは、みなさん!
Scratch先生です。
今回は、スクラッチでピアノの鍵盤で楽器の音を出してみましょう!

プログラムの中身だけ知りたい人は、下をクリックしてね。

プログラムを確認する ⇩

今回、プログラミングに挑戦するピアノの鍵盤で楽器を音をだす作品は、こちらです。

プログラミングレベル★☆☆

緑の旗をクリックして、「A~K」キーを押すと「ドレミファソラシド」の音が鳴り、左右矢印キーを押すと楽器を変えることができます。

  • 「A」キー・・・ド
  • 「S」キー・・・レ
  • 「D」キー・・・ミ
  • 「F」キー・・・ファ
  • 「G」キー・・・ソ
  • 「H」キー・・・ラ
  • 「J」キー・・・シ
  • 「K」キー・・・ド
  • 「右向き矢印」キー・・・次の楽器に変わる
  • 「左向き矢印」キー・・・前の楽器に変わる

ピアノの鍵盤で楽器を音をだすプログラミング方法は、いくつもありますが、今回紹介する方法は、その中の1つに過ぎません。

新しい機能を追加しても全然OKなので、自分なりに考えてプログラミングを楽しみましょう!

スポンサーリンク

素材をリミックス

まずは、ピアノの鍵盤の素材をコピーします。

下のピアノの鍵盤の素材を置いてあるページを開いて、リミックスしましょう。

ピアノの鍵盤の素材ページを見る >>

素材の確認

リミックスしたら、素材を確認しましょう。

こちらには、「鍵盤」のスプライトが1つあります。

プログラム(初期設定)

スプライト「鍵盤」のスクリプトエリアを確認すると、初期設定のプログラムがあります。

初期設定では、「x座標を〇、y座標を〇にする」ブロックで、スプライトの初期位置が設定されています。

また、トリガーとして「緑の旗が押されたとき」ブロックを使っています。

この初期設定は、スプライトを間違って動かした場合でも、緑の旗をクリックすると、最初の位置へ戻ります。

拡張機能の「音楽」ブロック群

今回、ピアノの鍵盤で、楽器の音を出すプログラムを作りますが、拡張機能の「音楽」ブロック群を使います。

スクラッチの拡張機能とは、新しいブロック群を追加する機能で、自分で開発して機能を追加することもできます。

スクラッチで用意されている拡張機能は、こちらの11個です。

  • 音楽
  • ペン
  • ビデオモーションセンサー
  • 音声合成
  • 翻訳
  • Makey Makey
  • micro:bit
  • LEGO MINDSTORMS EV3
  • LEGO BOOST
  • LEGO Education WeDo 2.0
  • GO Direct Force & Acceleration

この中の、「音楽」ブロック群を使って、楽器の音を出します。

拡張機能の追加方法

拡張機能の「音楽」ブロック群を追加するには、左下の「拡張機能を追加」ボタンをクリックします。

「拡張機能を選ぶ」画面が現れるので、左上の「音楽」をクリックします。

すると、拡張機能の「音楽」ブロック群が追加されます。

 

今回プログラミングで使うブロックは、「〇の音符を〇拍鳴らす」ブロックと「楽器を〇にする」ブロックです。

「〇の音符を〇拍鳴らす」ブロック

「〇の音符を〇拍鳴らす」ブロックは、指定した音を指定された拍数で鳴らすブロックです。

1番目の〇をクリックすると、ピアノの鍵盤が現れて、白鍵・黒鍵をクリックすると、その音の番号が設定されます。

2番目の〇は「拍」つまり、一定のリズムの感覚を設定できます。

イメージできない人は、こちらのプログラムを作って、2つを比べてみましょう。

「0.25」拍に比べると、「1」拍のほうが、一定のリズムを刻むスピードが遅く感じるはずです。

今回の鍵盤の音では、「0.25」拍で設定していきます。

「楽器を〇にする」ブロック

「楽器を〇にする」ブロックは、指定した楽器の音を出すブロックです。

▼をクリックすると、ドロップダウンリストが現れ、楽器を選択することができます。

  • (1)ピアノ
  • (2)電子ピアノ
  • (3)オルガン
  • (4)ギター
  • (5)エレキギター
  • (6)ベース
  • (7)ピチカート
  • (8)チェロ
  • (9)トロンボーン
  • (10)クラリネット
  • (11)サクソフォーン
  • (12)フルート
  • (13)木管フルート
  • (14)バスーン
  • (15)合唱団
  • (16)ビブラフォン
  • (17)ミュージックボックス
  • (18)スチールドラム
  • (19)マリンバ
  • (20)シンセリード
  • (21)シンセパッド

ピアノで「ド」の音を出すプログラムを考える

まずは、ピアノで「ド」の音を出すプログラムを考えてみましょう。

ピアノで「ド」の音を出すプログラムの処理を文章であらわすとこのようになります。

「A」キーを押したなら、ピアノの「ド」の音を出す

「なら」という言葉は、あのブロックでしたよね。

プログラミングチャレンジ1
Scratch先生
Scratch先生

Scratch先生から子供たちへの挑戦状です!

クリアできるかな?

『「A」キーを押したなら、ピアノの「ド」の音を出す』プログラミングに挑戦してみましょう!

「A」キーを押されたか知るには、「調べる」ブロック群の「〇キーが押された」ブロックを使います。

「〇キーが押された」ブロックは、指定したキーが押されたときに「真(true)」になって、押されていないときは「偽(false)」になるブロックでしたよね。
プログラムの流れをイメージしながら、考えてみましょう!

『「A」キーを押したなら、ピアノの「ド」の音を出す』プログラミングはできましたか?

まず、今回音を出す楽器は「ピアノ」ですので、「楽器を〇にする」ブロックで「ピアノ」を選択します。

「A」キーを押したなら、ピアノの「ド」の音を出す

「もし◇なら」のように「もし」「なら」の言葉がでてきたら、「分岐処理」でしたよね。

今回は、特定のキーを押したときに処理をするので、「もし◇なら」ブロックを使います。

「もし◇なら」ブロックの◇の条件は、「A」キーが押されたかどうかなので、「〇キーが押された」ブロックで「a」を選択して、◇に入れます。

キー(大文字) キー(小文字) 音番号
A a 60
S s 62
D d 64
F f ファ 65
G g 67
H h 69
J j 71
K k 72

キーボードは、アルファベットの大文字で書かれていますが、「〇キーが押された」ブロックは小文字で書かれています。

よく使うブロックですので、大文字と小文字のアルファベットは、覚えておきましょう。

「A」キーを押したときに、「ド」の音を出すので、「もし◇なら」ブロックの中に、「ド(60)」を指定した「〇の音符を〇拍鳴らす」ブロックを入れます。

さて、これで『「A」キーを押したなら、ピアノの「ド」の音を出す』プログラムができましたが、これで問題ないでしょうか?

こちらのプログラムの流れをイメージして、何か問題がないか考えてみましょう。

プログラムの流れをイメージできましたか?

こちらのプログラムの流れは、このようになります。

プログラムの処理のスピードは、めちゃくちゃ速いので、緑の旗がクリックした瞬間に、プログラムが終了してしまいます。

そのため、プログラムを終了させずに、「A」キーが押されたかどうか、ずっとチェックしなければいけません。

「ずっと」と言えば、「ずっと」ブロックですよね。

「ずっと」ブロックの中に、チェックするブロックを入れると、常に「A」キーが押されたかどうかチェックするプログラムが完成です。

プログラムの流れを見ると、何度も繰り返して「A」キーが押されたかどうか、チェックしているのが変わりますよね。

こちらのプログラムで、緑の旗をクリックしてから、「A」キーを押して「ド」のピアノの音が出るか確認しましょう。

キーが押されたかチェックするプログラム

(画像をクリックすると大きくなります。)

こちらは、キーが押されたかチェックするプログラムの基本の形です。

共通していることは、「ずっと」ブロックで、常にチェックしていることです。

何かをチェックする場合は、常にプログラムが動いた状態でなければいけませんので、『チェック=「ずっと」ブロックを使う』と覚えておきましょう。

ピアノで「レミファソラシド」の音を出すプログラムを考える

「A」キーを押して「ド」のピアノの音が出るか確認できましたか?

プログラミングチャレンジ2
Scratch先生
Scratch先生

早速、プログラミングチャレンジ!

Scratch先生から子供たちへの挑戦状です!

クリアできるかな?

それぞれのキーを押して、残りの「レミファソラシド」の音を出すプログラミングに挑戦してみましょう!

キー(大文字) キー(小文字) 音階 音階番号
A a 60
S s 62
D d 64
F f ファ 65
G g 67
H h 69
J j 71
K k 72

残りの「レミファソラシド」の音を出すプログラミングはできましたか?

「A」キーを押したときと同じプログラムを追加していくだけなので、簡単だったかな?

(画像をクリックすると大きくなります。)

こちらが、スプライト「鍵盤」のプログラムです。

「楽器を〇にする」ブロックの▼をクリックして、他の楽器の音も確認してみましょう。

左右矢印キーを押して楽器を変えるプログラムを考える

  • 「A」キー・・・ド
  • 「S」キー・・・レ
  • 「D」キー・・・ミ
  • 「F」キー・・・ファ
  • 「G」キー・・・ソ
  • 「H」キー・・・ラ
  • 「J」キー・・・シ
  • 「K」キー・・・ド
  • 「右向き矢印」キー・・・次の楽器に変わる
  • 「左向き矢印」キー・・・前の楽器に変わる

次に、左右矢印キーを押して楽器を変えるプログラムを考えます。

「右向き矢印」キーを押したら、次の楽器に変わるというのは、「1→2→3→4」の順に楽器が変わるということです。

「左向き矢印」キーを押したら、前の楽器に変わるというのは、先ほどとは逆で、「4→3→2→1」の順に楽器が変わるということです。

楽器を変える場合は、▼をクリックしてから楽器を選択するので、プログラムの実行中には、選択できないですよね。

そんなときは、「変数」を使って、プログラムの実行中に楽器の種類を変えます。

実は、「楽器を〇にする」ブロックの〇には、値ブロックを入れることができます。

こちらの例では、変数「がっきの番号」の値ブロックを「楽器を〇にする」ブロックの〇に入れています。

変数「がっきの番号」の値は「2」ですので、2番目の「電子ピアノ」を選択したということです。

また、楽器の種類は21種類で、変数「がっきの番号」の値が「22」の場合は、一周回って、「1」のピアノが選択されます。

逆に、変数「がっきの番号」の値が「0」の場合は、反対周りに一周回って、「21」のシンセパッドが選択されます。

  • (1)ピアノ・・・・・・・・・・・…「-20」「1」「22」…
  • (2)電子ピアノ・・・・・・・・・…「-19」「2」「23」…
  • (3)オルガン・・・・・・・・・・…「-18」「3」「24」…
  • (4)ギター・・・・・・・・・・・…「-17」「4」「25」…
  • (5)エレキギター・・・・・・・・…「-16」「5」「26」…
  • (6)ベース・・・・・・・・・・・…「-15」「6」「27」…
  • (7)ピチカート・・・・・・・・・…「-14」「7」「28」…
  • (8)チェロ・・・・・・・・・・・…「-13」「8」「29」…
  • (9)トロンボーン・・・・・・・・…「-12」「9」「30」…
  • (10)クラリネット・・・・・・・…「-11」「10」「31」…
  • (11)サクソフォーン・・・・・・…「-10」「11」「32」…
  • (12)フルート・・・・・・・・・…「-9」「12」「33」…
  • (13)木管フルート・・・・・・・…「-8」「13」「34」…
  • (14)バスーン・・・・・・・・・…「-7」「14」「35」…
  • (15)合唱団・・・・・・・・・・…「-6」「15」「36」…
  • (16)ビブラフォン・・・・・・・…「-5」「16」「37」…
  • (17)ミュージックボックス・・・…「-4」「17」「38」…
  • (18)スチールドラム・・・・・・…「-3」「18」「39」…
  • (19)マリンバ・・・・・・・・・…「-2」「19」「40」…
  • (20)シンセリード・・・・・・・…「-1」「20」「41」…
  • (21)シンセパッド・・・・・・・…「0」「21」「42」…

このように、「楽器を〇にする」ブロックは、数値で設定することができます。

ちなみに、ちゃんと変数の使い方覚えていますか?

「スクラッチでプログラミング013|歩くプログラムを考える⑤」で変数の使い方を紹介しましたよね。

忘れた子は、もう一度確認しましょう。

プログラミングチャレンジ3
Scratch先生
Scratch先生

Scratch先生から子供たちへの挑戦状です!

クリアできるかな?

左右矢印キーを押して楽器を変えるプログラムを作りましょう!

プログラムの流れをイメージして、プログラミングに挑戦してください!

「左右矢印キーを押して楽器を変える」プログラミングはできましたか?

まずは、変数「がっきの番号」を作りましょう。

変数を作ったら、お決まりのパターンがありましたよね。

まずは、トリガーのすぐ下の初期設定で、「変数を〇にする」ブロックを使って値を設定します。

「楽器を〇にする」ブロックで、『1』のピアノを選択しているので、変数「がっきの番号」も『1』を設定しましょう。

次に、こちらが「左右矢印キーを押して楽器を変える」プログラムです。

「右向き矢印」キーが押されたときは、変数「がっきの番号」の値が「1」ずつ増えていきます。(1→2→3→4→5→6)

「左向き矢印」キーが押されたときは、変数「がっきの番号」の値が「-1」ずつ、つまり「1」ずつ減っていきます。(5→4→3→2→1)

そして、どちらも「楽器を〇にする」ブロックの〇に変数「がっきの番号」の値ブロックを設定しているので、変数の数値が変われば、楽器も変わります。

あとは、このプログラムを『もし「K」キーが押されたなら・・・』ブロックの下にくっつければ完成です。

これで、プログラムの動きを確認してみましょう。

(▶をクリックして動画を確認してね)

プログラムを実行して、左右矢印キーを押すと、たしかに楽器が変わりますが、変数「がっきの番号」がすごい数値になっていますよね。

このように数値が大きく変化するのは、なぜでしょうか?

少し考えてみましょう!

変数「がっきの番号」の数値が、なぜ大きく変化するのか分かりましたか?

プログラムの処理のスピードは、めちゃくちゃ速かったですよね。

大きく変化したのは、キーを押している瞬間に、何度も繰り返し処理されたからです。

では、どのように対策すれば、問題を解決できるでしょうか?

考えてみましょう。

何か思いつきましたか?

プログラムの処理のスピードが速いのであれば、クリックが終わるまで、処理を少し待つようにしたらどうでしょうか?

処理を少し待つブロックありましたよね。

処理を止めるのは、「〇秒待つ」ブロックでした。

「〇秒待つ」ブロックの〇に「0.2」秒設定して、プログラムを実行してみてください。

今度は、左右矢印キーを押すたびに、「1」ずつ増えたり減ったりしますよね。

ただ、左右矢印キーを長押しすると、数値がどんどん変化していきます。

確実に「1」ずつ増減させるには、「◇まで待つ」ブロックを使います。

「◇まで待つ」ブロックは、◇の条件を満たすまで、条件のチェックを繰り返すブロックです。

つまり、◇の条件が「真(true)」になるまで、次の処理に進みません。

「◇まで待つ」ブロックのプログラムの流れは、このようなイメージです。

(画像をクリックすると大きくなります。)

こちらが、対策したプログラムとプログラムの流れです。

まずは、条件①の「右向き矢印」キーが押されたら、「真(true)」を返すので、「条件①を満たしたときの処理」へ進みます。

「条件①を満たしたときの処理」では、「楽器を〇にする」ブロックで楽器を変えます。

そして、条件②が「真(true)」になるまで、次の処理に進みません。

条件②は、『「右向き矢印」キーが押されたではない』つまり、『「右向き矢印」キーが押されていない状態』になったら「真(true)」を返すという意味です。

逆の言い方をすると、「右向き矢印」キーが押された状態では、ずっと「偽(false)」を返して、次の処理に進まないため、「右向き矢印」キーを長押ししても、変数「がっきの番号」が増減し続けることはありません。

ちなみに、「◇ではない」ブロックは、◇の条件が「真(true)」のときは「偽(false)」を、◇の条件が「偽(false)」のときは「真(true)」を返すブロックです。

反対の条件にしたいときは、「◇ではない」ブロックをよく使うので、覚えておきましょう。

「左向き矢印」キーも対策したら、プログラムを確認してみましょう。

左右矢印キーを長押ししても、変数「がっきの番号」は増減し続けません。

ただ、同じような問題が「A~K」キーでもあります。

今のプログラムでは、「A」キーを長押しすると「ド」「ド」「ド」とピアノの音が出ますよね。

こちらも出ないようにするには、「◇まで待つ」ブロックを使いますが、ある場所に置けば、「◇まで待つ」ブロックを1つだけで済みます。

ちなみに、「〇キーが押された」ブロックでは、どのキーにも当てはまる「どれかの」という項目があります。

「どれかの」を選択すると、どのキーが押された場合でも「真(true)」を返します。

さて、どこに置けば、すべてのキーで長押しを無効にできるでしょうか?

プログラムの流れを考えれば、分かるはずです。

考えてみましょう!

どこに置けばいいか分かりましたか?

(画像をクリックすると大きくなります。)

正解は、「ずっと」ブロックの中の一番下にブロックを置くでした。

すべてのキーをチェックした最後に、どのキーも押されていないかをチェックします。

キーの連続処理と単発処理

今回の「ピアノの鍵盤で楽器の音を出す」プログラムでは、長押しを無効した単発処理でプログラミングしましたが、連続処理が必要なプログラムもあります。

例えば、シューティングゲームの弾の連射です。

(▶をクリックして動画を確認してね)

こちらは、赤のネコには「弾の連続処理」で、青のネコには「弾の単発処理」でプログラミングしています。

どちらの弾の出し方にするかは、どういったゲームを作るかで決まってきます。

(画像をクリックすると大きくなります。)

こちらが、キーの連続処理と単発処理のプログラムの基本の形です。

(画像をクリックすると大きくなります。)

キーだけでなく、マウスでクリックするときも、同じようなプログラムの形で利用します。

キーやマウスクリックの連続処理と単発処理は、よく使うプログラムですので、プログラムの基本の形を覚えておきましょう。

まとめ

Scratch先生
Scratch先生

スクラッチでピアノの鍵盤で楽器の音を出すプログラミング方法は、理解できたかな?

「ピアノの鍵盤で楽器の音を出してみよう①」では、キーを使って音を出したり楽器を変えるプログラムを作っていきました。

完成したプログラムの中身を見たい人は、こちらから確認してください。

プログラムを確認する  >

実は、今回のピアノのプログラムで、1つ欠点があります。

何か気づきましたか?

その欠点は、2つの音を同時に出せないことです。

ピアノをいくつかの白鍵(黒鍵)を同時に叩くと、叩いた音が同時に出ますよね?

今回のピアノのプログラムでは、それができません。

理由は、すべてのチェックを1つのプログラムの中で完結させたからです。

複数の音を同時に出すには、それぞれのチェックが独立した「並列処理」というものにする必要があります。

ピアノの鍵盤で楽器の音を出すプログラムができた子は、次の「ピアノの鍵盤で楽器の音を出してみよう②」へ進みましょう!


【Step5】「キー」「マウスクリック」のプログラムに挑戦!

【Step4】歩くプログラムに挑戦!

【Step3】スクラッチとプログラミングの基本知識

【Step1・Step2】スクラッチアカウント作成とログイン方法

ピアノの鍵盤で楽器の音を出すプログラム

ピアノの鍵盤で楽器の音を出すプログラムは、キーボードのキーを使って、音を出したり、楽器を変えたりしています。

  • 「A」キー・・・ド
  • 「S」キー・・・レ
  • 「D」キー・・・ミ
  • 「F」キー・・・ファ
  • 「G」キー・・・ソ
  • 「H」キー・・・ラ
  • 「J」キー・・・シ
  • 「K」キー・・・ド
  • 「右向き矢印」キー・・・次の楽器に変わる
  • 「左向き矢印」キー・・・前の楽器に変わる

(画像をクリックすると大きくなります。)

こちらが、スプライト「鍵盤」のプログラムの内容です。

詳しい説明が必要な方は、最初に戻って読み進めてください。