社内勉強会で Sonic Pi をテーマにして発表する。
メモ兼、この記事を発表資料としちゃおう(雑だけど)
作成した曲
My Sonic - live cording with Sonic Pi https://t.co/4o0jRSgpY9 #sonicpi #electro
— ikemura23 (@ikemura23) 2019年6月2日
発表当日は録画方法が不明だったので、別日に調べて録画/録音した
(2019/06/02)
動画のコード
# 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
サンプル
音を1から作るのは大変、パラメータの調整めんどい!
そんな場合、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