Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MML to MIDI 2.0 to DAW

Atsushi Eno
December 14, 2021

MML to MIDI 2.0 to DAW

Atsushi Eno

December 14, 2021
Tweet

More Decks by Atsushi Eno

Other Decks in Technology

Transcript

  1. MML
    to MIDI 2.0
    to DAW
    @Music LT vol. 1

    View Slide

  2. What is this LT about?
    MML(c4e4g4>c4+1みたいな文字列)を
    MIDI 2.0データにコンパイルして、
    それをDAWの楽曲データに変換するツールを
    作っているので、その知見を紹介します。

    View Slide

  3. MML in 2021?
    今は特定分野(チップチューンとか)でしか
    使われていない
    今はDAWでVSTやAUを使う
    MMLだとせいぜいMIDIまで
    でも本来「どう打ち込むか」は「ジャンル」や
    「音源の制約」とは関係ないはず
    テキストで編集したい

    View Slide

  4. 課題
    ● MIDIの範囲ではショボくない…?
    ○ GM音色しか使えない…?
    ○ 7bitしかないパラメーターが …
    ○ パラメーター(コントロールチェンジ)の種類が …
    ● オーディオプラグインをどうやって使う?
    ○ プラグインを識別してトラックごとに指定する必要がある
    ○ パラメーターを(オートメーションや MIDIマッピングみたいに)操作できる必要がある
    ○ プラグインの状態を保存しておいて復元できる必要がある

    View Slide

  5. MIDI 2.0 UMP
    ● MIDI 2.0仕様のひとつとして2020年に標準化
    ● 16チャンネル * 16グループ = 256チャンネルになった
    ● 主にVSTやAUの機能としてサポートされているものがいろいろ増えた
    ○ 32ビットCC/ピッチベンド/プレッシャー
    ○ 16ビットのベロシティ
    ○ ノート別ピッチベンドやノート別コントローラー
    ○ ノートの属性(アーティキュレーションなど)

    View Slide

  6. MML in 2021 !
    ( [MML] → [MIDI 2.0 file] ) + [プラグイン定義] → [DAW(Tracktion) file]
    プラグイン定義には
    JUCE AudioPluginHostを
    流用

    View Slide

  7. 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]

    View Slide

  8. 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]

    View Slide

  9. 作り込んだところ
    ● 編集中に何度も再生する場合はMIDI
    クリップだけを差し替える "Hot
    Reload" 機能 (プレイヤー)
    ● 制作環境に依存せずCI環境でMP3を
    レンダリングできることを実証
    ● ちゃんとしたサンプル楽曲MML
    (atsushieno/augene-ng-production)

    View Slide

  10. おまけ: 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

    View Slide