LINUX.ORG.RU

FreeBSD, «объединить» аудиоустройства

 ,


3

3

Имеется два (на самом деле четыре, но остальные два — digital output, они к делу не относятся) pcm — 0 (play/rec) и 1 (rec).

Встроенный микрофон находится на pcm1 (dsp1.0), внешний (через 1/8 (3.5) Jack) — pcm0 (dsp0.0). Хочется сделать запись по дефолту с dsp1.0, сохранив output на dsp0.0 и со встроенных спикеров, и через 1/8 (3.5) Jack и переключать запись на dsp0.0 при втыкании микрофона в 1/8 (3.5) Jack.

Пытался шаманить device.hints, но я не совсем понимаю как оно устроено, потому либо пропадает output, либо пропадает возможность записывать в input.

Устанавливать sndio/oss/virtual_oss/pulseaudio/alsa/whatever не предлагать.

@iZEN (кастую потому что не подписан на тег freebsd).

Решение.

★★★★★

Последнее исправление: mord0d (всего исправлений: 1)
 %  cat /dev/sndstat
Installed devices:
pcm0: <Realtek ALC269 (Analog 2.0+HP/2.0)> (play/rec) default
pcm1: <Realtek ALC269 (Internal Analog Mic)> (rec)
pcm2: <Intel Panther Point (HDMI/DP 8ch)> (play)
pcm3: <Intel Panther Point (HDMI/DP 8ch)> (play)
pcm4: <Intel Panther Point (HDMI/DP 8ch)> (play)
No devices installed from userspace.

https://0x0.st/-oWa.nids

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

Ну и да, раз пошла такая пьянка, хотелось бы ещё заставить работать PC Speaker, который на самом деле через snd_hda (физического speaker нет).

device speaker в KERNNAME.CONF, не?

IPR ★★★★★
()
Ответ на: комментарий от IPR

У меня GENERIC, это раз. Спикер фактически в ноуте через динамики, это два. Тут надо задействовать какую-то нестандартную магию, недокументированную.

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

А что там пересобирать? РАз, и пересобрал.

Тебе же написали - собирай порт, всё будет работать. НЕ ставь PKG install.

white_bull
()

А как на Фре заставить систему автоматически переключать аудиоканал вывода звука с колонок на наушники при втыкании штеккера в гнездо на передней панели и обратно при вытыкании?

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

А как на Фре заставить систему автоматически переключать аудиоканал вывода звука с колонок на наушники при втыкании штеккера в гнездо на передней панели и обратно при вытыкании?

Да элементарно, магией device.hints:

hint.hdaa.0.nid20.config="as=1 seq=0 device=Speaker"
hint.hdaa.0.nid21.config="as=1 seq=15 device=Headphones"

Возможно придётся включить dev.hdac.0.pindump и копать.

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

Мне ехать, а не шашечки.

GENERIC - это не про ехать, а запуститься с помощью такой-то матери на всякой экзотике и дать админу шанс собрать нормально. Раньше оно даже больше одного ядра не использовало.

Shadow ★★★★★
()
Ответ на: комментарий от Shadow

запуститься с помощью такой-то матери на всякой экзотике и дать админу шанс собрать нормально

Ну раньше так было, а сейчас оно готово… даже для десктопа (ну по крайней мере без видеокарты).

Раньше оно даже больше одного ядра не использовало.

Раньше и земля была плоская. ^_~

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

Мне ехать, а не шашечки. ^_~

Да брось, выкинуть весь мусор, уменьшить задержки при загрузке, каеф жи.

IPR ★★★★★
()
Ответ на: комментарий от IPR

выкинуть весь мусор

Там из мусора только amd, который к 13.0 обещали выкинуть.

уменьшить задержки при загрузке

Это делается напильником после установки.

На ноуте (о котором сабжевый тред) у меня даже оттюнено для продления жизни от батареи, живёт чуть больше десяти часов на новой и около шести на старой, всё тот же GENERIC. А компилять несколько разных FreeBSD (потому что помимо десктопа+ноута у меня ещё всякое есть) — занятие не очень, учитывая что билдферма софта у меня крутится на десктопе как на самой мощной из машин на FreeBSD.

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

Там есть какой-то Radeon Pro WX, помеченный как полярис. Про RX470 ничего нет.

hateWin ★☆
()
Ответ на: комментарий от mord0d

С опцией WITHOUT_CLANG=true и WITHOUT_LIB32=true make выполняется значительно быстрее, не говоря уж о ненужных SENDMAIL и других странных вещах в мире FreeBSD.

iZEN ★★★★★
()
Ответ на: комментарий от iZEN

WITHOUT_CLANG=true

Но он ведь нужен. Нечасто, но нужен. Не ставить же из портов.

WITHOUT_LIB32=true

А вот это мне нужно, это я использую часто.

не говоря уж о ненужных SENDMAIL

Оно отключается тремя строчками в rc.conf, тем более dma завезли в базовую систему и нужда в порте отпала.

А то что он стоит в базе… ну и фиг с ним, он весит-то фигню.

и других странных вещах в мире FreeBSD

Многими "странными вещами" я таки пользуюсь. И сам периодически ваяю странные вещи. ☺

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

Да сколько там то ядро-то собирается? Минут 20?

В 12-CURRENT было что-то около того, а STABLE я тыкал так давно, что уже и не помню.

Но двадцать минут для десктопа, ещё двадцать для ноута, и ещё пять раз по двадцать для других железок. Оно мне надо?

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

Но двадцать минут для десктопа, ещё двадцать для ноута, и ещё пять раз по двадцать для других железок. Оно мне надо?

Ну дажэ не знаю. Я билдю на ферме, заточенной под это, с перекидыванием на нетбук :)

IPR ★★★★★
()
Ответ на: комментарий от IPR

У меня билдфермой выступает десктоп. А на десктопе я, внезапно, тоже работаю.

Ну а если компилять одну фряху на всех, то какой смысл вообще компилять, если есть GENERIC, который просто работает?

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

Смысле одну на всех? Я про ядро. CPUTYPE можно динамично менять, ядро собирается 20 минут, конфиги разные.

IPR ★★★★★
()
Ответ на: комментарий от mord0d

Но он ведь нужен. Нечасто, но нужен. Не ставить же из портов.

Если версия LLVM/Clang в системе не меняется, то зачем компилировать одно и тоже по несколько раз? WITHOUT_CLANG=true просто выключает этот ненужный этап. Лучше эту строку использовать в командной строке, а не в /etc/src.conf, так как при очистке системы от старых файлов возможна ситуация остаться без системного CLANG (make читает /etc/src.conf) и тогда придётся ставить из пакета аналогичный (добавить три строчки в /etc/make.conf, чтобы система видела его при собственной пересборке).

iZEN ★★★★★
()
Ответ на: комментарий от iZEN

WITHOUT_CLANG=true просто выключает этот ненужный этап.

И не ставит его в систему из подготовленного тулчейна в src?

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

i386?

Всё гораздо печальнее.

А вообще, я хочу на MIPS накатить, но поддержки официальной нет, потому трахаццо придётся с препятствиями. (%

mord0d ★★★★★
() автор топика
Ответ на: комментарий от mord0d
cd /usr/src/ && make cleandir buildworld WITHOUT_CLANG=true
cd /usr/src/ && make buildkernel
cd /usr/src/ && make installkernel installworld WITHOUT_CLANG=true && mergemaster -iU
cd /usr/src/ && make BATCH_DELETE_OLD_FILES=true delete-old delete-old-libs
iZEN ★★★★★
()
Последнее исправление: iZEN (всего исправлений: 1)
Ответ на: комментарий от iZEN

Как это относится к сабжевому сабжу? ☺

Сейчас я хочу только объединить устройства, компилянья — это уже отдельная тема.

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

Менял местами микрофоны для хромиума. По сути, посмотрел и сменил as для nid с микрофонами. Благо оба входа на hda висят, как и у вас. Вот такое в loader.conf у меня.

hint.hdaa.1.nid18.config="as=2"

hint.hdaa.1.nid26.config="as=3"

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

Можно выхлоп sysctl dev.hdaa | grep -E 'nid[0-9]+'?

Я не совсем понимаю эту магию, и чем больше у меня будет вводных, тем проще с будет разобраться.

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

Update

По наводке @curver удалось повесить встроенный микрофон на /dev/dsp0.0, но внешний теперь на /dev/dsp1.0.

Хотелось бы повесить оба на dsp0.0. Учитывая комбинированный Jack 1/8, это не очень хорошая идея, но всё же.

mord0d ★★★★★
() автор топика
Ответ на: Update от mord0d

Update[2]

Решение:

/boot/device.hints:

hint.hdaa.0.nid18.config="as=2 seq=0 device=Mic"
hint.hdaa.0.nid24.config="as=2 seq=14 device=Mic"

Теперь оба микрофона сидят на dsp0.0, и автопереключаются (вроде бы).

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

Можно выхлоп sysctl dev.hdaa | grep -E ‘nid[0-9]+’?

dev.hdaa.1.nid36: vendor widget [DISABLED]                                                                                                         
dev.hdaa.1.nid35: audio selector                                                                                                                   
dev.hdaa.1.nid34: audio selector                                                                                                                   
dev.hdaa.1.nid33: vendor widget [DISABLED]                                                                                                         
dev.hdaa.1.nid32: vendor widget [DISABLED]                                                                                                         
dev.hdaa.1.nid31: vendor widget [DISABLED]                                                                                                         
dev.hdaa.1.nid30_original: 0x411111f0 as=15 seq=0 device=Speaker conn=None ctype=1/8 loc=Rear color=Black misc=1
dev.hdaa.1.nid30_config: 0x411111f0 as=15 seq=0 device=Speaker conn=None ctype=1/8 loc=Rear color=Black misc=1        
dev.hdaa.1.nid30: pin: Speaker (None) [DISABLED]                                                                                                   
dev.hdaa.1.nid29_original: 0x40738105 as=0 seq=5 device=Modem-handset conn=None ctype=ATAPI loc=0x00 color=Purple misc=1
dev.hdaa.1.nid29_config: 0x40738105 as=0 seq=5 device=Modem-handset conn=None ctype=ATAPI loc=0x00 color=Purple misc=1
dev.hdaa.1.nid29: beep widget                                                                                                                      
dev.hdaa.1.nid28: vendor widget [DISABLED]
dev.hdaa.1.nid27_original: 0x411111f0 as=15 seq=0 device=Speaker conn=None ctype=1/8 loc=Rear color=Black misc=1
dev.hdaa.1.nid27_config: 0x411111f0 as=15 seq=0 device=Speaker conn=None ctype=1/8 loc=Rear color=Black misc=1
dev.hdaa.1.nid27: pin: Speaker (None) [DISABLED]
dev.hdaa.1.nid26_original: 0x03a11020 as=2 seq=0 device=Mic conn=Jack ctype=1/8 loc=Left color=Black misc=0
dev.hdaa.1.nid26_config: 0x03a11030 as=3 seq=0 device=Mic conn=Jack ctype=1/8 loc=Left color=Black misc=0
dev.hdaa.1.nid26: pin: Mic (Black Jack)
dev.hdaa.1.nid25_original: 0x411111f0 as=15 seq=0 device=Speaker conn=None ctype=1/8 loc=Rear color=Black misc=1
dev.hdaa.1.nid25_config: 0x411111f0 as=15 seq=0 device=Speaker conn=None ctype=1/8 loc=Rear color=Black misc=1
dev.hdaa.1.nid25: pin: Speaker (None) [DISABLED]
dev.hdaa.1.nid24_original: 0x411111f0 as=15 seq=0 device=Speaker conn=None ctype=1/8 loc=Rear color=Black misc=1
dev.hdaa.1.nid24_config: 0x411111f0 as=15 seq=0 device=Speaker conn=None ctype=1/8 loc=Rear color=Black misc=1
dev.hdaa.1.nid24: pin: Speaker (None) [DISABLED]
dev.hdaa.1.nid23: vendor widget [DISABLED]
dev.hdaa.1.nid22_original: 0x411111f0 as=15 seq=0 device=Speaker conn=None ctype=1/8 loc=Rear color=Black misc=1
dev.hdaa.1.nid22_config: 0x411111f0 as=15 seq=0 device=Speaker conn=None ctype=1/8 loc=Rear color=Black misc=1
dev.hdaa.1.nid22: pin: Speaker (None) [DISABLED]
dev.hdaa.1.nid21_original: 0x0321101f as=1 seq=15 device=Headphones conn=Jack ctype=1/8 loc=Left color=Black misc=0     
dev.hdaa.1.nid21_config: 0x0321101f as=1 seq=15 device=Headphones conn=Jack ctype=1/8 loc=Left color=Black misc=0     
dev.hdaa.1.nid21: pin: Headphones (Black Jack)
dev.hdaa.1.nid20_original: 0x90170110 as=1 seq=0 device=Speaker conn=Fixed ctype=Analog loc=Internal color=Unknown misc=1
dev.hdaa.1.nid20_config: 0x90170110 as=1 seq=0 device=Speaker conn=Fixed ctype=Analog loc=Internal color=Unknown misc=1
dev.hdaa.1.nid20: pin: Speaker (Fixed)
dev.hdaa.1.nid19_original: 0x40000000 as=0 seq=0 device=Line-out conn=None ctype=Unknown loc=0x00 color=Unknown misc=0
dev.hdaa.1.nid19_config: 0x40000000 as=0 seq=0 device=Line-out conn=None ctype=Unknown loc=0x00 color=Unknown misc=0
dev.hdaa.1.nid19: pin: Line-out (None) [DISABLED]
dev.hdaa.1.nid18_original: 0x90a60130 as=3 seq=0 device=Mic conn=Fixed ctype=Digital loc=Internal color=Unknown misc=1
dev.hdaa.1.nid18_config: 0x90a60120 as=2 seq=0 device=Mic conn=Fixed ctype=Digital loc=Internal color=Unknown misc=1
dev.hdaa.1.nid18: pin: Mic (Fixed)
dev.hdaa.1.nid17: vendor widget [DISABLED]
dev.hdaa.1.nid16: vendor widget [DISABLED]
dev.hdaa.1.nid15: audio mixer [DISABLED]
dev.hdaa.1.nid14: vendor widget [DISABLED]
dev.hdaa.1.nid13: audio mixer [DISABLED]
dev.hdaa.1.nid12: audio mixer
dev.hdaa.1.nid11: audio mixer
dev.hdaa.1.nid10: vendor widget [DISABLED]
dev.hdaa.1.nid9: audio input
dev.hdaa.1.nid8: audio input
dev.hdaa.1.nid7: vendor widget [DISABLED]
dev.hdaa.1.nid6: audio output [DISABLED]
dev.hdaa.1.nid5: vendor widget [DISABLED]
dev.hdaa.1.nid4: vendor widget [DISABLED]
dev.hdaa.1.nid3: audio output [DISABLED]
dev.hdaa.1.nid2: audio output
dev.hdaa.0.nid3_original: 0x18560010 as=1 seq=0 device=Digital-out conn=Jack ctype=Digital loc=0x18 color=Unknown misc=0
dev.hdaa.0.nid3_config: 0x18560010 as=1 seq=0 device=Digital-out conn=Jack ctype=Digital loc=0x18 color=Unknown misc=0
dev.hdaa.0.nid3: pin: Digital-out (Jack)
dev.hdaa.0.nid2: audio output

Тут я просто поменял местами микрофоны. Там можно все переконфигурировать, но не хотелось разбираться. Так как такой трюк не сойдет если микрофон на другом устройстве, например в веб-камере. Тут правильнее софт патчить, как не так давно запатчили фаерфокса.

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

такой трюк не сойдет если микрофон на другом устройстве

Это да. Меня изначально смутило что у меня микрофоны на разных виртуальных устройствах.

например в веб-камере

Так оно по USB естественно не взлетит смержить.

Тут правильнее софт патчить, как не так давно запатчили фаерфокса.

Ну юзерспейсный софт — да. А в ядре/модулях и так всё нормально. Сабжевая хотелка так-то из разряда «хочется странного».

Благодарю за выхлоп и за наводку на решение.

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