關於 midi 的軟硬體的一些簡介:自幹樂器從這開始

midi 其實是一種封包的傳遞格式,很類似 http 一樣,硬體甚至電路本身都很簡單,目前硬體格式大概有:一般 midi jack / usb / bluetooth 之類的硬體接頭,其實也類似網路線,不過只有點對點的 transmitter / receiver 模式,不過其實裡面傳的東西都是一樣的,也就是 midi 封包

https://www.midi.org/specifications-old/category/reference-tables

midi 封包本身其實很好瞭解,單純是 binary 看起來像天書,但 spec 內說明算是很完整,我甚至認為新手想玩 binary 可以從 midi 檔開始拆起 …,結果大概就是 ADSR … 等等不對 X"D(ADSR 是隔壁棚的事情,不過其實差不多),其實是你按下任何樂器或吹奏時會發生的任何事情,類似觸發點 ON、力道漸強漸弱、滑音(可以滑到天邊去)、觸發點 OFF,此 note 在第幾 channel,是否並行(當你掛了 10 個樂器,每個樂器有 10 根手指同時操作就很需要了),還有其他可額外擴充的 message(一些廠商就擴充給炫砲 LED 燈光用了),之後就可以組出目前所有的東西唄,但其實當初 midi 只想解決『樂譜』這件事情而已,事實上任何樂譜應該都可以轉成 midi 才是,所以在這之前,先假定 midi ~= 樂譜如何?

有了樂譜後就是『樂器』本身,midi spec 內有個 GM list

https://www.midi.org/specifications-old/item/gm-level-1-sound-set

General MIDI 簡稱 GM,這份列表內共有 128 種樂器,有樂譜勢必要有樂器來演奏,而這些演奏的樂器就叫做音源,從早期的硬體音源到軟體音源都有,類似非常早期的 DOS 時代的 Sound Blaster (聲霸卡,上面通常還能插 15 pin 的遊戲手把),Win98 時代超好聽的 WinGroove,到現在 macOS 的 GarageBand 這些都是軟體音源,而硬體音源就是電子琴了,或是專用的『硬體音源』,類似我手上也有的

影片中就是 midi 訊號產生器(其實就是 midi 鍵盤),配上 MIDIPlus miniEngine 這款硬體音源,最後輸出音訊接到喇叭而已,所以 … 想買最簡易的電子琴這樣買整個會超便宜的呦 X"DD

而基本上 midi 鍵盤發出的訊號格式和 midi 檔案的格式幾乎一致,而這種一致甚至包含了 USB 和 bluetooth 的訊號,所以學完 midi 基本格式後,基本上軟硬體可以全吃,還可以吃到藍牙上面去,類似

https://projects.skratchdot.com/ble-midi/

這個是 nodejs 寫的 web bluetooth api,瀏覽器打開後可以取得手機或電腦的 bluetooth 權限,尋找支援 bluetooth 的 host 裝置後,按下網頁上面的琴鍵,該裝置就會發聲(有測試我家的 Roland FP-30 電子琴,這台有支援 bluetooth,確定動作無誤,缺點是沒力量回饋等等,聲音超呆版 X"D),而如果去看該 project 佛心貼出來的藍芽 midi spec

就會發覺其實是原本 midi 訊號加上 header 而已 … (( 想說來研究 bluetooth 怎樣玩 chunk … 結果這鬼連 chunk 都沒有單純直送,簡單又暴力 …

anyway 收斂一下,以上述而言,midi 對我而言是操控的指令,配上不同的硬體,發送方接收方,配上不同的音源,最終組出不同的結果,所以如果想要自製樂器的話 … 不管如何都盡量製作 midi 相容的,類似這個

( 裡面有 github 和完整實作,不過說明幾個東西,code 內有寫的 Adafruit_NeoPixel 其實就是 ws2812,這邊有其他文章說明,其實就是旁邊的彩色 LED 條燈,中間位置感應 x 2 + 壓力感應 x 2 很貴請三思後才購入,而 arduino 的 midi shield 應該也都可以不用買,因為如果單純要輸出的話不用花很多硬體 … )

其實就是輸出 midi 訊號到軟體音源後才另外製作影片的,而實際"吹奏的樂器"記得是小號(才可以無限吹 X"DD,鋼琴無法無限按著還有聲音 … ),然後用滑音來控制音調,大概就是這樣唄

另一方面 linux 內有個有趣的東西可以瞬間做出軟體音源

http://www.fluidsynth.org/

再配上音源本身

https://musical-artifacts.com/artifacts?formats=sf2&tags=videogame

一台 Pi 就可以變成軟體音源,接上 midi 鍵盤或自製樂器就可以開始演奏(詳細等我研究多些再發表了) … 不管如何上述這些 … 這是否開始有趣了些呢? : )

附錄附上一些之前說的軟體音源