MIDI設備都列出了他們的名字,當您通過適當的API(ALSA RawMIDI或音序)訪問它們:
$ amidi -l
Dir Device Name
IO hw:2,0 Xonar D2 MIDI
IO hw:6,0,0 SC-8820 Part A
IO hw:6,0,1 SC-8820 Part B
IO hw:6,0,2 SC-8820 MIDI
$ aplaymidi -l
Port Client name Port name
14:0 Midi Through Midi Through Port-0
24:0 Xonar D2 Xonar D2 MIDI
40:0 SC-8820 SC-8820 Part A
40:1 SC-8820 SC-8820 Part B
40:2 SC-8820 SC-8820 MIDI
USB音頻設備獲得/dev/snd/by-id/
條目,這點每個卡的控制設備:
$ ls -l /dev/snd/by-id/
lrwxrwxrwx 1 root root 12 Sep 23 12:51 usb-0582_0007-00 -> ../controlC6
lrwxrwxrwx 1 root root 12 Sep 23 12:51 usb-Roland_EDIROL_UA-1A-00 -> ../controlC5
對應的MIDI設備節點具有相同的信C
後,卡號:
$ ls -l /dev/snd/midiC6*
crw-rw---- 1 root audio 116, 12 Sep 23 12:51 /dev/snd/midiC6D0
另一種方式找到卡號是在/proc/asound/card*/usbid
文件中搜索您的設備ID:
$ cat /proc/asound/card6/usbid
0582:0007
另外,解析內容/proc/asound/cards
:
$ cat /proc/asound/cards
2 [D2 ]: AV200 - Xonar D2
Asus Virtuoso 200 at 0xe800, irq 20
5 [UA1A ]: USB-Audio - EDIROL UA-1A
Roland EDIROL UA-1A at usb-0000:00:12.2-4.2, full speed
6 [SC8820 ]: USB-Audio - SC-8820
Roland SC-8820 at usb-0000:00:12.0-3, full speed
^
card number
好的提示,它的確出現了一個可識別的名字。然而,它指向(鏈接)/ dev/snd/controlC1而不是../midiC0D1。我將嘗試使用Control1,但爲什麼有一個midi有多個設備,並且他們會對讀/寫操作做出相同的反應? – Arjen
顯然是有區別的。一個簡單的fopen()/ fwrite()/ fread()可以與/ dev/snd/midiC0D0一起使用,但不能與../ controlC1 ....所以原來的問題保持開放,除非在控制1 <--> midiC0D0之間有一些聯繫? 也許control1是一個音頻通道?我的設備既是音頻設備,也是MIDI。 – Arjen
顯然這些設備是不同的。我沒有任何MIDI設備,但我會添加另一種方法來解決問題。 – c11o