Как найти устройство / dev с определенной строкой $ предпочтительно в переполнении стека

Я читаю / пишу с / на устройство midi. Устройство (частично) указано как «ME-50», например, lsusb. Какую команду можно использовать, чтобы распознать точное устройство, с которым связан «ME-50»? В моем основном ПК, например он связан с / dev / snd / midiC0D0, но также может быть / dev / snd / midiC2D0 в зависимости от того, что подключено первым.

что-то вроде:

for all devices in /dev/snd/midi* {
if substring in the device = "ME-50"return device (/dev/snd/midiC0D0 or midiC1D0 or midiC2D0....)
}

команда bash подойдет, но я программирую на PHP, так что если в PHP есть что-то простое, чтобы найти устройство ….

Спасибо
Арьен

1

Решение

Взгляни на путь /dev/snd/by-id если вам повезет, ваше устройство появится с каким-нибудь узнаваемым именем.

Тогда используйте ScanDir или так, чтобы повторить путь.

Если вы хотите получить прямой путь по ссылке, вы можете использовать readlink.

Редактировать:

Если udevadm доступно, команда возвращает много информации об устройствах, которые могут содержать идентифицируемые биты. Следующий фрагмент перебирает доступные устройства midi и сохраняет всю информацию в массиве ($result), например все строки из udevadm info -q all /dev/snd/midiC0D0,
Остальной задачей будет распознать полезную информацию.

<?php

if ($handle = opendir('/dev/snd')) {
while (false !== ($entry = readdir($handle))) {
// detect all entries starting with "midi"if (strpos($entry, "midi") === 0) {
exec(escapeshellcmd("udevadm info -q all /dev/snd/$entry"), $result);
// $result contains the lines from the udevadm call
print_r($result);
print "\n";
}
}

closedir($handle);
}
1

Другие решения

MIDI-устройства перечислены с их именами, когда вы обращаетесь к ним через соответствующий API (ALSA RawMIDI или секвенсор):

$ amidi -l
Имя устройства Dir
IO hw: 2,0 Xonar D2 MIDI
IO hw: 6,0,0 SC-8820 Часть A
IO hw: 6,0,1 SC-8820 Часть B
IO hw: 6,0,2 SC-8820 MIDI
$ aplaymidi -l
Порт Имя клиента Имя порта
14: 0 Миди Через Миди Через Порт-0
24: 0 Xonar D2 Xonar D2 MIDI
40: 0 SC-8820 SC-8820 Часть A
40: 1 SC-8820 SC-8820 Часть B
40: 2 SC-8820 SC-8820 MIDI

Аудиоустройства USB получают записи в /dev/snd/by-id/, которые указывают на устройство управления каждой карты:

$ ls -l / dev / snd / by-id /
lrwxrwxrwx 1 root root 12 сен. 23 12:51 usb-0582_0007-00 -> ../controlC6
lrwxrwxrwx 1 корневой корень 12 сентября 23 12:51 usb-Roland_EDIROL_UA-1A-00 -> ../controlC5

Соответствующий узел устройства MIDI имеет тот же номер карты после буквы C:

$ ls -l / dev / snd / midiC6 *
crw-rw ---- 1 root audio 116, 12 сен. 23 12:51 / dev / snd / midiC6D0

Другой способ найти номер карты — поиск в /proc/asound/card*/usbid файлы для идентификатора вашего устройства:

$ cat / proc / asound / card6 / usbid
0582: 0007

В качестве альтернативы, проанализируйте содержимое /proc/asound/cards:

$ cat / proc / asound / cards
2 [D2]: AV200 - Xonar D2
Asus Virtuoso 200 в 0xe800, IRQ 20
5 [UA1A]: USB-аудио - EDIROL UA-1A
Roland EDIROL UA-1A на usb-0000: 00: 12.2-4.2, на полной скорости
6 [SC8820]: USB-аудио - SC-8820
Roland SC-8820 на usb-0000: 00: 12.0-3, на полной скорости
^
номер карты
1

По вопросам рекламы [email protected]