Tuesday, April 29, 2008

我的 虛擬 音樂鍵盤

以下範例使用 WINDOWS XP作業系統 不確定在其他作業系統是否一樣能跑

前言:
用REASON 或CUBASE 或 PC 內建合成器時, 沒有樂器鍵盤只用滑鼠點出音符, 是件麻煩又很不"音樂"的做法. 希望同學能用免費的程式 "GlovePie" 和 "MidiYoke" 設計出適合自己的MIDI 控制介面.
 
GlovePIE 簡介:
GlovePIE 是一個 可程式化的虛擬輸入(輸出)程式. 可以"翻譯"很多種輸入輸出資料. 可能用在:
1. 把電腦鍵盤的輸入變成成MIDI NOTE (或其他)資料 (接下來會介紹...)
2. 把電腦滑鼠的輸入變成成MIDI NOTE (或其他)資料 (接下來會介紹...)
3. 把一般電玩控制器輸入變成其它資料 (MIDI, 鍵盤, 滑鼠, 合成語音 或其他控制器等)
4. 把特殊電玩控制器(Wiimote, Playstatio_ 3 SIXAXI_)輸入變成其它資料 (MIDI, 鍵盤, 滑鼠, 合成語音 或其他控制器等) (注意: 特殊輸入裝置先要能被作業系統抓到 GlovePIE 才能進一步進行設定)
5. 下載或確定GlovePIE 認得的輸入裝置 輸出信號等資料請參考官方網站http://carl.kenner.googlepages.com/

用電腦鍵盤控制 Micr_soft GS Wavetable SW 合成 part 1
1. 跑GlovePIE (下載ZIP 檔後解壓縮 GlovePIE030, 按兩下 GlovePIE.exe 就可執行, 不必安裝)
2. 設定MIDI 輸出到電腦內建合成器 GlovePIE > CP-Settings > MIDI 確定MIDI 音樂播放選的是 ~ ~ SW 合成
3. 按 GUI > Choose Manually > Category 選 Notes Octaves 5.. 10 > 按 note60: Middle c5 > Detect Input > 按下電腦鍵盤Z > Apply > 按 Untitled > 按 Run > 按 "Z鍵" (應該會聽到電腦發出"Do") > File > Save As > 挑一個你確定的地方存成 "my midi kb 1" > File > Exit
4. 恭喜, 你已經設計出一個可以彈 Middle c5 的虛擬 kb 了.

以上程式在 GlovePIE 看起來像這樣
--------以下是程式
// Type your program here, or click the GUI tab to autogenerate it!
midi.c5 = Keyboard.Z
--------以上是程式

"//" 在 GlovePIE 裡可以接:
1. 檔案說明
2. 希望 GlovePIE (暫時)不要執行指令 (可以幫助挑出複雜程式問題所在)

用電腦鍵盤控制 Micr_soft GS Wavetable SW 合成 part 2
my midi kb 1 只能彈一個音, 很不實用. 接下來們試著做個長一點的 midi kb, 順便熟悉一下 編輯GlovePIE 的兩種方法.
1. 跑GlovePIE
2. File> Recent > my midi kb 1.PIE
3. GUI > Choose Manually > Category 選 Notes Octaves 5.. 10 > 按 note61: Middle csharp5 > Detect Input > 按下電腦鍵盤s > Apply > 按 my midi kb 1 > File > Save As > 挑一個你確定的地方存成 "my midi kb 2
4. 按 my midi kb 2 現在應該有3行字
5. 把第一行 "//" 後全部文字刪掉 打上"我的MIDI鍵盤 c5- e6 或 my midi kb c5 - e6"
6. File Save 或 CTIL+S 存檔
7. RUN 按 Z 或 S 都會聽到鋼琴聲
8. Stop
9. 接下來我們要反覆以上動作直到 z s x d c v g b h n j m , l . ; / 都對應到某個 MIDI NOTE
10. 如果你不確定 c, csharp, d. dsharp ... 的順序 沒關係 到GUI > Choose Manually 你可以看出我們要把 note60 - note 76 對應到電腦鍵盤. 你可以反覆Detect Input 步驟. 或者試試用 CTL+C (Copy) CTL+V(Paste) 加快速度
11. 用COPY copy 我們寫好的的兩行程式 然後 PASTE 6 次 編輯視窗會變成以下這樣
--------以下是程式
// my midi kb c5 - e6
midi.c5 = Keyboard.Z
midi.csharp5 = Keyboard.s
midi.c5 = Keyboard.Z
midi.csharp5 = Keyboard.s
midi.c5 = Keyboard.Z
midi.csharp5 = Keyboard.s
midi.c5 = Keyboard.Z
midi.csharp5 = Keyboard.s
midi.c5 = Keyboard.Z
midi.csharp5 = Keyboard.s
midi.c5 = Keyboard.Z
midi.csharp5 = Keyboard.s
--------以上是程式

12. 手動把以上程式修成這樣
--------以下是程式
// my midi kb c5 - e6
midi.c5 = Keyboard.Z
midi.csharp5 = Keyboard.s
midi.d5 = Keyboard.x
midi.dsharp5 = Keyboard.d
midi.e5 = Keyboard.c

midi.f5 = Keyboard.v
midi.fsharp5 = Keyboard.g
midi.g5 = Keyboard.b
midi.gsharp5 = Keyboard.h
midi.a5 = Keyboard.n
midi.asharp5 = Keyboard.j
midi.b5 = Keyboard.m

//back to GUI input here
midi.c6 = Keyboard.Comma
midi.csharp6 = Keyboard.l
midi.d6 = Keyboard.dot
midi.dsharp6 = Keyboard.semicolon
midi.e6 = Keyboard.slash
--------以上是程式
注意: 因為逗號 句號 斜線 分號 要用 英文輸入 slash, dot, Comma, semicolon 建議用 GUI> 選音符 > detect input > apply 輸入
13. save
14. run 希望z, s, x, d, c, v, g, b, h, n, m, ,, l, ., ;, /,都有聲音 (z x c v b n m , . / 是鋼琴的白鍵!)
15, 也許加一點說明讓自己清楚音名和唱名的關係
--------以下是程式
// my midi kb c5 - e6
//do
midi.c5 = Keyboard.Z
// do sharp
midi.csharp5 = Keyboard.s
// re
midi.d5 = Keyboard.x
// re sharp
midi.dsharp5 = Keyboard.d
// me
midi.e5 = Keyboard.c
// fa
midi.f5 = Keyboard.v
// fa sharp
midi.fsharp5 = Keyboard.g
// so
midi.g5 = Keyboard.b
// so sharp
midi.gsharp5 = Keyboard.h
//la
midi.a5 = Keyboard.n
// la sharp
midi.asharp5 = Keyboard.j
//si
midi.b5 = Keyboard.m
//do
midi.c6 = Keyboard.Comma
// do sharp
midi.csharp6 = Keyboard.l
// re
midi.d6 = Keyboard.dot
// re sharp
midi.dsharp6 = Keyboard.semicolon
// me
midi.e6 = Keyboard.slash
--------以上是程式
別忘了 存檔

16 如果你沒有空 可以 COPY " --------以下是程式 --------以上是程式" 之間的指令 到GlovePIE, SAVE成自己喜歡的檔名 然後跑跑看

17. 根據你的需要, 可以把電腦其它按鍵對應到想要的 MIDI NOTE. 理論上你甚至可以外接幾個鍵盤 讓每個鍵盤對應到想要的MIDI NOTE(留個鍵盤輸入字母 其他鍵盤跑MIDI NOTE 說不定就不必一直 RUN STOP GlovePIE 了)


用電腦滑鼠控制 Micr_soft GS Wavetable SW 合成part 1
1. 跑GlovePIE
2. 按 GUI > Choose Manually > Category 選 Other Controls > 按 FirstNote > Detect Input > 滑鼠往右滑 (INPUT SOURCE 以下顯示為 MOUSE... x...) > Apply > 按 Untitled > 按 Run > 滑鼠左右移動可聽到鋼琴聲 > File > Save As > 挑一個你確定的地方存成 "my mouse kb 1" > File > Exit
3. 程式會像這樣
--------以下是程式
// my mouse kb 1
midi.FirstNote = MapRange(Mouse.x, 0,1, 0,127)
--------以上是程式

4.用滑鼠當鍵盤 my mouse kb 1 有點難控制彈到想要的音符 接下來我們限制彈奏的範圍 看效果會不會好點

用電腦滑鼠控制 Micr_soft GS Wavetable SW 合成part 2
1. 跑GlovePIE > File > Recent > my mouse kb 1
2. 把 (Mouse.x, 0,1, 0,127) 改成 (Mouse.x, 0,1, 60,63)
3. save as "my mouse kb 2"
4. run. 移動滑鼠 現在只能聽到 4個音符
Mouse.x, 0,1, 60,63 翻成中文大概是 MOUSE 左右的移動 會彈出 midi.60-63 音符
還可試試把
Mouse.x, 0,1, 60,63 改成
Mouse.x, 0.2, 0.5, 60,63 或
Mouse.x, 0.5, 0.2, 60,63
聽聽看有什麼不同

5. my mouse kb 2 程式參考
--------以下是程式
// my mouse kb 2
midi.FirstNote = MapRange(Mouse.x, 0,1, 60,63)
//midi.FirstNote = MapRange(Mouse.x, 0.2,0.5, 60,63)
//midi.FirstNote = MapRange(Mouse.x, 0.5,0.2, 60,63)
--------以上是程式


用電腦滑鼠控制 Micr_soft GS Wavetable SW 合成part 3
我們用GUI輸入法 說明Mouse.x, 0.5,0.2, 60,63 是什麼意思
1. 跑GlovePIE
2. 按 GUI > Choose Manually > Category 選 Other Controls > 按 FirstNote > Detect Input > 滑鼠往右滑
3. 現在你會看到 Format 0..127 這是指所有的 midi note 0-127
如果範圍太大 可以按 Limit output to the range min 60 max 63 這是指 midi note 60-63
Input Device
Mouse x 是指將滑鼠的左右移動換成... 把 x 改成 y 則轉換滑鼠上下移動
Convert from range min 0 max 1 是指轉換範圍是最左到最右
試試 min 0.2 max 0.5 或 min 0.2 max 0.5
apply> run 看結果有何不同
4. file > save as "my mouse kb 3"
5. my mouse kb 3 程式參考
--------以下是程式
// my mouse kb 3
midi.FirstNote = MapEnsureRange(Mouse.x, 0,1, 60,65)
//midi.FirstNote = MapEnsureRange(Mouse.x, 0.2,0.5, 60,65)
//midi.FirstNote = MapEnsureRange(Mouse.x, 0.5,0.2, 60,65)
--------以上是程式


用電腦滑鼠控制 Micr_soft GS Wavetable SW 合成part 4
在此我們試著把mouse 上下移動轉換成MIDI PITCHWHEEL 控制資料
1. File > Recent > my mouse kb 1
2. GUI > Choose Manually > other controls > Pitch Wheel > Detect Input > 上下移動滑鼠 (注意 Input Source 要顯示 Mouse y, 如果不是y 可拉下選單手選到y) > Appy
3. File > Save as > my mouse kb 1 with pitchwheel
4. run 左右移動聽聽看聲音 左右上下移動聽聽看聲音是否不同
如果效果不明顯 請縮小 midi.FirstNote = MapRange (Mouse.x, 0,1,0,127) 對應的鍵盤範圍
5. my mouse kb 1 with pitchwheel 程式參考
--------以下是程式
// my mouse kb1 with pitchwheel
midi.FirstNote = MapRange(Mouse.x, 0,1, 0,127)
// use this for clearer effect
//midi.FirstNote = MapRange(Mouse.x, 0,1, 60,70)

midi.PitchWheel = MapRange(Mouse.y, 0,1, 0,1)
--------以上是程式

打開 my midi kb 2
加上 midi.PitchWheel = MapRange(Mouse.y, 0,1, 0,1) 這行指令
再用GUI > Catagory > 14-bit Controls 0..31 > cc1, 33 ModWheel > Edit Manually > 拉下 Input Devoice 選單選 Mouse > part of device 選單選 x > Apply
把這程式存成 my midi kb 2 with PitchModWheel 這個虛擬音樂鍵盤除了音符還有鍵盤常有的modulation wheel和 pitchbend wheel. 這對一般編曲已經十分足夠

my midi kb 2 with PitchModWheel 程式參考
--------以下是程式
// my midi kb 2 with PitchModWheel
//do
midi.c5 = Keyboard.Z
// do sharp
midi.csharp5 = Keyboard.s
// re
midi.d5 = Keyboard.x
// re sharp
midi.csharp5 = Keyboard.d
// me
midi.e5 = Keyboard.c
// fa
midi.f5 = Keyboard.v
// fa sharp
midi.fsharp5 = Keyboard.g
// so
midi.g5 = Keyboard.b
// so sharp
midi.gsharp5 = Keyboard.h
//la
midi.a5 = Keyboard.n
// la sharp
midi.asharp5 = Keyboard.j
//si
midi.b5 = Keyboard.m
//do
midi.c6 = Keyboard.k
// do sharp
midi.csharp6 = Keyboard.lComma
// re
midi.d6 = Keyboard.dot
// re sharp
midi.dsharp6 = Keyboard.semicolon
// me
midi.e6 = Keyboard.slash

midi.PitchWheel = MapRange(Mouse.y, 0,1, 0,1)
midi.ModWheel = MapRange(Mouse.x, 0,1, 0,1)
--------以上是程式


進階GlovePIE 程式編寫範例 (未完...)

滑鼠
移動, 滑鼠左右鍵和鍵盤A 的組合

if keyboard.a=1
midi.FirstNote = MapRange(Mouse.x, 0,1, 63,65)
else
midi.FirstNote = MapRange(Mouse.x, 0,1, 60,62)
endif

midi.SecondNote = MapRange(Mouse.y, 0,1, 48,50)
midi.c4 = Mouse.LeftButton
midi.d4 = Mouse.rightButton

midi.PitchWheel = MapRange(Mouse.y, 0,1, 0,127)/127

用F9壓出 C 大調和弦

midi.c4 = Keyboard.F9
midi.e4 = Keyboard.F9
midi.g4 = Keyboard.F9

其它指令請參考
GlovePIE030/documentation.rtf
Command and other Statements
MIDI

... 未完