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
170
The ScrumMaster's Guide to the Galaxy
asonas
4
1.8k
fukuokarb02
asonas
0
620
Setsuna -counterfeit killer-
asonas
0
240
Other Decks in Technology
See All in Technology
いちAWSエンジニアのAI活用を振り返る #devio2026 / devio osaka 2026 kawahara
masahirokawahara
2
390
Lambda MicroVMsが分からなすぎたので使い所を1から考えてみた
tsukuboshi
2
420
今こそ知りたいAmplifyGen2
mkdev10
2
150
自分で立ててみるLLMサービス
y_sera15
0
130
Execution in the Kingdom of Agents: Reflections on Abstraction and Complexity
bcantrill
0
860
子育てエンジニアの可処分時間が減っても成長を諦めない戦い方
sudoakiy
1
1.4k
契約書画像からの情報抽出に特化した視覚接地モデルを育てる話
sansantech
PRO
1
150
2026-10-01_MagicPod_QAハーネスエンジニアリングとQA組織の未来像
ynisqa1988
1
550
[AWS 秋のクラウドオペレーション祭り 2026]AWS DevOps Agentで変わるリリースと運用対応 ~リリース管理機能と Directed actions のご紹介~
furuton
4
1k
【データ横丁主催】AI Agentがコンテキストを使って仕事をした後、何が残るのか― 組織の経験を次の判断に引き継ぐ「Agent Memory」
shisyu_gaku
2
330
ビジネスを止めない技術的負債の返済のための戦略とその手法 - 技術的負債と向き合う / Complexity and Simplicity
soudai
PRO
3
650
分析の民主化を支えるメタデータ整備の実践
kakehashi
PRO
1
650
Featured
See All Featured
BBQ
matthewcrist
89
10k
Agile that works and the tools we love
rasmusluckow
331
22k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
300
Fantastic passwords and where to find them - at NoRuKo
philnash
52
4k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
The Pragmatic Product Professional
lauravandoore
37
7.5k
WCS-LA-2024
lcolladotor
0
850
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
570
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
The Curse of the Amulet
leimatthew05
3
15k
Utilizing Notion as your number one productivity tool
mfonobong
4
610
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
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にファー ムウェアを書いて音を鳴らすこともできる