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
MML to MIDI 2.0 to DAW
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Atsushi Eno
December 14, 2021
Technology
2.5k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
MML to MIDI 2.0 to DAW
at Music LT@1
https://iotlt.connpass.com/event/224144/
Atsushi Eno
December 14, 2021
More Decks by Atsushi Eno
See All by Atsushi Eno
Android and Audio Plugins: State of Union
atsushieno
1
85
Can we build a DAW with Compose Multiplatform? Maybe!
atsushieno
0
12
2026年に相応しい 最先端プラグインホストの設計<del>と実装</del>
atsushieno
0
160
Android Audio: Beyond Winning On It
atsushieno
0
6.4k
Can we build better music software ecosystems for more generative era?
atsushieno
0
800
Some Music Libraries for Kotlin (with some .NET -> Kotlin migration stories)
atsushieno
0
760
Building App Extensions equivalents on Android (maybe?)
atsushieno
1
950
Taking trends in music app development into the future mobile ecosystem
atsushieno
0
900
DTM entry level hands-on
atsushieno
0
790
Other Decks in Technology
See All in Technology
AI時代における最適なQA組織の作り方
ymty
3
170
どうして今サーバーサイドKotlinを選択したのか
nealle
0
110
トークン最適化のためのユーザーストーリー分析 / User Story Analysis for Token Optimization
oomatomo
0
130
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
11k
AI 不只幫你寫 Code: 當專案從 300 暴增到 1500, 我們如何撐住 DevOps
appleboy
0
280
AIをフル活用してオンコール機能のプロトタイプを2日で作った話 / Building an AI-Powered On-Call Prototype in Just Two Days
nari_ex
0
150
CVE-2026-20833_脆弱性対応とAES 化について
jukishiya
0
170
クラウドファンディング版StackChan 3体(4体)をインタラクティブな体験型作品にして展示もした話 / スタックチャンお誕生日会2026
you
PRO
0
240
IaC コードを資産へ:AWS CDK 社内ライブラリと横断展開 / aws-summit-japan-2026
gotok365
10
1.6k
現場のトークンマネジメント
dak2
1
200
水を運ぶ人としてのリーダーシップ
izumii19
4
1.1k
Multi-Agent並列開発を 安全に回すための技術 / Technology for Safely Multi-Agent Parallel Development
tooppoo
0
220
Featured
See All Featured
Typedesign – Prime Four
hannesfritz
42
3.1k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
290
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
210
Marketing to machines
jonoalderson
1
5.5k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
400
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
340
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
Docker and Python
trallard
47
3.9k
Designing for humans not robots
tammielis
254
26k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Transcript
MML to MIDI 2.0 to DAW @Music LT vol. 1
What is this LT about? MML(c4e4g4>c4+1みたいな文字列)を MIDI 2.0データにコンパイルして、 それをDAWの楽曲データに変換するツールを 作っているので、その知見を紹介します。
MML in 2021? 今は特定分野(チップチューンとか)でしか 使われていない 今はDAWでVSTやAUを使う MMLだとせいぜいMIDIまで でも本来「どう打ち込むか」は「ジャンル」や 「音源の制約」とは関係ないはず テキストで編集したい
課題 • MIDIの範囲ではショボくない…? ◦ GM音色しか使えない…? ◦ 7bitしかないパラメーターが … ◦ パラメーター(コントロールチェンジ)の種類が
… • オーディオプラグインをどうやって使う? ◦ プラグインを識別してトラックごとに指定する必要がある ◦ パラメーターを(オートメーションや MIDIマッピングみたいに)操作できる必要がある ◦ プラグインの状態を保存しておいて復元できる必要がある
MIDI 2.0 UMP • MIDI 2.0仕様のひとつとして2020年に標準化 • 16チャンネル * 16グループ
= 256チャンネルになった • 主にVSTやAUの機能としてサポートされているものがいろいろ増えた ◦ 32ビットCC/ピッチベンド/プレッシャー ◦ 16ビットのベロシティ ◦ ノート別ピッチベンドやノート別コントローラー ◦ ノートの属性(アーティキュレーションなど)
MML in 2021 ! ( [MML] → [MIDI 2.0 file]
) + [プラグイン定義] → [DAW(Tracktion) file] プラグイン定義には JUCE AudioPluginHostを 流用
MIDI 2.0対応MMLコンパイラ (atsushieno/mugene-ng) • MMLコンパイラ = テキストからバイトストリームを生成するだけのツール(!) • マクロを定義でき、ほとんどのMML命令はマクロで実装している。 __MIDI
{ #90 + $channel, $key, $vel } • MIDI 2.0 UMP対応もただのバイト配列を生成するだけ __MIDI_NG { #40 + $channel / 16, #90 + $channel % 16, $key, 0, $vel / #100, $vel % #100, $attr / #100, $attr % #100 } ( [MML] → [MIDI 2.0 file] ) + [プラグイン定義] → [DAW(Tracktion) file]
Tracktion Engine / Waveform DAWへ (atsushieno/augene-ng) • DAWは再生系がOSSなTracktion Waveformのみサポート(楽曲はXML) •
TracktionにMIDI 2インポート機能は(当然)無いのでここを自作 • AudioPluginHostで作った定義を楽器名メタイベントでトラックと関連付け • プラグインパラメーターを操作する ◦ DAW側 (Tracktion): 「オートメーショントラック」に出力する ◦ MIDI側: パラメーター設定はシステムエクスクルーシブで CCのように指定 ( [MML] → [MIDI 2.0 file] ) + [プラグイン定義] → [DAW(Tracktion) file]
作り込んだところ • 編集中に何度も再生する場合はMIDI クリップだけを差し替える "Hot Reload" 機能 (プレイヤー) • 制作環境に依存せずCI環境でMP3を
レンダリングできることを実証 • ちゃんとしたサンプル楽曲MML (atsushieno/augene-ng-production)
おまけ: MIDI 2.0 development libraries まだほとんど無い • Apple CoreMIDI: Swift,
ObjC, C++ (たぶん) • juce-framework/JUCE (juce::universal_midi_packets): C++ • atsushieno/ktmidi : Kotlin (Multiplatform) • atsushieno/cmidi2 : header-only C