LINUX.ORG.RU

4 звуковые карты, 3 из которых - одинаковые

 , ,


0

1

Добрый день!

Ubuntu Server 18.04

4 звуковые карты:

 
# cat /proc/asound/cards
 0 [CMI8738        ]: CMI8738 - C-Media CMI8738
                      C-Media CMI8738 (model 37) at 0x5000, irq 16
 1 [CMI8738_1      ]: CMI8738 - C-Media CMI8738
                      C-Media CMI8738 (model 37) at 0x4000, irq 18
 2 [CMI8738_2      ]: CMI8738 - C-Media CMI8738
                      C-Media CMI8738 (model 37) at 0x3000, irq 19
 3 [PCH            ]: HDA-Intel - HDA Intel PCH
                      HDA Intel PCH at 0xa1130000 irq 130

Вопрос в следующем: как задать необходимый порядок инициализации звуковых устройств, чтобы при обращении по адресу вида hw:0,0 всегда была одна и та же карта (решение race condition, так сказать)?

Хотя, в принципе, подойдет и просто совет, как в конфиге darkice обратиться к звуковой карте по адресу PCI-e слота



Последнее исправление: fingerskillz (всего исправлений: 1)
Ответ на: комментарий от Deleted

надо было все разные купить? зачем? задача - 3 аналоговых потока передать на icecast2 сервер

fingerskillz
() автор топика

/dev/snd/by-path не поможет? Выглядит примерно так:

[root@im-desktop ~]# ls -lh /dev/snd/by-path/
total 0
lrwxrwxrwx. 1 root root 12 Dec 26 22:48 pci-0000:00:12.2-usb-0:3:1.0 -> ../controlC3
lrwxrwxrwx. 1 root root 12 Dec 26 22:48 pci-0000:00:14.2 -> ../controlC0
lrwxrwxrwx. 1 root root 12 Dec 26 22:48 pci-0000:01:00.1 -> ../controlC1
lrwxrwxrwx. 1 root root 12 Dec 26 22:48 pci-0000:04:00.0-usb-0:1.1:1.0 -> ../controlC4
lrwxrwxrwx. 1 root root 12 Dec 26 22:48 pci-0000:08:05.0 -> ../controlC2

[root@im-desktop ~]# cat /proc/asound/cards 
 0 [SB             ]: HDA-Intel - HDA ATI SB
                      HDA ATI SB at 0xfeb00000 irq 16
 1 [HDMI           ]: HDA-Intel - HDA ATI HDMI
                      HDA ATI HDMI at 0xfea60000 irq 64
 2 [DG             ]: CMI8786 - Xonar DG
                      C-Media Oxygen HD Audio at 0xa000, irq 20
 3 [U7             ]: USB-Audio - Xonar U7
                      ASUS Xonar U7 at usb-0000:00:12.2-3, high speed
 4 [Webcam         ]: USB-Audio - B525 HD Webcam
                      B525 HD Webcam at usb-0000:04:00.0-1.1, high speed
Номера вроде совпадают.

Deleted
()
Ответ на: комментарий от anonymous
root@stream1:~# modinfo snd-cmipci
filename:       /lib/modules/4.15.0-43-generic/kernel/sound/pci/snd-cmipci.ko
license:        GPL
description:    C-Media CMI8x38 PCI
author:         Takashi Iwai <tiwai@suse.de>
srcversion:     A46F4D892CE5F5245C62DBC
alias:          pci:v000010B9d00000111sv*sd*bc*sc*i*
alias:          pci:v000013F6d00000112sv*sd*bc*sc*i*
alias:          pci:v000013F6d00000111sv*sd*bc*sc*i*
alias:          pci:v000013F6d00000101sv*sd*bc*sc*i*
alias:          pci:v000013F6d00000100sv*sd*bc*sc*i*
depends:        snd-pcm,snd-opl3-lib,snd-mpu401-uart,snd,gameport
retpoline:      Y
intree:         Y
name:           snd_cmipci
vermagic:       4.15.0-43-generic SMP mod_unload
signat:         PKCS#7
signer:
sig_key:
sig_hashalgo:   md4
parm:           index:Index value for C-Media PCI soundcard. (array of int)
parm:           id:ID string for C-Media PCI soundcard. (array of charp)
parm:           enable:Enable C-Media PCI soundcard. (array of bool)
parm:           mpu_port:MPU-401 port. (array of long)
parm:           fm_port:FM port. (array of long)
parm:           soft_ac3:Software-conversion of raw SPDIF packets (model 033 only). (array of bool)
parm:           joystick_port:Joystick port address. (array of int)

Я так понимаю, Вы имеете в виду параметр index. А в каком формате его указывать?

fingerskillz
() автор топика
Ответ на: комментарий от Deleted
man 5 darkice.cfg:

...

device Specify  the device to record from, which can be an OSS DSP device, an ALSA source, PulseAudio source or you can
              use Jack audio.  - OSS DSP audio device to record from (e.g. /dev/dsp) - ALSA DSP device name (e.g.  hwplug:0,0)
              - for PulseAudio use "pulseaudio" - the string 'jack', to have an unconnected Jack port, or
                'jack_auto' to automatically make Jack connect to the first source.

...

получается, что устройства ALSA нужно именовать именно как

hw:0,0

fingerskillz
() автор топика

Откровенно говоря, я сильно запутался, что к чему...

На данный момент справился вот с этим гайдом: https://alsa.opensrc.org/Udev#Identify_two_identical_audio_devices

Теперь у меня звуковые карты имеют постоянные имена:

# cat /proc/asound/cards
 0 [CMEDIA_C       ]: CMI8738 - C-Media CMI8738
                      C-Media CMI8738 (model 37) at 0x5000, irq 16
 1 [CMEDIA_B       ]: CMI8738 - C-Media CMI8738
                      C-Media CMI8738 (model 37) at 0x4000, irq 18
 2 [CMEDIA_A       ]: CMI8738 - C-Media CMI8738
                      C-Media CMI8738 (model 37) at 0x3000, irq 19
 3 [INTEL          ]: HDA-Intel - HDA Intel PCH
                      HDA Intel PCH at 0xa1130000 irq 130

Теперь, как я понял, я могу переходить к созданию алиасов в конфиге

 /etc/asound.conf 
вида:

pcm.NAME {
	type hw               # Kernel PCM
	card INT/STR          # Card name or number
	[device] INT          # Device number (default 0)     
	[subdevice] INT       # Subdevice number, -1 first available (default -1)
	mmap_emulation BOOL   # enable mmap emulation for ro/wo devices
}

где вместо [INT/STR] буду подставлять INTEL, CMEDIA_A, CMEDIA_B, CMEDIA_C.

Я на верном пути?

fingerskillz
() автор топика
Ответ на: комментарий от fingerskillz

Я хотел сказать, что если ты свои приложения, требующие указывать конкретные ALSA-устройства как «hw:X,0», уже запускаешь какими-то скриптами, то содержимое /dev/snd/by-path/ может помочь определить X для конкретной звуковой карты.

Примерно вот так:

DEV_PATH="pci-0000:08:05.0"
X=$( readlink "/dev/snd/by-path/${DEV_PATH}" | sed "s,^[^0-9]*\(.*\)$,\1," )
echo $X

Но если не хочешь писать скрипты или у тебя графическое приложение, то видимо только как-то через udev переназначать эти номера. Если это вообще возможно.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

Через udev возможно задать картам имена и я, кажется, справился с этим.

fingerskillz
() автор топика
Ответ на: комментарий от Deleted

Вот сейчас проверяю как раз. Из за неграмотности и отсутствия системного подхода к решению подобных задач некоторые задачи отнимают слишком много времени)

fingerskillz
() автор топика

Решено этим гайдом: https://alsa.opensrc.org/Udev#Identify_two_identical_audio_devices

$ cat /etc/udev/rules.d/60-sound-cards.rules
SUBSYSTEM!="sound", GOTO="sound_cards_end"
ACTION!="add", GOTO="sound_cards_end"

DEVPATH=="/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:00.0/sound/card?", ATTR{id}="CMEDIA_C"
DEVPATH=="/devices/pci0000:00/0000:00:1c.6/0000:07:00.0/0000:08:00.0/sound/card?", ATTR{id}="CMEDIA_B"
DEVPATH=="/devices/pci0000:00/0000:00:1c.7/0000:09:00.0/0000:0a:00.0/sound/card?", ATTR{id}="CMEDIA_A"
DEVPATH=="/devices/pci0000:00/0000:00:1f.3/sound/card?", ATTR{id}="INTEL"

LABEL="sound_cards_end"

$ cat /proc/asound/cards
 0 [INTEL          ]: HDA-Intel - HDA Intel PCH
                      HDA Intel PCH at 0xa1130000 irq 130
 1 [CMEDIA_C       ]: CMI8738 - C-Media CMI8738
                      C-Media CMI8738 (model 37) at 0x5000, irq 16
 2 [CMEDIA_B       ]: CMI8738 - C-Media CMI8738
                      C-Media CMI8738 (model 37) at 0x4000, irq 18
 3 [CMEDIA_A       ]: CMI8738 - C-Media CMI8738
                      C-Media CMI8738 (model 37) at 0x3000, irq 19

Обращение к карте в конфиге darkice:

$ cat /etc/darkice/home.cfg
...
[input]
device          = hw:INTEL,0
sampleRate      = 48000
bitsPerSample   = 16
channel         = 2
...
fingerskillz
() автор топика
Ответ на: комментарий от Deleted

Ответ на сообщение:

Я бы хотел ещё раз поднять вопрос о снятии полномочий с jollheef.

Ну, этот хотя бы отвечает вежливо, не хамит, не дартаньянит, да и особо не шлангует, в отличие от других модераторов. Если и снимать кого-то, то полно других кандидатов. Этого бы я снял в последнюю очередь.

#t14700702

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.