Sonic Pi 入門（作成した曲の動画付き）

社内勉強会で **Sonic Pi** をテーマにして発表する。
メモ兼、この記事を発表資料としちゃおう（雑だけど）

## 作成した曲

<blockquote class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr">My Sonic - live cording with Sonic Pi <a href="https://t.co/4o0jRSgpY9">https://t.co/4o0jRSgpY9</a> <a href="https://twitter.com/hashtag/sonicpi?src=hash&amp;ref_src=twsrc%5Etfw">#sonicpi</a> <a href="https://twitter.com/hashtag/electro?src=hash&amp;ref_src=twsrc%5Etfw">#electro</a></p>&mdash; ikemura23 (@ikemura23) <a href="https://twitter.com/ikemura23/status/1135101736400461824?ref_src=twsrc%5Etfw">2019年6月2日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

発表当日は録画方法が不明だったので、別日に調べて録画/録音した
 (2019/06/02)

## 動画のコード

```ruby

# Rerezzed
# Coded by Sam Aaron

use_debug false
use_random_seed 799089
notes = (scale :e1, :minor_pentatonic, num_octaves: 2).shuffle

live_loop :rerezzed do
  tick_reset
  t = 0.04
  sleep -t
  with_fx :bitcrusher do
    s = synth :dsaw, note: :e3, sustain: 8, note_slide: t, release: 0, amp: 0, cutoff: 110
    s2 = synth :dsaw, note: :e3, sustain: 4, note_slide: t, release: 0, amp: 0, cutoff: 70
    64.times do
      sleep 0.125
      control s, note: notes.tick
      control s2, note: (octs :e3, 4).tick
    end
  end
  sleep t
end

live_loop :industry do
  sample :loop_industrial, beat_stretch: 1, lpf: 120, amp: 0
  sleep 1
end

live_loop :drive do
  sample :bd_haus, amp: 0
  sleep 0.5
end
```

## Sonic Piについて
- ライブでコードを書いて音楽を作ることができる
- 学校でプログラミングの概念を学習するために設計された
- プロのアーティストやDJに適した非常に強力でパフォーマンスに対応したライブコーディング機器に進化
- 完全なオープンソースプログラミング環境

### 公式HP
Sonic Pi - The Live Coding Music Synth for Everyone
https://sonic-pi.net

### Github
samaaron/sonic-pi: The Live Coding Music Synth for Everyone
https://github.com/samaaron/sonic-pi

コードの半分以上がRuby、どうやらRuby製？

## コーディング

ここからさっそくSoinc Piで音を鳴らしていく

Sonic Piを起動する

### 単音
まずいちばんシンプルな単音を鳴らす
以下をSonic Piに貼り付けてRun
もしくは⌘R

```
# ピアノ鍵盤の70番目を再生
play 70
```

これはPiano鍵盤の82番目の音が再生される

### 和音

```
# 同時再生
play 72
play 75
play 79 
```

### 順番に再生

```
# 上から順に再生
play 72
sleep 1
play 75
sleep 1
play 79 
```

### 音色を変える

```
# シンセ音
use_synth :saw
play 38
sleep 0.25
play 50
sleep 0.25
play 62
sleep 0.25 
```

### 関数

```
# fooという関数を定義、関数名は何でも良い
define :foo do
  use_synth :saw
  play 38
  sleep 0.25
  play 50
  sleep 0.25
  play 62
  sleep 0.25
end
```

### ループ
```
define :foo do
  use_synth :saw
  play 38
  sleep 0.25
  play 50
  sleep 0.25
  play 62
  sleep 0.25
end

# ループ
loop do
  foo
end
```

## サンプル
音を１から作るのは大変、パラメータの調整めんどい！

そんな場合、Sonic Piには多くの内蔵サンプルが用意されている。
それを使うと色んな音、フレーズが簡単に使用できる。

### sampleコマンド
`sample`コマンドの後に`:`を入力するとサンプル候補が表示される。

例えばこれ

```
# ドラムのカッコいいリズム
sample :loop_amen
```

サンプル音源もパラメータで色々設定できる

```
# rateで再生スピードを1.3倍に上げる
sample :loop_amen, rate: 1.3
```

### load_exampleコマンド
実装例のようなコードを読み込んで展開する。
だいたいシンプルなワンフレーズ

```
# メロディ、ドラム付きのフレーズ
load_example :rerezzed
```

### パラメータ説明

自分が使用したパラメータをメモで残す。

use_random_seed
乱数の系列、数値のみ
フレーズをランダムで自動生成するときに使える
デフォルトでは0


lpf
MIDIノートの内蔵ローパスフィルター（lpf）のカットオフ値。
デフォルト100

amp
音の音量を設定できる。0だと音が消える
デフォルトは1

cutoff
音の周波数をカットするとか？値を小さくすると音がこもる。
デフォルトは100


## その他
音響プログラミング言語 というジャンルもあるらしい
SuperCollider
https://github.com/supercollider/supercollider