本ソフトウェアは、標準MIDIファイル (SMF) フォーマット0または1を、MIDIストリーム (MDS) ファイルに変換します。32ビット版Windows (Intel x86) の日本語環境下でのみ使用できます。
本ソフトウェアは、標準MIDIファイル (SMF) をMIDIストリーム (MDS) ファイルに変換するという目的において、DirectX SDKのサンプルにある「Mid2strm: Converts MIDI File into MDS (MidiStream) File」と似ています。しかし、以下の点で「Mid2strm」よりも優れています。
- SMFのSysexイベントを無視せず、MDSファイルに反映させます。
- SMFに題名や著作権情報が含まれる場合、MDSファイルに反映させます。
- ストリーム バッファの最大サイズを、1KB単位で指定できます。
- ランニング ステータスを使用するかどうかを指定できます。
- 2について:
- 具体的には、"LIST"チャンク (フォーム タイプは"INFO") を作成し、題名を"INAM"チャンクに、著作権情報を"ICOP"チャンクに書き込みます。これは、マイクロソフト社とIBM社が共同で作成した「Multimedia Programming Interface and Data Specifications 1.0」に沿った動作です。
目次へ: 本ソフトウェアの特徴
2.1. インストール方法
- smf2mds.zipを解凍します。
- ファイルの読み書きが可能なドライブに、適当な名前のフォルダを作成します。
- 解凍してできたファイルを、2.で作成したフォルダに移します。すでに以前のバージョンがインストールされている場合は、2.の手順を省略し、以前のフォルダに上書きコピーしてもかまいません。
2.2. アンインストール方法
- 本ソフトウェアを終了します。
- 本ソフトウェアをインストールしたフォルダ内にある、以下の三つのファイルを削除します。
- smf2mds.exe
- smf2mds.html
- smf2mds.ini (存在しない場合もあります)
- 本ソフトウェアをインストールしたフォルダ内に、上記以外のファイルやフォルダが無ければ、本ソフトウェアをインストールしたフォルダも削除します。
目次へ: 本ソフトウェアのインストール方法、アンインストール方法
4.1. 著作権
- 本ソフトウェアは、フリーソフトウェアです。本ソフトウェアとそれに付随する文章の著作権は、テテが保持します。
4.2. 使用条件
- テテは、本ソフトウェアの使用、およびそれに付随する行為において、使用者等に起こりうる、いかなる損害もその責を負いません。
- テテは、本ソフトウェアのバージョンアップの義務を負いません。ただし、本ソフトウェアの不具合や、使ってみた感想は、ぜひお寄せください。今後の開発の参考にさせていただきます。
- 本ソフトウェアの再配布は、アーカイブに含まれるファイルの改変やファイルの追加・削除を行っていない場合に限り、許可いたします。
何らかの媒体に転載を希望する場合は、ご一報ください。
4.3. 連絡先およびWWWサイト
目次へ: 著作権、使用条件、連絡先およびWWWサイト
MDSファイルの形式は、WindowsのMIDIストリーム系のAPI (midiStream〜) を用いてMIDIデータを演奏するのに適しています。MIDIストリーム系のAPIは、Windows 95以上やWindows NT 3.1以上に実装されています。
MDSファイルは、リソース交換ファイル形式 (RIFF) で記述されます。そのため、MDSファイルの読み書きには、マルチメディア ファイルI/O API (mmio〜) を用いると楽です。
6.1. MDSファイルのチャンクの構造を示した表:
MDSファイルのチャンクの構造
チャンク名 |
チャンクの解説 |
"RIFF" |
ルートに位置するチャンクです。フォーム タイプは、"MIDS"です。 |
"fmt " |
MIDSFMT構造体を格納するチャンクです。MIDSFMT構造体は、C言語で以下のように定義されています。typedef struct {
DWORD dwTimeFormat;
DWORD cbMaxBuffer;
DWORD dwFlags;
} MIDSFMT;
- dwTimeFormat:
- SMFのタイム形式を指定するのと同じやり方で、MIDIイベント間の時間 (デルタタイム) の表現方法を指定します。
- cbMaxBuffer:
- ストリーム バッファの最大サイズをバイト単位で指定します。この値は、必ず4の倍数を指定しなければなりません。なぜなら、ストリーム バッファは、MIDIEVENT構造体を連ねたものだからです。MIDIEVENT構造体の実態はというと、DWORD値の配列です。
また、この値は65536未満でなければなりません。理由は、現在のWindowsの実装では、各ストリーム バッファの最大サイズは、64キロバイト未満でなければならないからです。
- dwFlags:
- MDSファイルの形式を指定します。ストリーム バッファ内のストリームIDを省略しない場合は0を指定し、省略する場合は1を指定します。
|
"data" |
ストリーム バッファなどを格納するチャンクです。まず最初に、ストリーム バッファの個数をDWORD値で指定します。以降は、ストリーム バッファのヘッダとストリーム バッファの内容を、ストリーム バッファの個数のぶんだけ繰り返し指定します。 |
ストリーム バッファのヘッダとストリーム バッファの内容
概要 |
解説 |
ストリーム バッファのヘッダ (MIDSBUFFER構造体) |
ストリーム バッファのヘッダは、MIDSBUFFER構造体です。MIDSBUFFER構造体は、C言語で以下のように定義されています。typedef struct {
DWORD tkStart;
DWORD cbBuffer;
} MIDSBUFFER;
- tkStart:
- 曲の先頭からの時間を指定します。
たとえば、MIDIイベント間の時間 (デルタタイム) の表現に「四分音符当たりのティック数 (TPQN)」を用いている場合は、曲の先頭からのティック数を指定します。
- cbBuffer:
- このストリーム バッファの内容のサイズを、バイト単位で指定します。MIDSBUFFER構造体のサイズは含めません。
前に書いたように、ストリーム バッファのサイズは、4の倍数でなければなりません。 それからこの値は、ストリームIDを省略しない場合は65536未満でなければなりません。 一方、ストリームIDを省略する場合は、(65536 - 省略したストリームIDのバイト数)未満でなければなりません。なぜなら、ストリームIDを省略した場合は、そのストリーム バッファをMIDIストリーム系のAPIへ渡す前に、プログラマの手でストリームIDを復元する必要があるからです。
|
ストリーム バッファの内容 (MIDIEVENT構造体の連なり) |
ストリーム バッファの内容は、MIDIEVENT構造体の連なりです。注意すべき点は、MDSファイルは、ストリームID (dwStreamID) を省略することもできることです。ストリームIDが省略されているストリーム バッファは、このままではMIDIストリーム系のAPIに渡すことができません (エラーを返します)。この場合、プログラマの責任でストリームIDを補う必要があります。 |
目次へ: MDSファイルの構造について