2016-10-27 2 views
0

Я использую эту библиотеку (http://kenschutte.com/midi) для работы с midi-файлами, и функции здесь очень полезны. Однако метод midi2audio() создает только искаженные .wav-файлы независимо от того, какой миди я вкладываю (хотя заметки распознаются и воспроизводится правильный миди). Кто-нибудь еще использовал эту библиотеку функций и столкнулся с этой проблемой, и если да, то как я могу это исправить? Или есть другая функция, которую я могу использовать в Интернете где-то, что делает то же самое?Конвертировать .mid в .wav используя MATLAB

Ниже приведен код, используемый для создания файла .wav (скопировать и вставить из ссылки выше)

[y,Fs] = midi2audio(midi); % save to file: % (normalize so as not clipped in writing to wav) y = .95.*y./max(abs(y)); wavwrite(y, Fs, 'out.wav');

ответ

0

Оказывается, что midi2audio включают в себя только очень рудиментарный синтез звука, с частотно-модулированного синтезом, как по умолчанию , Если вы перейдете на простой синусоидальный синтез, возможно, это будет звучать лучше?

[y,Fs] = midi2audio(midi, 'sine') 

Если это еще не режет, вы, вероятно, захотите использовать более сложные программные инструменты.

Самого простой метод кросс-платформенного этого, вероятно, FluidSynth (также доступны через различные хранилища как MacPorts, Homebrew, кв-получить, GitHub ...) FluidSynth использует пример на основе синтеза звука для перевода MIDI инструкции в аудио и для его работы требуется образец банка в формате SoundFont2. Один такой может быть найден here.

Разобравшись, что из, все, что вам нужно сделать, чтобы сделать файл WAVE из вашего MIDI-файла, чтобы напечатать это в вашем терминале/консоли:

fluidsynth -F out.wav path-to-fm2-file in.mid 
+0

Unforunately Я попытался изменить параметр «фм» до «синуса», и звук все еще не был очень высокого качества. Смогу ли я запустить FluidSynth внутри кода MATLAB, или мне просто нужно будет ввести команду, которую вы упомянули в терминале? – pdrum

+0

@pdrum Я не знаком с matlab, но есть вероятность, что вы можете вызвать системную команду изнутри и захватить вывод. Но самый простой способ, в зависимости от вашего использования, вероятно, будет делать это прямо с терминала (osx, linux) или консоли (windows). – AkselA

Смежные вопросы