
EV3 Tutorial(9)來一把電烏克麗麗!
開場不囉嗦!先來段彈奏卡農的影片,就知道今天要介紹的東西,能有什麼樣的效果: 好吧!這不是烏克麗麗,因為它沒有弦,只是因為它的尺寸接近烏克麗麗,就叫它電烏克麗麗,總之名稱不重要 … XD 積木組裝這把電烏克麗麗,主要使用了三個觸碰感應器,搭配主機上的五個按鈕,因此可以彈奏 其實大部份的零件,都是拿來做造型了,控制發音的原理很簡單,左手三個觸碰感應器按下與否會有 左下方的 EV3 就是對應的方向,主機按鈕依左、中、右、上、下的順序,相距都是一個半音,上圖中每個八度裏沒有畫出來的音階,就是半音的部份了,也就是相當於鋼琴的黑鍵部份。 40 個判斷分支?觸碰感應器的按鈕若未按下,輸出值為 按照程式設計邏輯,要不就是判斷觸碰感應器的八個狀態值,再去判斷主機按鈕的五個狀態值,要不就列出 我可不想這麼做, 十二平均律稍微摸過樂器的,可能會知道 十二平均律,簡單來說,對於一個八度的音程,可被平均切分為十二等分,每個等分是一個半音的音程,例如 C 大調的話,就是 C、C#、D、D# … 一直到下個高度 C 共八個半音。 對這個電烏克麗麗的設計,重要的是知道,這十二等分的劃分,並不是用等差級數,而是用等比級數來劃分,每個半音間的音程,有著 因此,只要一個簡單的算式,就可以從觸碰感應器與主機按鈕的輸出值,計算出要發出的音階頻率,如果要多一個觸碰感應器,也只要在算式中多個變數就可以了,這比硬是用程式邏輯來蠻幹有效率多了,嗯 … 套句程式界的老生常談 … 領域知識(Domain knowledge)很重要 … XD 程式撰寫主要的程式流程很簡單,就是等待主機按鈕按下,取得觸碰感應器與主機按鈕輸出值,轉為頻率令主機發出音階、在主機按鈕放開後停止發音: 觸碰感應器與主機按鈕輸出被封裝為一個 KeyState 的自訂 Block,因此它有四個輸出值: 當然,下個 ToHz 自訂 Block 才是重點: 三個觸碰感應器的值會被當成二進位組合,算出
也就是說,右邊位數每 頻率起算的部份,因為 EV3 的 Sound 方塊可以設定的頻率範圍為 那麼,就可以來段卡農了,只是,這樂器的按鈕組合會不會太難記了?嗯!熟能生巧!多練幾次就好啦!不過,還是有取巧的方式,吉他或烏克麗麗不是有 Tab 譜嗎?就是那種直接標示手指位置的譜,上頭一開始的卡農,我也是寫了個類似 Tab 譜的東西來彈的,連我家六歲的小女兒都彈的出來 … XD |