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
Atsushi Eno
December 14, 2021
Technology
1
2.3k
MML to MIDI 2.0 to DAW
at Music LT@1
https://iotlt.connpass.com/event/224144/
Atsushi Eno
December 14, 2021
Tweet
Share
More Decks by Atsushi Eno
See All by Atsushi Eno
Android Audio: Beyond Winning On It
atsushieno
0
5.8k
Can we build better music software ecosystems for more generative era?
atsushieno
0
340
Some Music Libraries for Kotlin (with some .NET -> Kotlin migration stories)
atsushieno
0
590
Building App Extensions equivalents on Android (maybe?)
atsushieno
1
800
Taking trends in music app development into the future mobile ecosystem
atsushieno
0
750
DTM entry level hands-on
atsushieno
0
660
[COSCUP2024] Catching up Trends in Audio App Development
atsushieno
0
860
Building Kotlin Multiplatform Libraries in 2024
atsushieno
1
4.4k
Kotlin Multiplatformで MIDI 1.0/2.0 ライブラリを作っている話
atsushieno
1
840
Other Decks in Technology
See All in Technology
実践マルチモーダル検索!
shibuiwilliam
3
520
Kotlinで型安全にバイテンポラルデータを扱いたい! ReladomoラッパーをAIと実装してみた話
itohiro73
3
140
パフォーマンスチューニングのために普段からできること/Performance Tuning: Daily Practices
fujiwara3
2
180
知覚とデザイン
rinchoku
1
720
2025/10/27 JJUGナイトセミナー WildFlyとQuarkusの 始め方
megascus
0
100
設計に疎いエンジニアでも始めやすいアーキテクチャドキュメント
phaya72
24
16k
累計5000万DLサービスの裏側 – LINEマンガのKotlinで挑む大規模 Server-side ETLの最適化
ldf_tech
0
120
可観測性は開発環境から、開発環境にもオブザーバビリティ導入のススメ
layerx
PRO
4
2.6k
어떤 개발자가 되고 싶은가?
arawn
1
380
abema-trace-sampling-observability-cost-optimization
tetsuya28
0
440
NOT A HOTEL SOFTWARE DECK (2025/11/04)
notahotel
0
800
ストレージエンジニアの仕事と、近年の計算機について / 第58回 情報科学若手の会
pfn
PRO
4
950
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
658
61k
Faster Mobile Websites
deanohume
310
31k
How to Think Like a Performance Engineer
csswizardry
27
2.2k
RailsConf 2023
tenderlove
30
1.3k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.5k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
Context Engineering - Making Every Token Count
addyosmani
8
330
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Thoughts on Productivity
jonyablonski
72
4.9k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
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