Sonic Piによる音楽生成の基礎


概要

コードを書くことで音楽を生成できるシステム環境「Sonic Pi」(ソニックパイ)のノウハウをストックしていきます。

私も学び始めたばかりの初心者なので、学習して知識がアップデートされたら加筆修正をしていく予定です。


Sonic Piとは

Rubyの文法をベースとしたコーディングで音楽を作って鳴らせるシステム環境。

以下の公式サイトからインストールしただけですぐに使えます。

・公式サイト

Sonic Pi - The Live Coding Music Synth for Everyone

https://sonic-pi.net/


DAWとどう違う?

LogicやCUBASEなどのいわゆるDAWと比較した際のコードによる音楽生成の特徴は以下のようなものがあると感じます。


  • 繰り返しが主体

    └例えば、単純に何かのメロディーを入力していくという場合、DAWであればピアノロールで意図した音程、場所、長さなどをコントルールして打ち込みことができますが、コーディングによる入力はそれなりの手間がかかります。

    反面、繰り返しの処理は得意なので、ループ構造をメインとして、その中身に色々な工夫を足していくことで音楽を生成するということが基本路線かなと感じます。


  • アルゴリズムを駆使できる

    └プログラミングで音楽を生成するので、何らかのアルゴリズムを作ってそれをループさせることで、ミニマルミュージックのような規則性のある音楽を少ない工数で作れる可能性がある。


  • 乱数や変数を駆使して動的な音楽を作れる

    └プログラムで乱数を扱うことで、繰り返しの度に生成される音やエフェクトかかり方が変わるような「変化し続ける音楽」を作れるというのは大きな特徴かなと思います。



音を鳴らす

use_bpm 120  # BPMを指定する。デフォルトは60。

use_synth :piano # 使用するシンセを選択。デフォルトは「:beep」。
play 60 # 指定のノート番号の音を鳴らす。60はドの音。
sleep 1 # 休符を指定。1拍休み。
play :C4 # 英語の音名で音程を、後ろの数値でオクターブを指定。「:」が必要。
sleep 2 # 2拍休み。
play :Cs4 # Cシャープを鳴らす。
sleep 0.5 # 半拍休み。
play :Db4 # Dフラットを鳴らす。
sleep 0.25 # 16分休み。
play [:C4, :E4, :G4] # []で囲うことで音を同時に鳴らせる。Cのコードを鳴らしている。

ノート番号と音名の対応は以下を参照。

ノート番号を覚えるのは大変なので基本的には英語表記で書くとよいと思います。

・MIDIノート番号と音名、周波数の対応表

http://www.asahi-net.or.jp/~HB9T-KTD/music/Japan/Research/DTM/freq_map.html


イテレーション(反復)


# 4回繰り返す
4.times do
play :C4
sleep 1
end

[回数].times ~ end

で囲うことで反復処理を行える。

# 反復の中に反復をネスト

4.times do
2.times do
play :C4
sleep 1
end
2.times do
play :D4
sleep 1
end
end

このように、繰り返しの中に入れ子で繰り返しを入れることもできる。


ループ

#  無限ループ

loop do
play :C4
sleep 1
end
play :D4 # 上でループが動いているので実行されない。

loop do ~ end

で囲うことで無限にループを繰り返します。

基本的にStopボタンを押すまで永遠と繰り返し続けます。