數(shù)字制造講義06-MIDI 和 OSC 數(shù)據(jù)傳輸練習(xí)

數(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)傳輸。

image

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,它支持多種傳輸方式:

image

首先下載 KnobLab App。

然后我們?cè)?Max 里面建一個(gè)簡(jiǎn)單的 patch,接收 KnobLab 發(fā)過來的 midi 數(shù)據(jù),然后傳給鍵盤并且 makenote:

image

打開 Setting 里面 MaxOS 的 Wifi 連接說明:

image

打開電腦里的 Audio MIDI Setup,打開 MIDI Studio,點(diǎn)工具欄上的網(wǎng)絡(luò)圖標(biāo):

image

打開網(wǎng)絡(luò)設(shè)置窗口,在 My Sessions 下面勾選 Session 1,然后在 Directory 里面可以看到自己的手機(jī)(電腦和手機(jī)需要在同一個(gè) Wifi 網(wǎng)絡(luò)下)。然后點(diǎn) Connect。

image

這時(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 非常方便。

image

首先,在移動(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地址。

image

設(shè)置輸入端口 Port(outgoing) 為某個(gè)數(shù)值,如 8800。

接下來就可以在 Max/MSP 里面接收和發(fā)送 OSC 數(shù)據(jù)了。因?yàn)?OSC 通過 UDP 協(xié)議傳輸,所以使用 udpsendudpreceive 對(duì)象:

image

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 端口:

image

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ù)的邏輯。

image

咦?為什么這么多接線?

其實(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ù)字。所以還需要用 itoafromsymbol 對(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 的文集

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容