Во-первых, следует четко указать, что MIDI-файлы сами по себе не "воспроизводятся" так же, как MP3.В MIDI-файле нет настоящей музыки;вместо этого они просто содержат ноты, которые должны воспроизводиться на синтезированном музыкальном инструменте.
Я не уверен, есть ли в Silverlight встроенный синтезатор MIDI (как в QuickTime, если перетащить поверх него файл MIDI).), и немного быстрого поиска в Google , кажется, подтверждает эту гипотезу .
Так что, если вы собираетесь упорядочить произвольные MIDI-данные и не имеете возможности сначала преобразовать их в MP3, то вы должны генерировать звук на стороне сервера.Если у вас есть доступ к бэкэнд-серверу .NET, вы можете использовать VST.NET framework для создания хоста VST, отправки MIDI через инструмент и сжатия результирующего аудиовыхода в MP3.Если вы работаете с Java, то вы можете использовать jVSTwRapper , похожую библиотеку.
В худшем случае вы можете склеить что-нибудь вместе с C / C ++, чтобы загрузить плагин VST, которыйобработает ваш звук.Затем он может быть запущен как внешний процесс с помощью любой серверной технологии, которую вы используете.
Но во всех этих подходах стратегия в основном одинакова:
- Получить файл MIDIот пользователя и отправьте его на сервер.
- Откройте VST плагин , который будет обрабатывать звук.
- Анализировать события в MIDI-файле, отправляя блоки с плавающей точкойнаправьте данные на плагин с соответствующими MIDI-сообщениями.
- Возьмите выходные данные из плагина и сохраните их где-нибудь на диске.
- После того, как все это будет сделано, возьмите выходные данные и преобразуйте их изraw PCM в MP3 (или что-то еще) через LAME или другую систему кодирования.
- Отправьте этот файл обратно пользователю.
Обратите внимание, что шаг 3вероятно, самый сложный в этом процессе.В Интернете есть множество руководств о , как сделать собственный VST-хост , включая тот, который я написал.;)