楽譜

MML・MIDI・MusicXML は、いずれも共通の組版エンジン(converter/internal/music)が SMuFL のフォント Bravura で A4 のページに五線譜として組む。各 View はその音楽を Standard MIDI File として持つので、デモビューアで演奏できる。演奏の仕組みは変換と出力 → 楽譜と演奏を参照してほしい。共通なのはそこまでで、MML と MIDI は演奏データから記譜そのものを組み立て直す必要があるのに対し、MusicXML はすでに書かれた記譜をそのまま読む。

ギターTABの運指候補

ビューアの Display から Score(五線譜)・Piano roll(ピアノロール)・Guitar TAB(ギターTAB) を直接切り替えられる。Guitar TAB ではパートと運指方針を選ぶ。方針は低いポジション優先(Low positions)、ポジション移動を減らす(Less shifting)、開放弦を積極的に使う(Open strings)、初心者向け(Beginner friendly)の4種類。どれも「実際にその運指で演奏した」という記録ではなく、標準チューニング E A D G B E を前提にした推定候補である。TAB でも五線譜と同じ音楽を、速度調整とメトロノームを使って再生できる。

各音高の弦・フレット候補を列挙し、フレーズ全体の手の移動量も考慮して選ぶ。同時または重なって鳴る音を同じ弦に置かず、和音の押弦は4〜5フレットの範囲に収める。MusicXML の <notations><technical> にある <string>・<fret> は優先し、和音内で衝突するときだけ別の候補を検討する。ギターの音域外の音、演奏不可能な和音、5番目以降の有音高パート、2万音を超えるパートはTABから省き、変換時に警告する。TABが不要なら -param tab=false を指定できる。

試す

ビューアにファイルをドロップするか、サンプルを試せる。MML のチップチューン、歌詞付きの MIDI カラオケ、MusicXML のピアノ譜。Display から表示を選び、再生速度を%で調整できる(曲中のテンポ比は維持され、冒頭の換算 BPM を表示)。再生中にはメトロノームも有効にできる。

MML(converter/mml)

MML と MIDI はどちらも演奏されたとおりのデータ(記譜済みではなく、時刻と長さのある音の並び)なので、組む前に共通の記譜の工程(Notate)を通す。音を音価に量子化し(拍や小節線をまたぐタイ、付点、3 連符)、小節と 1 段あたり最大 2 声部に分け、調(ファイルのもの、なければ音から推定したもの)で綴り、音域から音部記号を選ぶ(鍵盤楽器は大譜表になる)。

converter/mml は中身から 3 つの方言を判別する。汎用(FlMML と BASIC の PLAY 文)、マビノギの MML@…;、ファミコンの MCK・PPMCK のトラック行形式である。署名のない .mml ファイルで、MML と判別できる行が 2 行に満たないものは、中身に判別の手がかりが無いため拡張子だけで MML と判定される。

オプション 値 既定
dialect auto、generic(FlMML、MSX BASIC)、mabinogi(MML@…;)、ppmck(ファミコンの MCK・PPMCK) auto
octave auto、normal(> でオクターブが上がる)、reverse(< で上がる) auto — 方言ごとの既定
time 拍子記号。例: 3/4、6/8 4/4
key 調号。例: G、Bb、F#m、Em 音から推定
program 音色の指定が無いトラックの General MIDI プログラム番号(0〜127) 方言ごとの既定
tab true または false true

MIDI(converter/midi)

converter/midi は Standard MIDI File のフォーマット 0・1・2 と RIFF の RMID を読む。トラック(またはトラックとチャンネルの組)ごとにパートになり、名前はトラック名、無ければ General MIDI のプログラム名を使う。カラオケの歌詞(.kar の文字、またはメタイベント 05)は、最も合うトラックの音符に付く。MML と同じく、MIDI の音符も演奏されたとおりのデータなので、上と同じ Notate の工程を経て記譜される。

オプション 値 既定
time 拍子記号(3/4、6/8、C は 4/4、cut) ファイルのもの
key 調号(G、Bb、F#m、または 2 つのフラットを表す -2) ファイルのもの、無ければ音から推定
tab true または false true

MusicXML(converter/musicxml)

MusicXML は MML や MIDI と違い、演奏データから記譜し直すのではなく書かれたとおりに読む。複数の段のパート、声部、和音、連桁、連符、装飾音、臨時記号、タイとスラー、アーティキュレーションと装飾記号、強弱記号とヘアピン、節ごとの歌詞、音部記号・調号・拍子の変更、繰り返しと括弧、速度記号とリハーサルマーク、段の区切りは、すべてファイル自身の記述からそのまま読む。partwise・timewise のどちらの文書形式も、圧縮した .mxl も読む。演奏は繰り返しと、D.C.・D.S.・Fine・To Coda のような跳躍を展開して行う。

MusicXML では -param tab=false で推定TABの View を省ける。五線譜は引き続き元データの記譜どおりに変換される。

共通の組版エンジン(小節の間隔、符幹と連桁、タイとスラー、歌詞の折り返しなど)の内部は design.md §3.27 を参照。