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 までご一報いただけると幸いです。