今回は、Raspbianのプリインストールソフト「Sonic Pi」で遊びます!
アイコンがかわいいなぁと、ラズベリーパイを使い始めた当初から気になっていたソフトのひとつです。英語のソフトなのでなかなか手が出せずにいたところ、なんと上司が教えてくれることに!
前半は自力で予習した基本編、後半は上司に教えてもらいながら応用編の、二部構成でお送りします。
ちなみに、音楽の知識が無くても十分楽しめます。学生時代のリコーダーレベルのわたしでもしっかり遊べましたのでご安心を!
Sonic Piとは?
Sonic Piは、「音」を扱うオープンソースのプログラミング環境です。Raspbianにプリインストールされています。ラズベリーパイ用の他に、Mac OS版とWindows版も公開されており、どちらも無料でダウンロードできます。
ラズベリーパイ公式サイトにもチュートリアルが掲載されています。英語のドキュメントですが、画面もスクリプトもシンプルなので、これだけでも十分進められそうです!
Raspberry Pi Learning Resource
Sonic Pi起動!
Sonic Piとはどんなソフトなのか、起動して実際の画面を見てみましょう!メニューの[プログラミング]-[Sonic Pi]をクリックします。
起動までには少し時間がかかりますが慌てず待ちましょう。
少し待つと、図2のような画面に切り替わります。
デフォルトは3分割の画面です。左上がコーディングの領域、右上がプログラムを実行したときのログの出力、下部はヘルプで、チュートリアルなどが表示されています。
その他に「Preferences」画面がありますが、デフォルトでは非表示となっています。
画面の説明は、ラズベリーパイ公式サイトの解説ページを参照してください。
WORKSHEET | Raspberry Pi Learning Resource
上部にある10個のボタンに、基本的な機能がまとめられています。種類ごとに色分けされていて、直感的にとても分かりやすいですね!
左側にあるピンク色の4つのボタンは、主にプログラミングで使用するボタンです。
「Run」「Stop」は、ワークスペースに記述したスクリプトを実行・停止するときに使用します。スクリプトを保存するには「Save」ボタン、実行中の音声を保存するには「Rec」ボタンをクリックします。音声ファイルの保存形式は「wav」です。
右側の黄色のボタンは、ワークスペースのスクリプトの見た目を調整します。「Size-」「Size+」で文字サイズの変更ができ、「Align」ボタンはスクリプトのインデントを整えてくれます。
青色のボタンは画面の表示切り替えです。「Info」ボタンは、開発者やバージョン情報などが確認できるウインドウを表示します。「Help」と「Prefs」は、画面内のそれぞれのパネルの表示を切り替えます。この2つは右クリックメニューからでも切り替え可能です。
サンプルやチュートリアル、関数や変数の一覧などは、「Help」ウインドウの中にまとめられています。「Help」ウインドウの右上のボタンをクリックすると、ウインドウが独立し、大きく広げて見られるのでオススメです。
音を鳴らしてみよう!
それでは早速音を鳴らしてみましょう!Raspberry Pi公式サイトのチュートリアルのサンプルスクリプトを実行してみました。
play 60
音が一音、再生されました!「ド」の音ですね。
ところでこの「60」って何?という疑問の答えは、同じページの「MIDI NOTES AND MUSIC NOTES」の項に書かれています。
Getting started with Sonic Pi | Raspberry Pi Learning Resources
Music Notes to MIDI Note Values
C | D | E | F | G | A | B |
60 | 62 | 64 | 65 | 67 | 69 | 71 |
数字の正体は、MIDIのノートナンバーでした!表の中で番号が飛んでいるのは、鍵盤の黒鍵分があるからですね。
play :c4
このように、半角のコロン(:)を先頭に付けて、音名を指定することも可能です。「C4」を再生すると、数字で「60」を指定したときと同じ音が再生されます。
続けて鳴らす場合は、間に「sleep」を入れると、音を区切ることができます。このまま実行してしまうと、同じタイミングで一気に鳴ってしまうので、連続して鳴らしたい場合は「sleep」を入れて調整しましょう。「sleep」の単位は「秒」で、小数を指定することもできます。
play 60 sleep 0.5 play :c4
同じ音が2回、鳴ったでしょうか?
この状態で実行すると、デフォルトで設定されている音が鳴りますが、もちろん好きな音を選ぶことが可能です。音の種類は「Help」ウインドウの「Synths」タブで確認できます。
音の種類を指定するには「use_synth」を使います。「use_synth」の後の半角スペースまでを入力すると、音名のリストが表示されるので、この中から選択すると簡単です。
Sonic Piで鳴らせる音はなんと30種類!全部聴いてみたい!ということで、スクリプトを書いて実行してみました!
30種類すべての音を1秒間隔で再生してみました。楽器の音だけでなく、ビープ音やノイズなど、作曲のアクセントになりそうな音も用意されています。音の種類によって、響き方にもそれぞれ特徴があります。
実際に自分で試してみたい方は下記のスクリプトをどうぞ!
use_synth :beep play 60 sleep 1 use_synth :bnoise play 60 sleep 1 use_synth :cnoise play 60 sleep 1 use_synth :dark_ambience play 60 sleep 1 use_synth :dsaw play 60 sleep 1 use_synth :dull_bell play 60 sleep 1 use_synth :fm play 60 sleep 1 use_synth :gnoise play 60 sleep 1 use_synth :growl play 60 sleep 1 use_synth :hollow play 60 sleep 1 use_synth :mod_beep play 60 sleep 1 use_synth :mod_dsaw play 60 sleep 1 use_synth :mod_fm play 60 sleep 1 use_synth :mod_pulse play 60 sleep 1 use_synth :mod_saw play 60 sleep 1 use_synth :mod_sine play 60 sleep 1 use_synth :mod_tri play 60 sleep 1 use_synth :noise play 60 sleep 1 use_synth :pnoise play 60 sleep 1 use_synth :pretty_bell play 60 sleep 1 use_synth :prophet play 60 sleep 1 use_synth :pulse play 60 sleep 1 use_synth :saw play 60 sleep 1 use_synth :sine play 60 sleep 1 use_synth :square play 60 sleep 1 use_synth :supersaw play 60 sleep 1 use_synth :tb303 play 60 sleep 1 use_synth :tri play 60 sleep 1 use_synth :zawa play 60
コーディングのルールが分かってきたところで、前半戦終了!後半は、上司に教えてもらった応用編です!
音のアレンジ方法
Sonic Piでは、パラメータを付加するだけで、音の鳴らし方に変化をつけてアレンジができます。パラメータは「Help」ウインドウの中にあるチュートリアルの「2. synth」にまとめられています。
その中から代表的なものをまとめてみました。
パラメータ | 説明 |
amp | 音量 |
pan | ステレオスピーカー(左、右、中央)の設定 |
release | フェードアウトするまでの時間 |
attack | フェードインするまでの時間 |
sustain | 音の持続時間 |
「attack」「sustain」「release」はあまり聞き慣れない項目ですね。チュートリアルに載っている図を参考にするとイメージがつかみやすいです。
「attack」を設定すると、フェードインするように、ふわっと音が鳴り始まります。releaseはその逆で、だんだん音が小さくなりフェードアウトさせる設定です。間に入る「sustain」は、「amp」で設定した音量を持続させる時間です。
それぞれのデフォルト値は音の種類によって異なり、「Help」ウインドウの「Synths」タブで確認できます。
それでは実際にスクリプトを実行して聴き比べてみましょう。
use_synth :pretty_bell play :c4 sleep 1 play :d4,amp:2 sleep 1 play :e4,pan:1 sleep 1 play :f4,attack:2 sleep 3 play :g4,release:2 sleep 2 play :a4,sustain:2 sleep 3 play :b4,pan:1,attack:3,release:2,sustain:1 sleep 6 play :c4,pan:-1,attack:1,release:3,sustain:2
「ドレミファソラシド」に一音ずつ変化を付けて再生しました。パラメータひとつでずいぶん印象が変わりますね!
「attack」「sustain」「release」を設定した場合は、その分再生時間が長くなるので、音が重ならないように「sleep」の値で調整しています。
「play」のパラメータ値は、固定値で設定する以外に、関数を使う方法があります。
ランダムで値を設定したい場合は「rrand」を使います。値の範囲を指定することができ、その範囲内で小数を含めた値が返されます。
rrand(1,3)
いくつかの値の中から選びたい場合は「choose」を使います。指定できる値が決まっている場合などはこちらを使いましょう。
choose([50,60])
実際にどんな値が選択されたかは、「Log」ウインドウに出力されたログで確認できます。
スクリプトを実行して確認してみましょう。
use_synth :saw loop do play choose([:c4,:d4,:e4,:f4,:g4,:a4,:b4]), amp:rrand(1,3), pan:choose([-1,0,1]),attack:rrand(1,3), release:rrand(1,3),sustain:rrand(1,3) sleep rrand(1,5) end
音の種類と「pan」は、設定できる値が決まっているので「choose」を使用して値を選択しています。「amp」「attack」「sustain」「release」は小数が入っても問題ないので「rrand」を使用しています。今回は「sleep」にも「rrand」を使用しました。
「loop do ~ end」は、繰り返しの命令文です。止めるときはSTOPボタンをクリックしましょう。
「Log」ウインドウの中で、パラメータ値がランダムに設定されているのが目視で確認できます。再生された音がランダムになっているので、もちろん耳でも確認できますね!「pan」の違いは、イヤホンで聞いた方が分かりやすいです。
和音で奏でてみよう!
和音を鳴らすには「chord」を使用します。引数としてコードネームを指定するのですが、下記のように、基準になる音と、メジャーコードやマイナーコードといった和音の種類を2つに分けて記述します。
play chord(:c4) play chord(:c4,:minor)
また、「play_pattern」を使用すると、和音ではなく、コードを一音ずつ音階として鳴らしてくれます。引数の指定方法は、「chord」と同じです。
文章にするとちょっとむずかしいので、再生して違いを比べてみましょう!
use_synth :pretty_bell play chord(:c4),release: 3 sleep 3 play chord(:g4), release: 3 sleep 3 play chord(:a4,:minor),release: 3 sleep 3 play chord(:f4),release: 3 sleep 3 play_pattern chord(:c4) play_pattern chord(:g4) play_pattern chord(:a4,:minor) play_pattern chord(:f4)
「C→G→Am→F」というコードを実行してみました。聞き覚えのある方もいるのではないでしょうか?かの有名な「レットイットビー進行」です!
土台となるコードがこんなに簡単に再現できるので、楽器が弾けなくても曲作りが楽しめそうですね!
聞きながら作曲できるlive_loop!
Sonic Piの最大の特徴とも言えるのが、打ち込んだスクリプトをリアルタイムで反映してくれる「live_loop」です!
動画は、下記のスクリプトからスタートしました。
live_loop :loopname do play chord(:c4) sleep 2 play chord(:g4) sleep 2 play chord(:a4,:minor) sleep 2 play chord(:f4) sleep 2 end
1行目の「loopname」は任意の名前を付けてください。
スクリプトを書き換えて「Run」ボタンをクリックすると、「Log」ウインドウが初期化され、次の周回からは新しい内容が反映された状態で再生されます。「Stop」ボタンをクリックするまで再生が続きます。スクリプトにエラーがある場合は、更新されずに前回のものが流れ続けるので、途中で止まってしまう心配はありません。
リアルタイムで聴き比べながら、音を加えたり、アレンジを変えたり、曲を作りこむことができるとっても便利な機能です!
また、上級者になるとこんなこともできちゃいます!
ラズベリーパイと、エレキギターのコラボレーションです!すごい!
演奏を止めることなく、新しく書いたスクリプトが再生されていくので、このようにセッションすることが可能なんですね!打ち込んだスクリプトがスクリーンに映し出されているので、Sonic Piの知識があれば「聞く」以外の楽しみ方もできそうです!
まとめ
プログラミングしながら音楽を学ぶ、作曲しながらプログラミングを学ぶ、両方できる方は一気に本格的な作曲を楽しめる!Sonic Piは、スキルに関わらず誰もが楽しめそうなソフトですね!
書いたスクリプトをすぐに「音」として体感できるので、コーディングのルールがとても覚ええやすかったように思います。特に「live_loop」の機能は、音の再生も自分の集中力も途切れることなく、夢中になって遊んでしまいました(笑)
次回は、久しぶりに電子部品を使って遊びます!
こちらが新しくもらった部品です!早速ブレッドボードに差してみたのですが、これ、温度センサだそうです!全然温度計には見えないですが……本当にこれで温度が測れるの!?
どうやってラズベリーパイと接続するの?どんな値が取れるの?3つの足の役割は?
見ているだけで疑問がたくさん!次回も奮闘の予感です!