update: 2015/06/29
reference:
1. Mac OS:Creating a wireless MIDI connection between computers
2. How to send Midi via Wifi on Mac - Tutorial on Vimeo
A. 功能定義:
1. Master (主控)端:
利用 Processing 程式, 將 MIDI 訊號藉由( 程式 / Ableton Live) 輸出給 Slave 端.
2. Slave (隨從)端:
輸入(接受) Master 端送來的 MIDI 訊號, 播放對應的音軌效果.
-----------------------------------------------------------------------------------------------
B. MIDI 網路設定:
1. Master 端:
a. 工具程式 > 音訊 MIDI 設定:
> 雙擊 "網路"
c. > 在左上方, "我的區段", 按下 "+" 新增一個區段.
> 於右上方, 勾選 "已啟用", 並將 "本機名稱" 與 "Bonjour 名稱" 設為:
Wireless MIDI Master
> 在左下方, 將 "可能連接本機的有": 設為 "所有參與者"
2. Slave 端:
類似 Master 的方式:
> 在左上方, "我的區段", 按下 "+" 新增一個區段.
> 於右上方, 勾選 "已啟用", 並將 "本機名稱" 與 "Bonjour 名稱" 設為:
Wireless MIDI Slave
> 在左下方, 將 "可能連接本機的有": 設為 "所有參與者"
a. 於 Master 端:
先點選 "Wireless MIDI Master" 區段,
再點選目錄內的 "Wireless MIDI Slave",
按下 "連線" 後, 可於右方的 "參與者" 看到 "Wireless MIDI Slave"
先點選 "Wireless MIDI Slave" 區段,
再點選目錄內的 "Wireless MIDI Master",
按下 "連線" 後, 可於右方的 "參與者" 看到 "Wireless MIDI Master"
C. Ableton Live 偏好設定:
1. Master 端:
將 Wireless MIDI Master 網路輸出的 Track, Sync, Remote 皆設成 On.
備註: 由於在此例 MIDI 訊號是由 Processing 程式送出, 因此關閉 Ableton Live ,
也可正常運作, 亦即不需要設定 Ableton Live (尚未驗證).
將 Wireless MIDI Master 網路輸入的 Track, Sync, Remote 皆設成 On.
D. 音軌 Mapping:
Slave 端:
1. 拖拉一個 Drum Rack 到下方, 確認按鍵與位置的對應, 在此為:
"A 鍵" 對應到 "C5" 位置.
E. Processing 程式:
1. MIDI Note Numbers Mappings
說明: 由上表可查得 C5 對應到 Note Number 為: 84
2. Master 端: 開啟 Processing 轉寫程式如下:
import themidibus.*; //Import the MIDI library
MidiBus myBus; // The MidiBus
void setup() {
size(400, 400);
background(0);
MidiBus.list();
// Create a new MidiBus with no input device
// and the "Wireless MIDI Master" as output device.
myBus = new MidiBus(this, -1, "Wireless MIDI Master");
}
void draw() {
int channel = 0; // 頻道: 0 ~ 15
int pitch = 84; // 音調
int velocity = 127; // 速度
Note note = new Note(channel, pitch, velocity);
myBus.sendNoteOn(note);
delay(2000);
myBus.sendNoteOff(note);
int number = 0;
int value = 120;
ControlChange change = new ControlChange(channel, number, value);
myBus.sendControllerChange(change); // Send a controllerChange
delay(1000);
}
void delay(int time) {
int current = millis();
while (millis () < current+time) Thread.yield();
}
沒有留言:
張貼留言
注意:只有此網誌的成員可以留言。