2016-10-27 91 views
0

我一直在使用這個庫(http://kenschutte.com/midi)來處理midi文件,這裏的函數非常有用。但是,無論我放入什麼MIDI,midi2audio()方法只會產生亂碼.wav文件(儘管音符是可識別的,並且正在播放正確的MIDI)。有沒有其他人使用這個函數庫並遇到同樣的問題,如果是的話,我該如何解決這個問題?還是有另一個功能,我可以在網上使用的地方做同樣的事情?使用MATLAB將.mid轉換爲.wav

下面是用於生成.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,自制,易於得到,GitHub的...) FluidSynth採用基於樣本聲音合成翻譯的MIDI指令轉換成音頻,以及SoundFont2格式的示例庫需要它的工作。其中一個可以找到here

已經整理了這一點,你必須做的,做一個WAVE文件從你的MIDI文件是這種類型的到你的終端/主機:

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

Unforunately我試圖改變「FM」參數到'正弦',聲音仍然不是很高的質量。我能以某種方式在MATLAB代碼中運行FluidSynth,還是隻需要輸入你提到的終端命令? – pdrum

+0

@pdrum我對matlab並不熟悉,但有機會從內部調用系統命令並捕獲輸出。但最簡單的方法,取決於您的使用,可能會直接從終端(osx,linux)或控制檯(windows)執行。 – AkselA