TTiMidityControl
  -  timidity.dllをDelphiで手軽に使うためのコンポーネント
  -  Version 1.0α Maked by PT2K <webmaster@pt2k.xii.jp> 2002/07/07
  -  for Borland Delphi 5.0


はじめに

TiMidity++をWin32のDynamic Link Libraryにカプセル化したものがtimidity.dllです。
それまでの、独立したアプリケーションとしてのTiMidity++では実現できない、多彩なユ
ーザーインターフェースを持ったWindowsアプリケーションを構築できる可能性を秘めて
はいるものの、制約事項があったりと、いまひとつ使いにくいものでした。そこで、
Delphiで、timidity.dllを簡単に操作できるコンポーネントを作ってみました。


インストール

TimCtrl.pasとTimCtrl.dcrを適当なディレクトリに入れて、Delphiの「コンポーネントの
インストール」で、TimCtrl.pasをインストールして下さい。デフォルトでは[Sample]に
TTiMidityControlが追加されます。
アプリケーションで、timidity.dllを使ってMIDIを演奏したり、MIDI→WAVEコンバートを
するためには、別途、timidity.dllと、GUSパッチなどが正常にインストールされている
必要があります。


簡単な使い方

フォームに配置して、
1)FileNameにMIDIファイルかプレイリストファイルを入れる
2)ConfigFileにtimidity.cfgのフルパスを入れる
3)Play()を呼び出す
これだけで、MIDIが演奏できます。
アプリケーションと同じディレクトリに、timidity.cgfという名前の、正しいコンフィギ
ュレーションファイルが存在するなら、2)も要りません(空欄でOK)。


プロパティについて

AcceptMessagesは、どのイベントを発生させるかを指定します。例えば、msgCurrentTime
がTrueなら、OnCurrentTimeイベントが発生します。Falseなら、このイベントは発生しま
せん。
MIDIイベントは膨大な数になります。不必要なイベントはFalseに設定しておくことで、
無駄なオーバーヘッドがなくなり、フリーズする危険性が減少するかもしれません。

その他のプロパティは、演奏開始時にtimidity.dllに渡されるパラメータです。
timidity-con.exeのオプションと同じものです。
どのプロパティがどのオプションに対応するのかは、ソースを見てみて下さい。
それぞれのプロパティがどんな働きをするのか、実は、timidity.dllの作者である私はほ
とんど理解していません f(^へ^;) 。本家・TiMidity++を、わけもわからずそのままパッ
クしただけなので……
でも、それじゃあんまりなので、おもしろい使い方をひとつ……
OutputOptions.Mode := omRIFFWaveFile;
OutputFileName := Somesong.wav;
とすると、MIDI→WAVEコンバートができます(後述の注意点参照のこと)。

すべてのプロパティは、演奏開始時に一括してtimidity.dllに渡されるので、演奏中に変
更しても演奏には影響しません。


イベントについて

OnSpeanaは、timidity.dllで実装されていないので、発生したイベントは意味を持ちませ
ん。


ファイル名について

timidity.dllは、ロングファイル名を扱うことはできますが、半角スペースを含んだファ
イル名(パス)は扱うことができません。そこで、TTiMidityControlでは、ファイル名を
ショートファイル名にしてDLLに渡すことでこの問題を回避しています。
FileNameとConfigFileプロパティには、実在するファイルが入るはずなので問題ないので
すが、OutputFileNameには、新規のファイル(存在しないファイル)が入る可能性があり
ます。この場合、ロングファイル名→ショートファイル名の変換ができません。
OutputFileNameに半角スペースを含んだファイル名を入れる場合には、空のファイルでも
構わないので、ファイルを作成しておくことをお勧めします。そうしないと、恐らく、必
ず異常動作します。


バグ

TTiMidityControlコンポーネントを、同一アプリケーションに複数配置して、同時演奏す
ることはできません。
これは、timidity.dllのバグではなく、TTiMidityControlの制限です。
尤も、複数の曲を同時演奏する意味はあまりないと思いますが。


著作権について

timidity.dllもそうですが、このTTiMidityControlコンポーネントも、作者に断りなく自
由に改変して構いませんし、改変したものを再配布するのも自由です。
ただし、フリーウェアに限ります。
シェアウェア等での使用は許可しません。また、再配布に当たっては、必ず、ソースで配
布して下さい。オブジェクトファイル(.dcu)等での配布は厳に慎んで下さい。

バグレポートや改善提案などありましたら、
メール:webmaster@pt2k.xii.jp
ウェブ:http://pt2k.xii.jp
までご一報いただけると幸いです。

Valid HTML 4.01 Strict