數(shù)字制造講義01-成為數(shù)字世界的建造者
數(shù)字制造講義02-Arduino入門
數(shù)字制造講義03-電路基礎(chǔ)
數(shù)字制造講義04-負(fù)責(zé)輸入和輸出的智能元件
數(shù)字制造講義05-軟硬件數(shù)據(jù)通信
回顧
上一節(jié)課,我們學(xué)習(xí)了有哪些方式把不同的軟硬件連接在一起,讓它們之間可以傳遞數(shù)據(jù),完成一定的功能。
有線的方式主要使用數(shù)據(jù)線進(jìn)行串口通信。在遠(yuǎn)距離傳輸?shù)膱?chǎng)景下,則常使用互聯(lián)網(wǎng)(廣域網(wǎng)/局域網(wǎng))。基于無線的連接主要包括 Wifi 和藍(lán)牙。
傳輸音樂數(shù)據(jù)最常用的協(xié)議包括 MIDI 和 OSC。OSC 的分辨率更高、可傳遞的參數(shù)更豐富,它使用 UDP / IP 和以太網(wǎng)通過 Internet和局域網(wǎng)傳輸。
OSC 已廣泛應(yīng)用于音樂表演、機(jī)器人、視頻性能接口、分布式音樂系統(tǒng)和進(jìn)程間通信等領(lǐng)域,在實(shí)驗(yàn)音樂控制器中更是必不可少。
下面我們就來實(shí)際操作幾個(gè)例子。
Mobile MIDI 2 Max
從移動(dòng)端發(fā)送 MIDI 數(shù)據(jù)給其他設(shè)備,可以使用類似 KnobLab 的 APP,它支持多種傳輸方式:
首先下載 KnobLab App。
然后我們?cè)?Max 里面建一個(gè)簡(jiǎn)單的 patch,接收 KnobLab 發(fā)過來的 midi 數(shù)據(jù),然后傳給鍵盤并且 makenote:
打開 Setting 里面 MaxOS 的 Wifi 連接說明:
打開電腦里的 Audio MIDI Setup,打開 MIDI Studio,點(diǎn)工具欄上的網(wǎng)絡(luò)圖標(biāo):
打開網(wǎng)絡(luò)設(shè)置窗口,在 My Sessions 下面勾選 Session 1,然后在 Directory 里面可以看到自己的手機(jī)(電腦和手機(jī)需要在同一個(gè) Wifi 網(wǎng)絡(luò)下)。然后點(diǎn) Connect。
這時(shí)候已經(jīng)可以用 KnobLab 操作,向 Max 發(fā)送 MIDI 數(shù)據(jù)了。在 Max 里面,要注意選擇 midiin 的來源,雙擊對(duì)象就可以看到 Session 1 的選項(xiàng),選擇后,Max 才開始接收數(shù)據(jù)。
在 KnobLab 的主界面上轉(zhuǎn)動(dòng)旋鈕,Max 就會(huì)發(fā)出對(duì)應(yīng)的 MIDI 音高。
Mobile OSC 2 Max
在觸摸設(shè)備如 iOS 上,用 TouchOSC 操作復(fù)雜的 MIDI Controller 非常方便。
首先,在移動(dòng)端下載 TouchOSC,在桌面端下載編輯器。
在編輯器里面可以創(chuàng)建自定義的操作面板。我們也可以直接使用 TouchOSC 里面預(yù)設(shè)的面板。在設(shè)置頁面的 Layout 項(xiàng),點(diǎn)擊進(jìn)去即可選擇面板。
連接的關(guān)鍵是設(shè)置 TouchOSC 的 IP 地址和輸入輸出端口。
確保電腦和手機(jī)處于同一個(gè) Wifi 網(wǎng)絡(luò)。然后我們查詢電腦的 IP 地址。打開 Terminal,Windows 系統(tǒng)使用命令 ipconfig,MacOS 系統(tǒng)使用命令 ifconfig,回車后可以看到一長(zhǎng)串的數(shù)據(jù),仔細(xì)找到其中以 192.168 開頭的局域網(wǎng) IP 地址:
en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 24:f6:77:08:87:04
inet6 fe80::81c:2c9b:50cf:8e39%en1 prefixlen 64 secured scopeid 0x7
inet 192.168.xx.xxx netmask 0xffffff00 broadcast 192.168.xxx.xxx
nd6 options=201<PERFORMNUD,DAD>
media: autoselect
status: active
broadcast 后面的 192.168.xxx.xxx 就是需要填入 TouchOSC 設(shè)置中的 IP 地址。
打開手機(jī) APP 進(jìn)入設(shè)置頁面,在 Host 里面填入上面的的 IP地址。
設(shè)置輸入端口 Port(outgoing) 為某個(gè)數(shù)值,如 8800。
接下來就可以在 Max/MSP 里面接收和發(fā)送 OSC 數(shù)據(jù)了。因?yàn)?OSC 通過 UDP 協(xié)議傳輸,所以使用 udpsend
和 udpreceive
對(duì)象:
udpreceive
的 port 參數(shù)應(yīng)該跟 TouchOSC 設(shè)置的輸出端口一致,如上圖的 8800。
Max 接收到數(shù)據(jù)后,可以看到 OSC 的數(shù)據(jù)格式類似文件路徑 URI:/{序號(hào)}/{參數(shù)名} {參數(shù)值}
。
這樣我們就把手機(jī)和電腦連接起來。只要將 TouchOSC 里面所有的 controller 都映射到 Max 中,就可以在手機(jī)上實(shí)現(xiàn)效果豐富的個(gè)性化控制。
Arduino 2 Max
Arduino 和 Max 也可以方便地勾搭上。我們?cè)囍鲆粋€(gè)旋鈕控制音高的小應(yīng)用。
首先搭出最簡(jiǎn)單的電位計(jì)電路。電位計(jì)正極接 5V 端口,負(fù)極接 GND,數(shù)據(jù)腳接 A0 端口:
Arduino 中的代碼也非常簡(jiǎn)單:
int sensor_pin = A0;
int knobValue = 0;
void setup()
{
Serial.begin(9600); // open the arduino serial port
}
void loop()
{
knobValue = analogRead(sensor_pin);
Serial.println(knobValue);
delay(500); // pause
}
電路和 Arduino 發(fā)送數(shù)據(jù)已經(jīng)準(zhǔn)備好。接著我們處理 Max 接收數(shù)據(jù)的邏輯。
咦?為什么這么多接線?
其實(shí)并沒有看上去復(fù)雜。
我們轉(zhuǎn)動(dòng)電位計(jì),打開 Arduino 的串口監(jiān)視器查看是否可以正常讀數(shù)。然后再觀察 Max 中有哪些數(shù)據(jù)進(jìn)來。
Max 中使用 serial
對(duì)象讀取串口數(shù)據(jù),不過它輸出的是未經(jīng)處理的原始格式。如果用 print 對(duì)象打印出來,會(huì)看到接收的數(shù)據(jù)會(huì)是以下格式:
13
54
10
35
第一行的 13 和第三行的 10 都是標(biāo)記,第二行和第四行才是串口數(shù)據(jù),但是它是 ASCII 碼,而不是直接可以使用的數(shù)字。所以還需要用 itoa
和 fromsymbol
對(duì)象將 ASCII 碼轉(zhuǎn)換為數(shù)字。因?yàn)殡娢挥?jì)發(fā)送的模擬數(shù)據(jù)范圍是 0~1023,所以接著我們用一個(gè) scale
把數(shù)據(jù)映射到 MIDI 的數(shù)據(jù)范圍 0~127,這樣就可以發(fā)出音高了。
Bonus
Arduino 能不能直接跟 Ableton 連接呢?當(dāng)然是可以的。
Ableton 已經(jīng)提供了 Package,跟 Arduino 連接后,可以做好多腦洞大開的酷炫應(yīng)用:
<iframe frameborder="0" src="https://v.qq.com/txp/iframe/player.html?vid=h0190wbyt6w" allowFullScreen="true"></iframe>
Max for Live Connection Kit_騰訊視頻
具體教程,請(qǐng)查看:Ableton Live 連接 Arduino 教程。
00 的文集
- HackYourself
- Art & Code
- 產(chǎn)品設(shè)計(jì)思維訓(xùn)練營(yíng)
- FabAcademy 創(chuàng)客煉成記
- Make Noise
- 歷史大雜燴