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
1
2.4k
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
6.3k
Can we build better music software ecosystems for more generative era?
atsushieno
0
750
Some Music Libraries for Kotlin (with some .NET -> Kotlin migration stories)
atsushieno
0
700
Building App Extensions equivalents on Android (maybe?)
atsushieno
1
870
Taking trends in music app development into the future mobile ecosystem
atsushieno
0
820
DTM entry level hands-on
atsushieno
0
730
[COSCUP2024] Catching up Trends in Audio App Development
atsushieno
0
900
Building Kotlin Multiplatform Libraries in 2024
atsushieno
1
4.5k
Kotlin Multiplatformで MIDI 1.0/2.0 ライブラリを作っている話
atsushieno
1
900
Other Decks in Technology
See All in Technology
20260305_【白金鉱業】分析者が地理情報を武器にするための軽量なアドホック分析環境
yucho147
3
220
OpenClawで回す組織運営
jacopen
3
680
組織全体で実現する標準監視設計
yuobayashi
2
470
わたしがセキュアにAWSを使えるわけないじゃん、ムリムリ!(※ムリじゃなかった!?)
cmusudakeisuke
1
490
Exadata Database Service on Dedicated Infrastructure(ExaDB-D) UI スクリーン・キャプチャ集
oracle4engineer
PRO
8
7.2k
Claude Codeの進化と各機能の活かし方
oikon48
21
12k
Dr. Werner Vogelsの14年のキーノートから紐解くエンジニアリング組織への処方箋@JAWS DAYS 2026
p0n
1
120
IBM Bobを使って、PostgreSQLのToDoアプリをDb2へ変換してみよう/202603_Dojo_Bob
mayumihirano
1
300
Yahoo!ショッピングのレコメンデーション・システムにおけるML実践の一例
lycorptech_jp
PRO
1
180
PMBOK第8版は第7版から何が変わったのか(PMBOK第8版概要解説) / 20260304 Takeshi Watarai
shift_evolve
PRO
0
180
DX Improvement at Scale
ntk1000
3
450
楽しく学ぼう!ネットワーク入門
shotashiratori
3
2k
Featured
See All Featured
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
Site-Speed That Sticks
csswizardry
13
1.1k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
480
Unsuck your backbone
ammeep
672
58k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.4k
The Invisible Side of Design
smashingmag
302
51k
Facilitating Awesome Meetings
lara
57
6.8k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
99
Test your architecture with Archunit
thirion
1
2.2k
The Language of Interfaces
destraynor
162
26k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
110
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.1k
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