日本語English

SMF変換ツール(Smf2GoFMML)

スタンダードMIDIファイル(SMF)を読み込み、go-fmmlのMML仕様に変換して .mmlファイルを出力する、独立したコマンドラインツールです。

概要

Smf2GoFMMLは、go-fmmlのコア(FM/PCM合成エンジンやMML再生機能)本体とは別に、 tools/smf2gofmml配下に置かれたスタンドアロンのコマンドラインアプリです。手持ちの スタンダードMIDIファイル(Format 1を想定)を読み込み、トラックごとのノート・テンポ・トラック名など を解析して、go-fmmlのMML仕様に沿った.mmlテキストへ変換・出力します。実行にgo-fmmlの 音声エンジン自体(oto/v3等)は不要で、ファイル変換のみを行います。

変換結果はそのまま使える完成品というより、叩き台です。音色ID・ミュート・リバーブセンド・ ループ設定・コンダクターパートなど、SMFから読み取れない情報はデフォルト値で埋められるため、変換後 にMMLファイル構成仕様MMLコマンド仕様 を参照しながら手動で編集することを前提としています。

ビルド方法

リポジトリのtools/smf2gofmmlディレクトリで、実行ファイルを cmdサブフォルダへ直接ビルドします(ツールは自分自身の実行ファイルの場所を基準に入出力 フォルダを解決するため、この配置が前提です)。

cd tools/smf2gofmml
go build -o cmd/Smf2GoFMML.exe .

使用方法

ビルドした実行ファイル(cmd/Smf2GoFMML.exe)と同じ階層に、入力用の smfフォルダと出力用のconvertフォルダ(無ければ自動作成)が置かれます。

# cmd フォルダに移動して実行
cd tools/smf2gofmml/cmd

# ファイル名のみを指定した場合、同階層の smf フォルダから探索する
Smf2GoFMML.exe bgm1.mid          # 実体は ./smf/bgm1.mid

# 絶対パスを指定した場合はそのまま読み込む
Smf2GoFMML.exe C:\path\to\bgm1.mid
項目内容
起動引数変換対象のSMFファイルパス。フルパス指定、または実行ファイルと同階層の smfフォルダ内のファイル名指定のいずれか。
出力先実行ファイルと同階層のconvertフォルダ(無ければ自動作成)。
出力ファイル名<曲名>.mml。曲名はSMFのシーケンス名/トラック名 メタイベントから取得(Windowsのファイル名として使えない文字は_に置換、取得できない 場合はuntitled)。
エラー時コンソールに理由を出力して終了(読み込み失敗、SMF自体が不正、ノートを含む トラックが1つもない、等)。
警告時変換は継続し、コンソールにwarning:付きで内容を出力(例: パート 上限超過によるトラックスキップ)。

トラック名埋め込み文字列(タグ)

各トラックのトラック名(シーケンス/トラック名メタイベント)の先頭に、以下のタグ文字列を付けて おくことで、変換後にどの種類のパートになるかを指定できます。

タグ変換先パート種別
[FM]FM音色パート([partN]
[PCM long]PCM音色パート・longタイプ([pcmPartX]partType: long
[PCM oneShot]PCM音色パート・oneShotタイプ([pcmPartX]partType: oneShot
タグなしFM音色パート扱い(デフォルト)
タグの判定は大文字小文字を区別せず、[ ]内部の空白([PCM oneShot ][ PCM oneShot ]など)は無視して比較されるため、手入力で多少ゆらいでいても正しく認識 されます。ただし単語自体のスペルは一致させる必要があります(PCM / long / oneShot)。出力される.mmlの各パート設定・パート本体の直前には、タグを 除いた残りのトラック名がコメント(#)として自動的に書き出されます。
# トラック名の例
[FM]Lead
[PCM long]Strings
[PCM oneShot]Drums
Bass                # タグ無し → FM音色パート扱い

データ変換内容

[global]セクション

項目変換内容
tempoSMF内で最初に見つかったテンポメタイベントの値(小数点以下切り 捨て)。見つからない場合はデフォルト120
sequenceIDSMF内で最初に見つかったトラック名(シーケンス名)。ダブル クォーテーションは除去。見つからない場合はuntitled
loop常にfalse(固定デフォルト)。
volume常に100(固定デフォルト)。
reverb常にfalse(固定デフォルト)。
reverbType常にnormal(固定デフォルト)。
reverbTime常に2.0(固定デフォルト)。
reverbLevel常に100(固定デフォルト)。

パート割り当て

パート音量・パン

ノート→MMLコマンド変換(FM / PCM long)

ノート→MMLコマンド変換(PCM oneShot)

注意事項

出力はあくまで下書きです。 音色(voiceID)、ミュート、ソロ、トランスポーズ、 リバーブセンド、コンダクターパート、ループ設定などSMFに存在しない情報は一切変換されず、固定の デフォルト値のまま出力されます。実際の楽曲として仕上げるには、出力された.mmlMMLファイル構成仕様にもとづいて手動編集し、 FM音色パラメータ仕様 / PCM音色パラメータ仕様 で作成した音色ファイルと組み合わせる必要があります。