前回、”WiringPi“のコマンドとScratch 2に元からあるサウンド機能を組合わせて圧電スピーカーから楽器の音を鳴らしたので、今回はこれを使ったオルゴールのスクリプトを作ってみようと思います。
今回使った部品
- Raspberry Pi 3 Model B × 1
- 40Pinフラットリボンケーブル
- 40Pin T型GPIO拡張ボード
- ブレットボード × 1
- 圧電スピーカー(PT08-Z185) × 1
- 抵抗 1kΩ × 1
- ジャンプワイヤー(オス/オス) × 3
GPIO12の出力モードをハードウェアPWMに設定する
前回と同じように、LXTerminalを起動して次のコマンドを実行すると、GPIO12の出力モードがハードウェアPWMに設定されます。
gpio -g mode 12 pwm
下のコマンドで実行結果を確認します。
gpio readall
BCM列”12”番の”Mode”列が、既定の”IN”から”ALT0”に変わっています。この拡張機能”ALT0”は、GPIO12の場合、ハードウェアPWMの”0″チャンネルが割り当てられています。
併せて、タスクバー右のスピーカーアイコンを右クリックし、オーディオ出力先として「Analog」を選択しておきます。
1オクターブ分の音階ブロックを作っておく
Scratch 2を起動し、カテゴリー「音」のブロック「60▼の音符を0.5拍鳴らす」を8つ、スクリプトエリアに繋げておきます。
上から2つ目のブロックの”▼”をクリックし、出てきた鍵盤から”D(62)”を選択します。
上から3つ目のブロックの”▼”をクリックし、出てきた鍵盤から”E(64)”を選択します。
上から4つ目のブロックの”▼”をクリックし、出てきた鍵盤から”F(65)”を選択します。
上から5つ目のブロックの”▼”をクリックし、出てきた鍵盤から”G(67)”を選択します。
上から6つ目のブロックの”▼”をクリックし、出てきた鍵盤から”A(69)”を選択します。
上から7つ目のブロックの”▼”をクリックし、出てきた鍵盤から”B(71)”を選択します。
上から8つ目のブロックの”▼”をクリックし、出てきた鍵盤から”高いド(72)”を選択します。
1番上のブロックをクリックし、出てきたメニューから「コメントを追加」を選択します。
コメント入力欄に”ド”を入力します。
コメント入力欄の”▼”をクリックして”▶”にしておきます。
同じ要領で、1オクターブの音階にコメントを入力しておきます。
カテゴリー「音」のブロック「楽器を1▼にする」をブロック「60▼の音符を0.5拍鳴らす」の上に繋げます。
ブロック「楽器を1▼にする」の”▼”をクリックし、出てきたメニューから「(20)シンセリード」を選択します。
ブロック「楽器を20▼にする」をクリックして1オクターブの音階を鳴らして確認します。
音階が確認できたら、スクリプトを右端に寄せて、全てのブロックを切り離しておきます。
音符毎のブロックを繋いでメロディーを組立てる
オルゴールのメロディーは右の「かえるのうた」にしてみました。
楽譜に並んだ音符の順に、必要な音階のブロックを右クリックして複製し、縦に繋いでいきます。最初は”ど”の音なのでブロック「60▼の音符を0.5拍鳴らす」を右クリックして複製し、スクリプトエリアの左側に置きます。
次は”れ”なのでブロック「62▼の音符を0.5拍鳴らす」を右クリックして複製し、「60▼の音符を0.5拍鳴らす」の下に繋げます。
同じ要領で、7音繋いだ後に休止符があるので、カテゴリー「音」のブロック「0.25▼拍休む」を下に繋げます。
更に7音繋いだ後に、再び休止符があるので、カテゴリー「音」のブロック「0.25▼拍休む」を下に繋げます。
同じ要領で、楽譜の最後の休止符まで、ブロックを繋げます。
7箇所の休止符が全て4分休符なので、7箇所のブロック「0.25▼拍休む」の”0.25″を”0.5″で上書きします。
7小節目の音符が全て8分休符なので、7小節目のブロック「*▼の音符を0.5拍鳴らす」の”0.5″を8箇所全て”0.25″で上書きします。
できたメロディーのスクリプトをカテゴリー「制御」のブロック「ずっと」で抱え込ませます。
スクリプトエリアの右側に寄せておいたブロック「楽器を20▼にする」をスクリプトの上に繋げます。
更にその上に、カテゴリー「イベント」のブロック「(緑の)旗がクリックされたとき」を繋げます。
オルゴールのプロジェクトを実行する
ステージ上の緑の旗をクリックしてプロジェクトを実行します。
メロディーが正しく鳴ったでしょうか?
おかしなところがあった場合は、楽譜とブロックの並び方が合っているか、もう一度確認してみましょう。
音を止めるには、ステージ上の赤?ボタンをクリックします。
完成したオルゴールのプロジェクトを保存する
メニューバーの「ファイル▼」をクリックして出てきたメニューから「プロジェクトを保存」を選択します。
プロジェクトの保存先を開き、項目「名前:」の入力蘭に拡張子”.sb2″はそのままで今回のプロジェクト名を入力し、「保存」ボタンをクリックします。
GPIO12を既定の入力モードに戻しておく
LXTerminal画面に戻って次のコマンドを実行し、GPIO12を既定の入力モードに戻しておきます