1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Sonic Piを触ってみた

Posted at

概要

Live Coding Musicを行うためのアプリであるSonic Piを試してみた。

インストール

以下のコマンドでインストールすると、開発環境も同時にインストールされる。
※ Mac以外は公式HPからダウンロードできる。

brew install sonic-pi

文法など

  • Rubyベースなので、Rubyの関数は基本的に扱える
  • Sonic Pi独自の関数もいくつか存在する
  • 音量や速度に関してはSonic Pi側の関数やその引数で指定する

defとdefine

defは通常のRubyの関数定義に利用する。
defineはSonic Pi独自の関数定義キーワードで、ライブ中に動的に変更することが可能。
基本的には define の利用を推奨。

速度

rateを指定する

# 2倍速で再生
sample :drum_heavy_kick, rate: 2
# 逆再生
sample :drum_heavy_kick, rate: -1

音量

ampを指定する

sample :bd_haus, amp: 2

Duration and Envelop

attackとかreleaseとかの指定

  • 公式のマニュアルの図がわかりやすい → 2.4

音のパニング

panで音を左右に振る設定ができる

# 右
sample :sn_dolf, pan: 1
# 左
sample :sn_dolf, pan: -1

シンセサイザー

use_synthでブロック内で利用するシンセサイザーを指定できる

# live_loop(baseline)内は`tb303` を利用して演奏する
live_loop :bassline do
  use_synth :tb303
  notes = [:e2, :e2, :g2, :b2]
  play_pattern_timed notes, [0.25, 0.25, 0.5, 0.5], release: 0.15, cutoff: 80, res: 0.9, amp: 2
  sleep 2
end

# live_loop(baseline2)内は `dsaw` を利用して演奏する
live_loop :bassline2 do
  use_synth :dsaw
  notes = [:e2, :e2, :g2, :b2]
  play_pattern_timed notes, [0.25, 0.25, 0.5, 0.5], release: 0.15, cutoff: 80, res: 0.9, amp: 2
  sleep 2
end

サンプリング

sampleを利用してデフォルト曲や外部ファイルの再生が可能

# Sonic Piでデフォルトインストールされているスネアを再生する
sample :sn_dolf
# ローカルディレクトリのパスを直接指定して音楽ファイルを再生する
sample "~/Desktop/card.wav", amp: 30

利用できる拡張子はマニュアルによると以下の3つ

  • wav
  • aiff
  • flac

他の拡張子から変換したい場合は、ffmpegなどを利用する必要あり。
以下はMacのボイスメモで録音したデータ(m4a形式)をwavに変換する例

ffmpeg -i file.m4a file.wav

loopとlive_loopの違い

loopはRuby標準のループ処理。

live_loopはSonic Piの組み込みループ処理。非同期で実行される。
作曲を行う際には、複数の音を同時に鳴らしたいことが多いので、基本的にlive_loopの利用が推奨される。

# play 70は永遠に実行されない
loop do
  play 60
  sleep 0.5
end

loop do
  play 70
  sleep 0.5
end
# play 60とplay 70がそれぞれ非同期に実行され続ける
live_loop :loop1 do
  play 60
  sleep 0.5
end

live_loop :loop2 do
  play 70
  sleep 0.5
end

その他

one_in

引数には自然数(N)を指定する
N分の1の確率でtrueになる。

in_thread

通常の同期処理を非同期化するために利用する。
通常の loop の非同期化もできるが、live_loop が存在するので、そちらの利用を推奨

サンプルコード

とりあえずChatGPTで出力した適当なコード

use_bpm 170

live_loop :drums do
  sample :bd_haus, amp: 2
  sleep 0.5
  sample :sn_dolf, amp: 1.5
  sleep 0.5
  sample :drum_cymbal_closed, amp: 1
  sleep 0.25
  sample :drum_cymbal_closed, amp: 1
  sleep 0.25
end

live_loop :arpeggio do
  use_synth :blade
  play_pattern_timed chord(:e3, :minor), [0.125, 0.125, 0.25], release: 0.1, amp: 1.5
  play_pattern_timed chord(:g3, :major), [0.125, 0.125, 0.25], release: 0.1, amp: 1.5
  play_pattern_timed chord(:b3, :minor), [0.125, 0.125, 0.25], release: 0.1, amp: 1.5
  play_pattern_timed chord(:c4, :major), [0.125, 0.125, 0.25], release: 0.1, amp: 1.5
end

live_loop :melody do
  use_synth :piano
  use_transpose 0
  ##| notes = [:A1, :F, :D, :A1, :F, :D, :A1, :F, :D, :A1, :E, :D]
  notes = [:F0, :C, :B, :C, :G0, :A, :C, :C, :A, :G0, :F0]
  play_pattern_timed notes, [0.5, 0.5, 0.25, 0.5, 0.5, 0.5, 0.25, 0.25, 0.25, 0.25, 0.25], release: 0.7, amp: 2
  sleep 2
end

live_loop :chords do
  use_synth :prophet
  chords = [chord(:e3, :minor), chord(:c3, :major), chord(:d3, :major), chord(:g3, :major)]
  play chords.tick, release: 2, amp: 1.5
  sleep 2
end

まとめ

公式が提供しているIDEにコードを打ち込めば、即再生されるので、初心者でもすぐに試すことができる点は非常に良い。
ただし、何かそれなりの曲を作ろうと思うと、音楽理論に関する知識が無いと厳しい。

とりあえず、公式のチュートリアルを斜め読みして使い方を覚えた後は、
コード譜とかを読んで打ち込むのが良いのでは無いかと思う。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?