2026年11月9日 星期一

Arduino模擬平台-五度圈音程播放器

<開始的構想> 

 最初就是單純的把一首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:






























































沒有留言:

張貼留言