作曲ツールとしてのRuby: Sonic Pi
(bhmt.dev)-
Sonic Pi: Rubyを作曲ツールとして使う
-
背景
- 筆者はもともと音楽専攻だった
- Web開発者として働くうちに、技術的な作業に夢中になるようになった
- さまざまな楽器を扱うのが難しく、電子音楽にも挑戦したが失敗した
- 最近、Sonic Piを通じて再び音楽とコーディングを結びつけるようになった
-
Sonic Piの紹介
- Sam Aaronが作ったSonic Piは、コードで制御されるソフトウェアシンセサイザーである
- Rubyを拡張したドメイン特化言語(DSL)を使って、音楽やオーディオの概念をマッピングする
- たとえば、
:c4のようなシンボルで音符を表し、chord(:d3, :maj7)のようなコード生成子を使う
-
プロジェクトの目標
- Sonic Piだけを使って1つのデモを作曲することが目標だった
- MIDIや外部サンプルを使わず、純粋にコードだけで作曲した
-
基本コード例
use_bpm 70でBPMを設定し、use_synth :pulseでシンセサイザーを設定するplay :c2、sleep 0.25のようなコードで音符を再生し、時間間隔を設定するplay_pattern_timed [ :c3, :d3, :e3, :g3 ], 0.25でパターンを再生する
-
コードの最適化
- 繰り返しのコードを減らすために関数を定義する
def arpeggiate(root, is_minor = false)関数でアルペジオパターンを生成するin_thread doブロックを使ってコードを並列に実行する
-
並列実行
in_thread doブロックを使って2つの「楽器」を並列に実行できる- たとえば、1つのスレッドでアルペジオを実行し、別のスレッドでメロディを実行する
-
合唱の実装
ringを使って複数の音符を1つのリストに結合するplay_pattern_timed [ring(:c5, :e5)], 4, sustain: 3.8のように音符を再生し、持続時間を設定するdef choral_rings(notes, sus)関数を定義して、合唱パターンを簡単に作れるようにする
-
ライブループ
live_loopを使って無限に繰り返されるループを作成するlive_loop :harp doのようにループを定義し、その中にコードを書く
-
結論
- プログラミングは単なる科学ではなく芸術である
- コードを書くことは創造的な行為であり、他者とコミュニケーションする方法でもある
- Sonic Piを通じて音楽とコーディングを結びつけ、創造的な作業ができる
GN⁺のまとめ
- Sonic Piは、コードで音楽を作曲できるツールで、Rubyを拡張したDSLを使用する
- このプロジェクトは、Sonic Piだけを使って1つのデモを作曲することを目標としている
- プログラミングには科学だけでなく芸術的な側面もあり、Sonic Piはそれをよく示している
- 音楽とコーディングを組み合わせて創造的な作業ができる好例である
- 類似機能を持つツールとしては、TidalCyclesとSuperColliderがある
1件のコメント
Hacker Newsの意見