Android 上的 midi

Posted by tjwei on 星期六, 5月 07, 2011 with No comments
Android 2.2 上的 midi播放不太好聽,至少我的 acer stream 是如此。Android 系統採用 sonivox 的 EAS 來軟體合成 midi 音樂的,而且是使用 wavetable。但使用的wavetable格式不是比較常見的 SoundFont 而是 DLS。DLS 其實也是標準,而且 Windows 就內建有 gm.dls。 EAS預設的 wavetable 寫死在程式碼裡面,而且似乎就是 gm.dls。抓下 android 的 source 之後,就能編譯裡面的 eas_main.c 使用,來測試軟體合成的功能。
不過實際嘗試後發現無法使用,原因是 PlayFile 有點小 bug,要在
    file.fd = 0;
後面加上
    file.length=0;
    file.offset=0;
就行了。
接下來就是想嘗試改用比較好的 dls 檔,看看音色會不會改善一點點。雖然不期待改善太多,因為 android 中的 EAS 只能使用 22khz 的 sample rate。首先嘗試的是 windows 中的 gm.dls。可以用 EAS_LoadDLSCollection 順利載入,不過音色完全沒有改變。
想說換換其他的 DLS 檔看看,但是網路上不太容易找到 DLS 檔,找了很久只找到 dlsbyxg.dls, fury.dls, 還有兩種 ff8.dls。
很可惜,這幾個 dls 都無法在 EAS 中順利載入,分別會有不同的錯誤傳回碼。
沒有在詳細追錯誤的來源了,看來要改變計畫,直接編譯 fluidsynth 或 timidity++ 看看好了。如果能成功的話,再看看能不能做個 EAS 的介面讓 android 的 media player 直接取用?