Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
187 changes: 134 additions & 53 deletions readme.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,27 @@

ヤマハのFM音源をエミュレーションするymfm(https://github.com/aaronsgiles/ymfm)
をMIDIプレーヤーとして実装したymfmidi(https://github.com/devinacker/ymfmidi)
をさらにWindowsへ勝手に移植したものです。
をさらにWindowsへ移植したものです。

本ソフトウェアは、ヤマハのOPL系チップのFM音源をエミュレーションし、Windowsの
MIDI環境(midiIn/Out API)からFM音源を利用可能にすることを目的としています。

□特徴
・ymfmidiをWindows向けにほぼ完全移植
・FM音源風サウンドフォントではなく完全なFM音源エミュレーション
・定義ファイルで音色を変更可能
・常駐させてMIDI INデバイスとして使用可能
・FM音源風サウンドフォントではなく、完全なFM音源エミュレーション
 ・YAMAHA OPL系チップ(種類選択可能)を再現
 ・波形合成レベルでのエミュレーション
 ・チップの複数使用によって同時発音数を増加可能
・従来のFM MIDIよりもMIDI仕様への互換性が向上
 ・GM/GS/XGの処理に対応(音色定義を調整することで、さらに互換性を向上可能)
 ・過去のWindows FM MIDIで正しく処理されていなかった仕様を修正
  (ピッチベンド周りなど)
・WindowsネイティブなMIDIデバイスとして動作
 ・MIDI INデバイスとして使用可能な常駐型ソフトウェアシンセサイザー
 ・loopMIDI等の仮想MIDIケーブルを使用することで、
  Windows標準のmidiOut API対応アプリケーションから利用可能
・リアルタイム再生&オフラインレンダリング
 ・MIDIメッセージをリアルタイムに処理し、音声出力可能
 ・MIDI再生結果をWAVファイルとして書き出し可能


●動作環境
Expand All @@ -28,34 +42,64 @@ loopMIDIを使用すると、同じ名前のMIDI INとMIDI OUTが出現します
あるソフトのMIDI OUTとこのプログラムのMIDI INを同じloopMIDIデバイスにすれば
あるソフトで再生されたMIDIをそのままこのプログラムへ送り込んで再生出来ます。

最近のWindowsはMIDIマッパーがなくなったため、デフォルトのMIDI出力デバイスを変更
できなくなりました。変更したい場合はCoolSoft MIDIMapper等を使用してください。


●アンインストール
レジストリは使用していませんのでそのまま削除してください。


●使い方
①ただのMIDIプレーヤーとして使う場合
ymfmidiwin.exe(OSが32bitの場合ymfmidiwin32.exe)にMIDIファイルを入れると再生されます。音色やOPLの種類・数などはコマンドライン引数で指示できます。

②MIDI再生デバイスとして使う場合
あらかじめloopMIDI等を入れておきます。そのあとで
ymfmidiwin.exe -t //MIDIIN0
(OSが32bitの場合ymfmidiwin32.exe)
と実行するとタスクトレイに常駐します。右クリックメニューで終了できます。
//MIDIIN1等と書くと別のMIDI INデバイスを指定できます。

-tの常駐状態ではタスクトレイアイコンの右クリックメニューで操作できます。
・[MIDI IN] - 使用しているMIDI INを表します
・[PATCH] - 使用している音色定義ファイルを表します
・[MODE] - 現在の音源のモードを表します
・MIDI Panic - 音が鳴りっぱなしになって止まらないときに音を止めます
・Reset - 指定したモードで音源を強制リセットします
・About - バージョン情報等を表示
・Restart - アプリケーションを再起動する(音が鳴らなくなったとき等に使用)
・Exit - 終了する


●コマンドライン引数の説明
コンソール版のymfmidiwin.exe(OSが32bitの場合ymfmidiwin32.exe)と
常駐版のymfmidiwin-synth.exe(OSが32bitの場合ymfmidiwin-synth32.exe)の
2種類に分かれています。コンソール版はオリジナルのymfmidiに相当します。
・コンソール版 - MIDIファイル再生、MIDI→WAV変換、検証用途に使用
・常駐版 - WindowsのMIDI再生デバイスにする場合に使用

①MIDIファイルを再生・WAV変換する場合(コンソール版)
MIDIファイルを引数に指定して起動すると再生されます。
Windowsエクスプローラなら単にドラッグアンドドロップでOKです。

ymfmidiwin.exe MIDIファイル名

音色定義ファイル・OPLチップの種類・数などはコマンドライン引数で指示できます。
WAV変換したい場合は、/o . オプションを付けるのが簡単です。

ymfmidiwin.exe /o . MIDIファイル名

こうすると、元のMIDIファイル名に_ymfm.wavを付けたファイルに出力されます。

②WindowsのMIDI再生デバイスとして使う場合(常駐版)
◇準備
MIDI INデバイスが必要です。物理的に用意するか、loopMIDIなどの仮想MIDIケーブルを
インストールし、仮想MIDI INデバイスを作成してください。

◇起動
ymfmidiwin-synth.exe
のように起動すると、最初の MIDI INデバイスを使用してタスクトレイに常駐します。

◇MIDI INデバイスを指定する場合
ymfmidiwin-synth.exe -t //MIDIIN1
のように、//MIDIIN<番号>を指定することでMIDI IN デバイスを変更できます。

◇タスクトレイ常駐時の操作
タスクトレイアイコンを右クリックすると、以下の操作が可能です。
・[MIDI IN] - 使用中のMIDI INデバイスを表示
・[PATCH] - 使用中の音色定義ファイルを表示
・[MODE] - 現在の音源モードを表示
・MIDI Panic - 音が鳴りっぱなしになった場合に強制停止
・Reset - 指定モードで音源をリセット
・About - バージョン情報を表示
・Restart - アプリケーションを再起動(音が出なくなった場合など)
・Exit - 終了

◇コンソール版をMIDI INデバイスとして使う
コンソール版も//MIDIIN<番号>と書くとMIDI INデバイスモードになります。
この場合、コンソールで再生状況を確認できます。


●コンソール版コマンドライン引数の説明
ymfmidiwin [オプション] MIDIファイル名 [音色データファイル名]

対応MIDIファイルフォーマット: HMI, HMP, MID, MUS, RMI, XMI
Expand All @@ -79,7 +123,6 @@ MIDIファイル名として//MIDIINと書くとMIDI INデバイスとして常
-r / --rate <num> WAV出力サンプリングレート(デフォルト44100)
-f / --filter <num> Hz単位のハイパスフィルタカットオフ (default 5.0)

-t / --tray コンソール表示せずにタスクトレイに常駐する
-p / --ptime スリープ状態へ移行する時間(ミリ秒単位; default 15000)

--resampler <nearest|linear|sinc_fast|sinc_medium|sinc_best>
Expand All @@ -94,7 +137,7 @@ MIDIファイル名として//MIDIINと書くとMIDI INデバイスとして常
末尾の余韻が切れてしまう場合に使用します
指定しない場合は余韻分の時間を自動判定します

なお、MIDIファイル名と音色データ名は必ずオプションの後に書く必要があります。
MIDIファイル名と音色データ名は必ずオプションの後に書く必要があります。
オフションの前にファイル指定すると動きません。

□典型的なオプション例
Expand All @@ -111,38 +154,71 @@ ymfmidiwin -o WAVファイル名 MIDIファイル名
MIDI INデバイスモード(コンソール)
ymfmidiwin //MIDIIN

MIDI INデバイスモード(タスクトレイ常駐)
ymfmidiwin -t //MIDIIN

指定したMIDIファイルを_ymfm.wavを付けてへ出力する
ymfmidiwin -o . MIDIファイル名
→ 例えば、test.midならtest_ymfm.wavへ出力


Windows FM MIDIパッチファイル FMSYNTH.BINについて
Windows標準のFM MIDI風の音色にしたい場合は、WindowsのSB16 FM MIDIドライバから
パラメータを持ってくる必要があります
常駐版コマンドライン引数の説明
コンソール版と同じオプションが使用できます。
ただし、コンソール表示がなくなるため再生状況などの確認はできません

WinDDKにこのパラメータ定義がありますが、本来の目的外での配布は恐らく不味いので
組み込むことはしません。 その代わりに、Windows NT4 DDKのSB16サンプルドライバに
含まれるFMSYNTH.BINを引数に渡すと音色データとして読み込めるようにしておきました。
ただしドラムはOPLのドラムモード依存(ymfmidi未対応)のようなので、ドラムだけは
GENMIDI.op2から読むようにしています。 GENMIDI.op2をymfmidiwin.exeと同じ場所に
置いておいてください。

実はDDKを持っていなくても、NT4用のSound BlasterドライバのDLL(sndblst.dll等)にも
全く同じものがリソースとして含まれています。 そこで、FMSYNTH.BIN相当のリソースを
含むDLLを引数に渡したときにもリソースを引き抜いて使えるようにしておきました
●Windows FM MIDIパッチファイル(FMSYNTH.BIN)について
Windows標準のFM MIDI音源に近い音色で再生したい場合、Windows標準のSound Blaster
16ドライバで使用されている音色パラメータが必要になります。この実体はWindows NT4 DDKサンプルに含まれるFMSYNTH.BINです

ただし、このパラメータ定義は本来ドライバ開発用(DDK)に含まれるものであり、
目的外での再配布は適切でない可能性があるため、本ソフトウェアにはFMSYNTH.BINを
同梱していません。その代替手段として以下の方法に対応しています。

●その他情報
FM音源チップをエミュレーションしている関係上、再生時の負荷はまあまあ大きいです。
動作が重たい場合、--quietモードにすると多少は負荷が減ります。
また、常駐状態の時はいつでもMIDI INを受け付けられるように待機状態になっています。
これだとCPUを無駄に使いますので、デフォルトでは15秒間何も送られなかった場合に
スリープ状態になるようにしています。つまり、15秒間MIDIメッセージを送らないと音が
止まります。スリープ状態ときにMIDIメッセージを送ると再びアクティブになります。
この時間は-pオプションで変更できます。0を指定した場合はスリープしません。
①DDKサンプルのFMSYNTH.BINを使用する方法
Windows NT4 DDKに含まれるSound Blaster 16 サンプルドライバのFMSYNTH.BINを
音色定義ファイルとして指定すると読み込めます。

(例)ymfmidiwin //MIDIIN FMSYNTH.BIN

②ドライバDLLから読み込む方法
実はWindows NT4用のSound Blaster系ドライバのDLL(例:sndblst.dllなど)には、
FMSYNTH.BINと同一内容のデータがリソースとして含まれています。

そのため、本ソフトウェアではFMSYNTH.BIN相当のリソースを含むDLLファイルを指定
した場合も、そのリソースから音色データを読み込めるようにしています。

(例)ymfmidiwin //MIDIIN sndblst.dll

FMSYNTH.BIN相当のリソースが含まれていればsndblst.dllでなくても構いません。

◇ドラム音色について
FMSYNTH.BINに含まれるドラム音色はOPLのリズム音に依存していますが、リズム音は
現在のymfmidiでは未対応です。そのため、ドラム音色のみGENMIDI.op2から読み込む
実装になっています。
GENMIDI.op2をymfmidiwin.exeと同じフォルダに配置してください。


●動作負荷について
本ソフトウェアはFM音源チップを波形合成レベルでエミュレーションしているため、
再生時のCPU負荷は比較的高めになります。

負荷が大きかったり音飛びが発生する場合は以下のオプションをお試しください。
・--quiet または -q(コンソール版)
描画や状態表示を省略し、負荷を軽減できます。
・--resampler linear
サンプリング変換を線形補間にすることで、再生品質を妥協して負荷を下げます。
最近傍補間(nearest)はエイリアシングノイズが激しく出るのでおすすめしません。


●常駐時のスリープ機能について
常駐モードでは、常にMIDI INを受信可能な状態で待機しています。この際にOPLを常時
稼働状態に維持するとCPUを無駄に消費してしまいます。そこで、本ソフトウェアには
一定時間MIDIメッセージが来なかった時に、OPLエミュレーションと音声出力を停止する
(スリープ状態にする)仕組みが用意されています。

デフォルトでは、15秒間MIDIメッセージが受信出来ないときにスリープ状態へ移行し、
スリープ中にMIDIメッセージを受信すると自動的に復帰します。

この待機時間は、-p <時間(ms)> オプションで変更できます。
-p 0 を指定すると、スリープ機能を無効化します。


●免責事項
Expand All @@ -151,8 +227,13 @@ FM音源チップをエミュレーションしている関係上、再生時の


●バージョン履歴
2025/12/25 ver.0.6.3.0
・コンソール版と常駐版を分離してセキュリティソフト誤検知をされにくくした
・音色定義が読めなかったとき終了し損なうバグを修正
・スリープ時のポーリングを止めてさらにCPU負荷を下げた

2025/12/24 ver.0.6.2.2
・MIDI Panic周辺の実装を整理したGS Resetが誤爆してしまう不具合を修正
・MIDI Panic周辺の実装を整理した
・常駐時の右クリックメニューに使用している音色パッチ等を表示するようにした

2025/12/23 ver.0.6.2.1
Expand Down
Loading