Sonic PiでSoundProgramming!

![sonic_pi.png](https://qiita-image-store.s3.amazonaws.com/0/43650/11ca4efe-573c-e00b-e34e-4e8286926f7c.png "sonic_pi.png")

初めまして、9日目を担当する、さんた([@santa_sukitoku](https://twitter.com/santa_sukitoku))です。

突然ですが、メディアアートに興味はありますか？
最近、メディアアートって流行ってますよね。
メディアアートって映像とかプロジェクションマッピングだけだと思われがちですが、実はSoundもメディアアートになることもあります。
「でも、ボク(ワタシ)楽器とか無理だし音符も読めない...」という人も多いと思います!(多分)

そこで、今回は「Sonic Pi」を使ってprogrammingでSoundを作る方法を書いていこうと思います。

##[Sonic Pi](http://sonic-pi.net)とは
![](http://sonic-pi.net/images/logo.png)
まずは[Sonic Pi](http://sonic-pi.net)の説明をしたいと思います。
Sonic Piは、学校でのプログラミングや音楽の授業をサポートするように設計された、ライブコーディング可能な無料のシンセサイザーです。
MacやWindowsだけでなくLinux(raspberry pi)でも動くのでパソコンさえあれば誰でも使うことができます。

##Let's Create!
まずは、[Sonic Pi](http://sonic-pi.net)をダウンロードしましょう。※テキストをクリックすると公式サイトに飛びます。

次にSonic Piを起動しましょう。
![スクリーンショット_2016-12-08_15_01_57.png](https://qiita-image-store.s3.amazonaws.com/0/43650/7d0252fc-ea00-df5d-93a1-69d4ef63d68c.png "スクリーンショット_2016-12-08_15_01_57.png")
画面左側のエディターにコードを書いていきます。

では、試しに

```sonic-pi
play 70
```
と入力して、上部分のRunを押してみましょう。
音がなりましたか？
次にplayの後の値を変えてみましょう。
すると、playの後の値が小さいほど低い音が、値が大きいほど高い音が出ることがわかると思います。
playの後の値は、伴盤の番号(ノートナンバー)を表しています。
![075.jpg](https://qiita-image-store.s3.amazonaws.com/0/43650/8ddf7413-aefe-c559-7a6e-d5233ef96b82.jpeg "075.jpg")
※ノートナンバーとは上の画像の鍵盤に書かれている番号のことです。

次に、

```sonic-pi
play 82
play 85
play 89
```

と入力してRunしてみてください。
複数のplayを書くと、全て同時に演奏されるので、harmony(和音)が奏でられます。
playの後の値を自分で変えてどの組み合わせが良いかさがして行きましょう。

また、音を同時に演奏するのではなく一音ずつ演奏したい場合には、音符の間に `sleep` を入れます。

```sonic-pi
play 82
sleep 1
play 85
sleep 1
play 89
sleep 1
```

sleepの後の1は一拍休むという意味なので数値を変えると、アルペジオのスピードが変化します。

音程は、音階(音の名前)で指定することも可能で、

```
ド 　→ :C
レ 　→ :D
ミ 　→ :E
ファ → :F
ソ 　→ :G
ラ 　→ :A
シ 　→ :B
```
このようにアルファベットで指定します。

試しに音階で指定してみましょう。

```sonic-pi
play :C
sleep 0.5
play :D
sleep 0.5
play :E
```

すると、「ドレミ」の順で音が流れるはずです。

また、音階名とオクターブの数字で

```
♯(シャープ 半音上)は「s」→ 例: Cs3
♭(フラット 半音下)は「b」→ 例: Db3
```

というように表現するすることができます。

次にシンセサイザーのアンプ(Amp)とパン(Pan)を指定しましょう。

```
Amp:音の大きさ
「amp:数値」で指定する。
標準が1なのでそこから相対的に指定する。

Pan:音の定位 (左右の位置)
「pan:数値」で指定する。
0が中心で、-1が左、1が右
```

試しにアンプとパンを指定しましょう。

```sonic-pi
play :C4, amp: 3.4, pan: 0
sleep 0.5
play :D4, amp: 2.7, pan: -1
sleep 0.5
play :E4, amp: 1.3, pan: 1
```

また、今までビープ音でSoundを作ってきましたが、音色も指定することができます。
プログラムの初めに`use_synth`と入力してスペースキーを押すと、色々なシンセサイザーの選択肢が出てきます。
![スクリーンショット 2016-12-08 16.13.33.png](https://qiita-image-store.s3.amazonaws.com/0/43650/01471fe4-f699-2507-727f-7c36b1cf3295.png "スクリーンショット 2016-12-08 16.13.33.png")

例として`:piano`を選択します。

```sonic-pi
use_synth :piano
play :C4, amp: 3.4, pan: 0
sleep 0.5
play :D4, amp: 2.7, pan: -1
sleep 0.5
play :E4, amp: 1.3, pan: 1
```
すると、ピアノの音色で再生されます。

また、1音ごとにシンセサイザーは指定することができます。

```sonic-pi
use_synth :piano
play :C4, amp: 3.4, pan: 0
sleep 0.5

use_synth :prophet
play :D4, amp: 2.7, pan: -1
sleep 0.5

use_synth :saw
play :E4, amp: 1.3, pan: 1
```

シンセサイザーの詳細は、Helpメニューの「シンセ」タブで確認しましょう。

次に、今の状態では音が一回しか流れないのでループさせましょう。
プログラムの始めに`loop do`を、終わりに`end`を追加しましょう

```sonic-pi
loop do

use_synth :piano
play :C4, amp: 3.4, pan: 0
sleep 0.5

use_synth :prophet
play :D4, amp: 2.7, pan: -1
sleep 0.5

use_synth :saw
play :E4, amp: 1.3, pan: 1

end
```

いよいよ最後は...

**ライブコーディングです!!**

急にカッコよくなりましたね(笑)

先ほどのコードの`loop do`を`live_loop :live do`に書き換えましょう。

```sonic-pi
live_loop :live do

use_synth :piano
play :C4, amp: 3.4, pan: 0
sleep 0.5

use_synth :prophet
play :D4, amp: 2.7, pan: -1
sleep 0.5

use_synth :saw
play :E4, amp: 1.3, pan: 1

end
```
これだけでライブコーディングができます!!

##まとめ
Sonic Piでは簡単な単語と数値を入力するだけでSoundが創れるのでプログラミング初心者の人でもなじみやすいと思うのでこの記事を参考にSoundを創って見てください!

##参考資料
[多摩美術大学 情報デザイン学科 メディア芸術コース　Sonic Pi 入門](https://drive.google.com/file/d/0BzyVHU69QO3mWEFGMWYzcDVqNE0/view)

[田所淳 公式Webサイト yoppa.org](http://yoppa.org)