最初に、MIDI ファイル自体は MP3 と同じように「再生」されないことを明確にする必要があります。MIDI ファイルには実際の音楽はありません。代わりに、合成された楽器で演奏する必要がある音符が含まれているだけです。
Silverlight に MIDI シンセサイザーが組み込まれているかどうかはわかりません (MIDI ファイルをその上にドラッグした場合の QuickTime のように)。
そのため、任意の MIDI データをシーケンスする予定で、最初にそれを MP3 に戻す機能がない場合は、サーバー側でサウンドを生成する必要があります。.NET バックエンド サーバーにアクセスできる場合は、VST.NET フレームワークを使用して VST ホストを作成し、楽器を介して MIDI を送信し、結果のオーディオ出力を MP3 に圧縮できます。Java を使用している場合は、同様のライブラリである jVSTwRapperを使用できます。
最悪の場合、C/C++ で何かを接着して、サウンドを処理する VST プラグインをロードすることができます。これは、使用しているサーバー テクノロジによって、外部プロセスとして起動される可能性があります。
しかし、これらのアプローチのすべてにおいて、戦略は基本的に同じです。
- ユーザーから MIDI ファイルを取得し、サーバーに送信します。
- サウンドを処理するVST プラグインを開きます。
- MIDI ファイル内のイベントを解析し、浮動小数点データのブロックを適切な MIDI メッセージと共にプラグインに送信します。
- プラグインから出力を取得し、ディスクのどこかに保存します。
- これがすべて完了したら、出力を取得し、 LAMEまたはその他のエンコーディング フレームワークを介して生の PCM から MP3 (または何でも) に変換します。
- このファイルをユーザーに送り返します。
ステップ 3 は、おそらくこのプロセスで最も難しいステップです。独自の VST ホストを作成する方法については、インターネット上にたくさんのガイドがあり、私が書いたものも含まれています。;)