前回は、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