2017-05-04 18 views
0

我正在編寫一個程序,它將從只能發送cc並將其作爲nrpn消息發送給另一個設備的設備讀取傳入的cc消息。我知道如何發送來自pygame的cc消息,但我無法圍繞如何發送nrpn。我查看了Vriareon的代碼,並沒有看到它的任何地方甚至可以訪問midi。任何人都可以舉例說明這是如何完成的?如何使用pygame midi發送NRPN消息

謝謝!

+0

的NRPN *是*的CC。 –

+0

正確。我不明白的是用於控制消息的數字。如果我有17號碼,我可以這樣做:「self.midi_out.write_short(0xb0,17,123)」。當NRPN看起來像這樣的「0:15」時,我如何處理正確的NRPN? – PKore

回答

0

NRPN消息 CC消息。

但是,NRPN號碼與CC號碼不同。所述MIDI specification說:

控制器號碼6(數據條目),在與控制器編號96(數據增量),97(數據減),98(非註冊參數編號LSB),結合99(未註冊參數號MSB),100(註冊參數號LSB)和101(註冊參數號MSB),通過MIDI擴展控制器的數量。通過首先使用控制器98和99或100和101選擇要編輯的參數編號,然後使用控制器編號6,96或97調整該參數的數據值來傳輸參數數據。

要更改像音量的控制器(7),你會發送一個消息:

B0 07 xx 

要更改NRPN,你會首先選擇NRPN:

B0 63 mm 
B0 62 ll 

,然後改變當前選擇的NRPN機智小時的數據輸入控制器:

B0 06 mm 
B0 26 ll (optional, for 14-bit values) 

所以設置NRPN 0:1至值42可以用來完成:

self.midi_out.write_short(0xb0, 0x63, 0) 
self.midi_out.write_short(0xb0, 0x62, 1) 
self.midi_out.write_short(0xb0, 0x06, 42) 
+0

謝謝你的詳細解答!對不起,沒有抓住這個。當我發送cc消息時,我使用一個數字作爲cc,一個數字作爲它的值,我可以使用pygame的write_short方法來實現。在pygame代碼中,NRPN更改消息的外觀如何?我會使用pygame的write()方法並將所有這些值包含在消息數組中嗎? – PKore

+0

這些是您要發送的字節。 –

+0

對不起,我很難理解這一點。我不明白這是怎麼看代碼。也許如果我能看到一個例子,它會對我更有意義。我正在從一個數據圖表中提供這種格式的nrpns「env 2 attack,NRPN - 0:1,0,127」。我不知道標記「0:1」是如何轉化爲我在NRPN上讀到的任何信息。另一件事是,當我使用write_short()方法時,我發送它3個參數。看起來雖然nrpn消息會需要更多的參數,我不知道它們應該是什麼樣子。 – PKore