最初就是單純的把一首Midi曲子的旋律轉換成 12平均律 與 五度圈的兩個圓盤看著它旋律播放的過程。
音階符只放升記號,不放降記號 。
12平均律 = {"C","C#","D","D#","E","F","F#","G","G#","A","A#","B"};
五度圈 = {"C","G","D","A","E","B","F#","C#","G#","D#","A#","F"};
用fable talk AI 寫成的html 在瀏覽器上的呈現。
接下來就想到想將這個概念讓它在arduino 模擬平台跑跑看能不能做到。首先就遇到資料存儲,程式計算記憶體容量,和顯示介面的問題。
首先用了運算能力較好,記憶體容量較大的ESP32 作主要晶片。
加上 ILI9341 TFT 顯示元件。
整個在 WOKWI 模擬平台上運作。
捨棄了用 mini SD 元件存放 midi 檔案。先用內建 內建一首聲音資料陣列的方式來作測試。
結果 ILI9341 TFT 顯示解析度夠大,可以放得下 12平均律,五度圈兩個圓盤。
ESP32 記憶體夠大,可以把這圖形解析算完。
= = = = = =
再來換元件,ESP32 繼續用,顯示元件改成 OLED 1306
由於OLED 1306解析度較低,所以雙圓盤顯示改成單圓盤顯示,兩者用開關切換,讓畫面可以放得下。
結果測試可以用。
= = = = = =
再來主晶片換成 Arduino UNO,顯示還是 OLED 1306
由於UNO晶片的記憶體很少,許多高階圖形運算耗費太多資源,於是必須請 fable talk AI 再將程式碼簡化。目前還是在WOKWI 模擬平台上跑。
結果還是可以工作的非常好。
= = = = = =
最後是將在WOKWI 模擬平台的程式版本,主元件為 arduino UNO 與 OLED 1306,程式碼複製到 Scilab電子工作室的arduino模擬平台上,發覺無法使用。
因為Scilab電子工作室的arduino模擬平台 是封閉的平台,很多函式庫元件模型定義無法使用,也不能外部載入,只能用arduino基礎的元件模型定義,於是請 fable talk AI幫我重新寫一份程式碼以符合封閉的模擬平台可以使用。
終於編譯成功,可以跑起來了。只是這一版文字與圖形都到最簡化幾乎看不清楚。
所有組合的 Midi 五度圈 跑音程的過程我都收錄於 youtube 1.
youtube 2是真正的吹奏,欣賞一下。
youtube 1:
youtube 2:





沒有留言:
張貼留言