Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
module Synths; end
Search
あそなす
September 06, 2026
Technology
7
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
module Synths; end
https://rhc.connpass.com/event/392503/
あそなす
September 06, 2026
More Decks by あそなす
See All by あそなす
From Live Code to Sound: Building a Ruby Live Coding Engine
asonas
1
210
Generative Sequencer - and thus... onward to PicoRuby
asonas
1
200
How to make the Groovebox
asonas
2
2.4k
RubyKaigi 2025 pre-event
asonas
0
1.3k
Practical The One Person Framework
asonas
1
5.8k
kosendj-sharp-1-report
asonas
0
170
The ScrumMaster's Guide to the Galaxy
asonas
4
1.8k
fukuokarb02
asonas
0
620
Setsuna -counterfeit killer-
asonas
0
230
Other Decks in Technology
See All in Technology
bet_ai_day_2026_session02
agenticsec
1
710
AIエージェントを雇う前に決める5つのこと
knishioka
1
140
Point Cloud as a Foreign Language for Multi-modal Large Language Model
takmin
0
360
Webとヘルスデータ
yukukotani
0
130
Guerilla InnerSource in enterprises, during the AI hype
onenashev
PRO
0
140
Bet AI Day 2026丨AIによって本質に戻るシステムリスク管理
layerx
PRO
0
610
どんな手を使っても絶対間に合わせるスケジューラ
asari194617
0
1.5k
IDperturb: Enhancing Variation in Synthetic Face Generation via Angular Perturbation
sansantech
PRO
0
110
Bet AI Day 2026丨Agentは、「金融」という巨大産業の何を変えられるのか
layerx
PRO
0
560
Jetpack Compose で挑む新聞紙面UI ─ 複合ジェスチャー・ポリゴン記事領域・適応的ページ構成という3つの壁/droidkaigi2026
nikkei_engineer_recruiting
0
150
AI時代におけるプロダクト横断勉強会の設計
zozotech
PRO
0
120
When Token Pruning is Worse than Random: Understanding Visual Token Information in VLLMs
sansantech
PRO
0
240
Featured
See All Featured
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6.1k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
320
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
410
Accessibility Awareness
sabderemane
1
190
New Earth Scene 8
popppiees
3
2.5k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
270
WENDY [Excerpt]
tessaabrams
12
39k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
510
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.4k
Transcript
follow up module Synths; end asonas
こんにちは〜 ★ say("I am asonas" * 100) ★ a.k.a Yuya
Fujiwara ★ RubyKaigi 2026 ★ From Live Code to Sound: Building a Ruby Live Coding Engine ★ Rubyでライブコーディングの音楽パフォーマンスができる
Rubyで 自由に音を鳴らすことに 執着している
これまでの執着のおさらい
None
None
Recap: How to make the Groovebox ★ asonas/groovebox-ruby ★ Rubyを使ってTUI上で作曲ができる
★ スピーカーに出る直前まではPureRuby ★ 初めてソフトウェアのみで楽器をつくる経験 ★ 試行錯誤の積み重ね ★ ソフトウェアとしての品質はあまり良くない
None
None
Recap: From Live Code to Sound: Building a Ruby Live
Coding Engine ★ asonas/strudel-rb ★ Rubyでまた楽器をつくる ★ 実用性を重視してライブで生演奏ができること ★ goovebox-rubyのコードをベースにStrudelのRuby版をつくる ★ 個人的には満足いく完成度合い
After RubyKaigi 2026
strudel-rbの変更 ★ 本家Strudelの $: 記法をつかえるようにした ★ MITライセンスを付与した
本家Strudel の $: 記法を使えるようにした ★ Rubyにおける $:(だらーころん) は特殊変数 ★ Before/After
★ track(:arp) { do̲something } # こう書いていたものが ★ $:arp { do̲something } # こう書ける(Rubyで) ★ ̲$:arp ように underscore をいれることでミュートもできる
本家Strudel の $: 記法を使えるようにした ★ Strudelとstrudel-rbの大きなシンタックスの違いだった ★ Strudelで動くコードはstrudel-rbでも動く(はず) ★ 当時のデモで演奏したコードは
track から $: に置き換えて動く ★ プリコンパイルみたいな仕組みを用意した ★ lib/strudel/live/dollar̲colon̲preprocessor.rb
Rubyで作曲やライブ コーディングでパフォー マンスもできるように! めでたしめでたし...?
ところで
Rubyで 自由に音を鳴らすことに 執着している
ソフトウェアで 楽器はつくれた 学びも多かった
では、ハードウェアは?
今日のタイトル
module Synths; end
もじゅーる しんせす
モジュラーシンセ
こういうやつ tt h ps://commons.wikimedia.org/wiki/File:Eurorack_synth_patched.jpg
こういうやつの これ↓をつくってみたい tt h ps://commons.wikimedia.org/wiki/File:Eurorack_synth_patched.jpg
これまでの知識と経験 ★ Rubyをつかって音を鳴らす基礎の理解はできた ★ 波形をつくったりフィルターをつくったりタイミングの制御をし たりエフェクターをつくったりMIDIと同期をしたり ★ 曲として仕上がってくるとパラメータの制御やパッチをあてて部分 的に音の変化をさせたくなってくる ★
DTMでいうところの音作りやオートメーション、フィルターの 抜き差し、パラメーターの調整とか
ハードウェアのメリットを享受したい ★ ポテンショメーターやスライド抵抗、ボタンの入力値を受け 取ってそれを音へフィードバックする ★ それってハードウェアのシンセサイザーでは? ★ モジュラーシンセ
試行錯誤をしまくりだが 省略 無限に話したいので機会を見つけたい
v1.1
Basic Osc v1.1 ★ 「基本のオシレーター」と呼んでいる ★ MIDI、モノラル出力、ポテンショメーター*4 ★ Seeed Studio
XIAO RP2040 ★ PCM5102A
Basic Osc v1.1 ★ XIAO RP2040 -----------------> ★ ちいさくて扱いやすい ★
patch.rbをPCでmrbcでコンパイル ★ RP2040のmruby/c VMで実行 ★ ★ synth = MidiSynth.new(channel: 4) while true synth.detune_cents = (Pot.read(0) - 2048) * 10 基本的にはC拡張で定義をする synth.harmonic_ratio = 2 + Pot.read(1) * 6 / 4 synth.harmonic_mix = Pot.read(2) / 4095.0 右みたいなコードが動く(簡略板) synth.release_ms = 5 + Pot.read(3) * 1995 / 40 end
None
↑シーケンサー(いいやつ) ←ドラムマシン 今回は簡単な デモなのでキックだけ シンセサイザー↑ ポットを取り付けて いなくてもうごく
↑シーケンサー(いいやつ) ←ドラムマシン DEMO シンセサイザー↑ 今回は簡単な デモなのでキックだけ ポットを取り付けて いなくてもうごく
Basic Osc v1.1 ★ 素朴なつくりの割にいい感じ に動く ★ 毎回ビルドして転送している とテンポが悪い →
★ たのしい ★ もっとよくしたいぞ!
試行錯誤をしまくりだが 省略2 無限に話したいので機会を見つけたい2
v5.x(実機は制作中)
Basic Osc v5.x ★ MIDI IN/Thru(CV/Gateにするかも), オーディオ L/R, ポット4つ ★
Seeed Studio XIAO RP2350 ★ RP2040で遭遇した大量のRubyオブジェクト生成時のメモリ不足を回避 できる ★ Daisy Seed 3 ★ 一般的な音楽のハードウェアで使う基板(円安で1枚4500円ぐらい) ★ Teensy 4.1とかも仲間
Daisy Seed 3 ★ フィルターやエフェクトをリアルタイ ムにやるにはRP2040/RP2350の処理 能力が不足 ★ そこで、PicoRubyによる制御とリア ルタイムDSPを分離し、音声処理のタ
イミングを安定させる
どうやってRP2350とSeed3を通信するか ★ マイコン同士はUARTで通信をする ★ Seed3には外部フラッシュメモリ(QSPI)があり比較的大きな データをおける ★ 自作の中間表現(仮称Graph IR)を定義した ★
UART経由で中間表現のバイナリを転送する ★ バイナリを介してSeed3のネイティブDSPで音を再生できる
Graph IR (Intermediate Representation) ★ 楽器の構造を作るためのNodeとEdgeの関係を定義する ★ NodeとEdgeで信号の流れを表すのでGraphと呼んでいる ★ 絶賛開発中なので名前は変わるかも
★ 仕様とかもまだ全然変わる ★ 場: github.com/asonas/partch ★ push してないファイル多数...
データの構造 今のGraph IR graph = Partch.graph do osc = oscillator(:sine,
frequency_hz: 440) env = adsr(osc, attack: 0.01, release: 0.4) amp = gain(env, level: 0.2) output(amp) end ★ おおざっぱな関係を示してます ★ edge̲startとかでNodeがどこにつながっ ているのかを表現している Node #1 { type: oscillator, parameter_start: 0, parameter_count: 4, edge_start: 0, edge_count: 1 } Node #2 { type: adsr, parameter_start: 4, parameter_count: 5, edge_start: 1, edge_count: 1 } Node #3 { type: gain, parameter_start: 9, parameter_count: 1, edge_start: 2, edge_count: 1 } Node #4 { type: stereo_output, parameter_start: 10, parameter_count: 0, edge_start: 3, edge_count: 0 } バイナリにすると以下みたいな構造 PGRF Header │ ├── Node #1: Oscillator ├── Node #2: ADSR ├── Node #3: Gain ├── Node #4: StereoOutput │ ├── Edge: 1 → 2 ├── Edge: 2 → 3 ├── Edge: 3 → 4 │ ├── Oscillator.waveform = sine ├── Oscillator.frequency_hz = 440.0 ├── Oscillator.level = 1.0 ├── Oscillator.gate = 1.0 ├── ADSR.attack = 0.01 ├── ADSR.release = 0.4 ├── ADSR.gate = 1.0 └── Gain.level = 0.2 ※ 一部の必須パラメーターを省略
大まかなフロー ★ RP2350でRubyのコードをバイナリに変換して graph.install! や graph.apply! を呼ぶとUART経由でSeed3側に転送される ★ Seed3側で送られてきたバイナリの検証をして保存 ★
検証に失敗したら直前のバイナリで再生を続ける ★ 検証結果をRP2350向けに返す
None
←RP2350 (PicoRuby) Daisy Seed 3 ↑
←RP2350 (PicoRuby) DEMO Daisy Seed 3 ↑
所感 ★ Ruby側は楽器の構造、Seed3側はリアルタイムDSPに責務を分けられ たのはおもしろいとは思う ★ 一般的(とは?)な楽器の開発のフロー(とは?)からは外れてい る?みんな(だれ?)も似たようなことをしているのだろうか?その 謎を解き明かすために我は電子楽器の製造の聖地、静岡県浜松市へ... ★ 少なくとも任意のプログラミング言語から楽器の構造を組み立てたい
という発想でハードウェアをつくることは稀ではないか(要研究)
将来的な展望 ★ Graph IRの仕様を詰めていくことで表現できることを増やす ★ 基板のバリエーションを増やす ★ オーディオの入力、映像の入力、様々なセンサなど ★ irbでコードを送りつけて音が変わる体験、不思議な気持ちになる
のでみんなにも経験してほしい ★ ので、形になってきたらキットや実装済み基板として頒布したい
None
詳しい人向けFAQ Q: Seed3だけでよくない? はい
詳しい人向けFAQ Q: Seed3だけでよくない? ★ RP2350とSeed3の2マイコンにすることで複雑になる ★ 今回のプロジェクトは音をつくる体験を提供することを目的にして いる ★ Agentic
Codingでつくれるとしても、まずは自分が読めるコー ドから音をつくることで学ぶ必要がある ★ 学んで自分の知識と経験にすることで次の未知の領域へ進める (と信じてる)
詳しい人向けFAQ Q: Seed3だけでよくない? ★ ちなみに回路上RP2350とSeed3は独立している ★ RP2350がなくともSeed3は音を発せられる ★ 【完全に理解したら】RP2350を介さずに直接Seed3にファー ムウェアを書いて音を鳴らすこともできる