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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
あそなす
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
230
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
What the customer really needed
kawaguti
PRO
3
220
白金鉱業Meetup Vol.25 アウトカムが二値のデータに対するCausal Impact
brainpadpr
0
290
技術的負債から考える、AI時代のエンジニアリング投資 — ビズリーチの技術的負債と向き合った経験から、変更し続けられるソフトウェアを考える/ technical-debt-con2026
visional_engineering_and_design
4
3.7k
「ピッケル本」日本語版は4.0(第6版)が出版されるべき / pickaxe4-nagoyark05
kakutani
2
290
AWS DevOps Agent スキルをつかいこなそう / Master AWS DevOps Agent Skills
kinunori
1
270
AgentCore Runtime上にAgentic Coding基盤を構築・展開する際の設計ポイントと限界点 / Design considerations and limitations when building an agentic coding platform on AgentCore Runtime
har1101
6
730
CI/CDではもう遅い - 人とAIが迂回しないDevSecOps Verify基盤の再設計 -
kintotechdev
0
110
Mastering Agentic Development: Harness Engineering for Effective Coding Agents
konippi
3
460
高負荷プロダクション環境におけるAWS Lambdaのリアル 〜スケールとコストを左右する実行ライフサイクルの技術仕様〜
maimyyym
2
200
現場で役立つ技術負債の効果的な返済方法
masuda220
PRO
11
5.1k
aws-iot-platform-architecture-use-cases.pdf
ma2shita
0
590
SREの視点で考えるSIEM活用術 〜AWS環境でのセキュリティ強化〜
cscengineer
PRO
0
320
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
What's in a price? How to price your products and services
michaelherold
247
13k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
370
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
340
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
Designing for Performance
lara
611
70k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
290
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
240
Site-Speed That Sticks
csswizardry
13
1.5k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
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にファー ムウェアを書いて音を鳴らすこともできる