【 第17回 】Scratch 2でオルガンを作ろうとしたらスチールパンに!

0
962

前回は、3声の輪唱に和音を付けたオルゴールができたので、今回はPCのキーボードを鍵盤に見立てて、オルガンを作ってみたいと思います。

今回使った部品

  • Raspberry Pi 3 Model B × 1
  • 40Pinフラットリボンケーブル
  • 40Pin T型GPIO拡張ボード
  • ブレットボード × 1
  • マルチメディアスピーカー(セリア) × 2
  • 3.5mmイヤホンジャックアダプター × 2
  • ジャンプワイヤー(オス/オス) × 4

実体配線図

今回、ハードウェアPWMのGPIO12とGPIO13の両方にスピーカーを接続します。スピーカーは前回と同じく3.5mmイヤホンジャックアダプターを介してブレッドボードに接続しますが、モノラルなのでジャンプワイヤーはアダプターの端子3極の内、L,RどちらかとGNDに接続します。

GPIO12とGPIO13の出力モードをハードウェアPWMに設定する

LXTerminalを起動して次のコマンドを実行すると、GPIO12の出力モードがハードウェアPWMに設定されます。

gpio -g mode 12 pwm

続けて次のコマンドを実行すると、GPIO13の出力モードがハードウェアPWMに設定されます。

gpio -g mode 13 pwm

下のコマンドで実行結果を確認します。

gpio readall

BCM列”12”番と”13”番の”Mode”列が、既定の”IN”から拡張機能の”ALT0”に変わっています。GPIO12とGPIO13の場合はハードウェアPWMの”0″チャンネルと”1″チャンネルが割り当てられます。

併せて、タスクバー右のスピーカーアイコンを右クリックし、オーディオ出力先として「Analog」を選択しておきます。

キーボードに割り当てる音を確認する

カテゴリー「音」のブロック「楽器を1▼にする」をスクリプトエリアに引き出します。

カテゴリー「音」のブロック「60▼の音符を0.5拍鳴らす」をその下に繋げます。

カテゴリー「イベント」のブロック「スペース▼キーが押されたとき」を上に繋げます。

ブロック「楽器を1▼にする」の”▼”クリックして”(20)シンセリード”を選択します。

ブロック「60▼の音符を0.5拍鳴らす」の”0.5″を”2″で上書きします。

キーボードのスペースキーを押してスクリプトを実行すると音は出ますが、キーを押し続けても2拍毎に音が途切れてオルガンのような連続音になりません。

繰返しブロックを使って連続音を出す

カテゴリー「制御」のブロック「< >まで繰り返す」をスクリプトエリアに引き出します。

カテゴリー「演算」のブロック「< >ではない」をスクリプトエリアに引き出します。

カテゴリー「調べる」のブロック「スペース▼キーが押された」をブロック「<>ではない」の”<>”に嵌め込みます。

できたブロックをブロック「< >まで繰り返す」の”<>”に嵌め込みます。

上にあるブロック「60▼の音符を2拍鳴らす」をブロック「<>まで繰り返す」の内側に抱え込ませます。

できたブロックをカテゴリー「制御」のブロック「ずっと」で抱え込ませます。

ブロック「ずっと」を上のブロックに繋げます。

キーボードのスペースキーを押して音を出してみます。

連続音の途切れはそれほど気にならなくなりましたが、鍵盤から指を離しても2拍分の音が出続けるので楽器としては使い物になりません。

オルガンは諦めてスチールパンでやってみる

オルガンではうまくいかなかったので、打楽器のスチールパンでスクリプトを再構成してみます。

ブロック「ずっと」を引き離します。

ブロック「< >まで繰り返す」に抱え込まれたブロック「60▼の音符を2拍鳴らす」を引き出して、上のブロックに繋げます。

残ったブロック「ずっと」を右クリックして削除します。

ブロック「楽器を20▼にする」の”▼”クリックして”(18)スチールドラム”を選択します。

ブロック「60▼の音符を2拍鳴らす」の”2″を”0.5″で上書きします。

キーボードのスペースキーを押してスクリプトを実行すると、スチールパンを叩く音が出ました。このような打楽器としてなら、楽器として楽しむ?ことはできそうです。

キーボードで楽器の鍵盤を構成する

ブロック「スペース▼キーが押されたとき」を右クリックして複製し、黒鍵を含めて1オクターブ分の鍵盤13個をスクリプトエリアに配置します。

スクリプトエリアに配置したブロック「スペース▼キーが押されたとき」の”▼”をクリックして出てくるメニューから各鍵盤に該当するキーボードのキーを選択します。

各鍵盤に割り当てるキーボードのキーは右図のようにしてみました。

スクリプトエリアに配置したブロック「*▼キーが押されたとき」それぞれの下にあるブロック「60▼の音符を0.5拍鳴らす」の”▼”をクリックして出てくる鍵盤から該当するノート番号を選択します。

完成したプロジェクトで演奏?してみる

1オクターブ内で弾ける曲を演奏?してみました。

連続してキーを叩いても反応しないので、こんな感じになってしまいます。決してテクニック?の問題ではありません。

完成したプロジェクトを保存する

メニューバーの「ファイル▼」をクリックして出てくるメニューから「プロジェクトを保存」を選択します。

プロジェクトの保存先を開き、項目「名前:」の入力蘭に今回のプロジェクト名を入力し、「保存」ボタンをクリックします。

GPIO12とGPIO13を既定の入力モードに戻しておく

LXTerminal画面に戻って次のコマンドを実行し、GPIO12を既定の入力モードに戻しておきます

gpio -g mode 12 in

続けて、GPIO13を既定の入力モードに戻しておきます

gpio -g mode 13 in

今回はオルガンを作りたかったのにできなかったので、いつかまたScratch以外のプログラミング言語を使ってでもやってみたいと思います。