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.2k
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
Some Music Libraries for Kotlin (with some .NET -> Kotlin migration stories)
atsushieno
0
240
Building App Extensions equivalents on Android (maybe?)
atsushieno
1
450
Taking trends in music app development into the future mobile ecosystem
atsushieno
0
400
DTM entry level hands-on
atsushieno
0
510
[COSCUP2024] Catching up Trends in Audio App Development
atsushieno
0
840
Building Kotlin Multiplatform Libraries in 2024
atsushieno
0
4.1k
Kotlin Multiplatformで MIDI 1.0/2.0 ライブラリを作っている話
atsushieno
1
790
building_audio_plugin_ecosystem_on_Android.pdf
atsushieno
0
1.2k
get updated to the latest realtime audio processings knowledge base (2023) (再履修: 2023年までの リアルタイムオーディオ処理)
atsushieno
1
1.2k
Other Decks in Technology
See All in Technology
Datasets for Critical Operations by Dataform
kimujun
0
120
今日からあなたもGeminiを好きになる
subaruhello
1
660
2025/07/22_家族アルバム みてねのCRE における生成AI活用事例
masartz
2
150
Vision Language Modelと自動運転AIの最前線_20250730
yuyamaguchi
2
750
AI駆動開発 with MixLeap Study【大阪支部 #3】
lycorptech_jp
PRO
0
270
経理出身PdMがAIプロダクト開発を_ハンズオンで学んだ話.pdf
shunsukenarita
1
240
人と生成AIの協調意思決定/Co‑decision making by people and generative AI
moriyuya
0
180
LLM開発を支えるエヌビディアの生成AIエコシステム
acceleratedmu3n
0
340
株式会社島津製作所_研究開発(集団協業と知的生産)の現場を支える、OSS知識基盤システムの導入
akahane92
1
1.3k
帳票構造化タスクにおけるLLMファインチューニングの性能評価
yosukeyoshida
1
120
AIエージェントを支える設計
tkikuchi1002
11
2.4k
地域コミュニティへの「感謝」と「恩返し」 / 20250726jawsug-tochigi
kasacchiful
0
110
Featured
See All Featured
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1k
Facilitating Awesome Meetings
lara
54
6.5k
The Cult of Friendly URLs
andyhume
79
6.5k
It's Worth the Effort
3n
185
28k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
110
19k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
530
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
5.9k
Agile that works and the tools we love
rasmusluckow
329
21k
BBQ
matthewcrist
89
9.8k
Raft: Consensus for Rubyists
vanstee
140
7k
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