在前一個單元中我們把想要演奏的音樂簡譜放在song1這個變數中,然後一個一個字元地拆解出來,分別送到note這個自訂積木去播放每一個音符。這個程式在操作起來還算是容易,但是你有沒有注意到幾個可以加強的點?除了目前支援的簡譜記號太少之外,另外一個問題就是下面這一段程式積木:
我們用了一長串的如果/否則來決定要演奏的音階內容,你能夠想像,如果我們要支援更多的音符的時候,會是什麼樣的情景嗎?有沒有可以簡化的方法呢?答案是有的,只要建立一個可以轉換的表格清單就好了。意思是說,如果我們建立了一個清單,然後把要演奏的音階數字依序放在清單中,當要演奏對應的音階時再根據目前的符號到清單中取出,直接把該項目的內容拿來播放就可以了,這樣在程式上就會變得比較簡單。
依照這個邏輯,請先建立一個用來放這些音階的清單note,如下所示:
接著參考所有可以播放的音階之數字,如下:
把這些數字的內容在程式一開始執行的時候放到note清單中,如下所示(使用自訂積木):
在程式一開始執行的時候執行這段自訂積木:
然後,我們原本很複雜的播放音階的積木,現在就只剩下一行而已,如下:
至於為什麼加7呢?因為我們的清單是從低音Do開始的,+7就讓音階從中音Do開始計算。接下來的挑戰就是,那要如何把低音以及高音的音階也一併納入我們的考量呢?