Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
module Synths; end
Search
あそなす
September 06, 2026
Technology
160
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
240
Generative Sequencer - and thus... onward to PicoRuby
asonas
1
210
How to make the Groovebox
asonas
2
2.5k
RubyKaigi 2025 pre-event
asonas
0
1.3k
Practical The One Person Framework
asonas
1
5.9k
kosendj-sharp-1-report
asonas
0
180
The ScrumMaster's Guide to the Galaxy
asonas
4
1.9k
fukuokarb02
asonas
0
630
Setsuna -counterfeit killer-
asonas
0
240
Other Decks in Technology
See All in Technology
二歩目のフロントエンド・ウェブアクセシビリティ
camiha
2
390
「Docker Desktop不要の時代」は 来たのか?
ueponx
0
570
継続的なAIコスト最適化
bgpat
1
290
大型犬好きによるPugの紹介
yamanoku
1
150
⾮構造化データを価値に変える AI エージェント基盤とその組織
ivry_presentationmaterials
0
140
事業成長とデータ活用を止めないためのマネジメントへ挑戦
hiracky16
0
310
ゲームのリアルタイム通信から見た QUIC と MoQ
segadevtech
0
110
会社説明資料
persolserverworks
0
9.7k
SREでアラート疲れを 解決しよう!
kairim0
1
230
LLM機能を自作して分かるSnowflake Cortex AIの強み
nayuts
0
370
WasmをRustにする
sansantech
PRO
0
200
Essential architectural thinking (revised edition)
ufried
0
120
Featured
See All Featured
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
320
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5.2k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
570
A Soul's Torment
seathinner
8
3.7k
What the history of the web can teach us about the future of AI
inesmontani
PRO
2
740
Design in an AI World
tapps
1
350
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
700
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.7k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
800
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Building Applications with DynamoDB
mza
96
7.2k
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にファー ムウェアを書いて音を鳴らすこともできる