Я начал небольшой проект, который включает в себя работу с MIDI файлами. Мне было интересно, есть ли какой-либо код С# или VB.Net, который отображает это между файлами MIDI и WAV?
Как я могу конвертировать между midi в wav/mp3 в С#?
Ответ 1
Вы можете попытаться каким-то образом взаимодействовать с Timidity, который является открытым исходным кодом:
TiMidity ++ - программный синтезатор. Он может воспроизводить MIDI файлы, преобразовывая их в данные формы волны PCM; дайте ему MIDI-данные вместе с цифровыми файлами данных инструмента, затем он синтезирует их в режиме реального времени и играет. Он может не только воспроизводить звуки, но также сохранять сохраненные формы сигналов на жестких дисках в виде различных форматов аудиофайлов.
FluidSynth - это недавно обновленный проект с открытым исходным кодом в аналогичном ключе:
FluidSynth - это программный синтезатор в реальном времени на основе спецификаций SoundFont 2.
Вы можете загрузить некоторые бесплатные SoundFonts (фактические данные PCM, используемые этими синтезаторами для "рендеринга" MIDI файлов) с сайтов этот список.
Ответ 2
MIDI файлы содержат только информацию о заметке и контроллере, а не звуки. Чтобы получать звуки из MIDI файла, вы должны передать файл через синтезатор музыки или сэмплер, который преобразует информацию о записке и контроллере в реальные звуки.
На практике это означает, что любой данный MIDI файл не имеет для него определенного звука. Звук, возникающий в результате преобразования MIDI файла в аудио, будет зависеть от качества синтезатора или библиотеки образцов и звуков, которые будут выбраны для выполнения преобразования.
Многие звуковые карты имеют возможность производить звук из MIDI файлов. Они могут это сделать, потому что многие файлы MIDI следуют стандарту, называемому Общая спецификация MIDI. Общая спецификация MIDI предоставляет стандартизованный способ сопоставления конкретных назначений приборов. Если ваш MIDI файл соответствует этому стандарту, вы можете воспроизвести его через генератор звука General MIDI и ожидать, что барабанный барабан будет звучать как барабанный барабан, а не как труба.
Если у вас есть сложный пакет для производства музыки, например Cakewalk, вы можете загрузить в него файл MIDI, и он будет использовать свои встроенные звуковые библиотеки для отображения звукового файла для вас, и это можно сделать быстрее, чем в реальном времени (т.е. ему не нужно воспроизводить звук через звуковую карту и записывать вывод).
Я предполагаю, что я пытаюсь сказать, есть много движущихся частей к этому. Существует не одна часть кода или модуль класса, которые сделают это для вас.
Ответ 3
Есть несколько программ, которые вы можете приобрести, которые сделают это (google "convert midi to WAV" ), но я никогда не сталкивался с общедоступным кодом .Net, который делает это (я думаю, что некоторые из этих программ написанный на .Net, но исходный код недоступен).
У меня есть онлайн-знакомый, который работает над коммерческим конвертером MIDI-to-WAV, но его нет в .Net, и он не будет открытым исходным кодом. Как заметил Роберт Харви, это совсем не простая задача, поскольку в основном это касается написания собственного синтезатора программного обеспечения (задача после моего собственного сердца).