LINUX.ORG.RU

FreeBSD стерео: поменять левый с правым

 , right-to-left,


0

2

Приветствую.

Не хочется переставлять стереоколонки местами. Входной кабель оптический. Источник питания только в одной колонке, вторая пассивная

Вопрос: как вывод звука настроить так, чтобы из источника стереосигнала в правую колонку выводился левый, а в левую колонку правый канал?

Хотелось бы сделать это без установки сторонних микшеров средствами драйвера операционной системы. Без перекомпиляции исходников. Может есть какие-то хинты конфигурации на этот счёт?

★★★★★

Последнее исправление: iZEN (всего исправлений: 2)

Multichannel Audio Multichannel audio, popularly referred to as «surround sound» is sup- ported and enabled by default. The FreeBSD multichannel matrix proces- sor supports up to 18 interleaved channels, but the limit is currently set to 8 channels (as commonly used for 7.1 surround sound). The in- ternal matrix mapping can handle reduction, expansion or re-routing of channels. This provides a base interface for related multichannel ioctl() support. Multichannel audio works both with and without VCHANs.

Most bridge device drivers are still missing multichannel matrixing support, but in most cases this should be trivial to implement. Use the dev.pcm.%d.[play|rec].vchanformat sysctl(8) to adjust the number of channels used. The current multichannel interleaved structure and arrangement was implemented by inspecting various popular UNIX applica- tions. There were no single standard, so much care has been taken to try to satisfy each possible scenario, despite the fact that each ap- plication has its own conflicting standard.

- очевидно, что без дописывания собственной матрицы и перекомпилирования, нет. Но написано, что это просто и всё необходимое в ядре есть.

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

Ну так посмотри на nidы:

sysctl dev.hdaa | grep -E '[0-9]+\.nid[0-9]+_(config|original)'

Если найдёшь там крутилки к своим колонкам — сможешь переназначить их в device.hints.

mord0d ★★★★★
()

«Если гора не идёт к Магомету, то Магомет идёт к горе.»

Не хочется переставлять стереоколонки местами.

Встань к ним спиной.

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

sysctl dev.hdaa | grep -E ‘[0-9]+.nid[0-9]+_(config|original)’

Вот:

% sysctl dev.hdaa | grep -E '[0-9]+\.nid[0-9]+_(config|original)'
dev.hdaa.1.nid30_original: 0x01451130 as=3 seq=0 device=SPDIF-out conn=Jack ctype=Optical loc=Rear color=Black misc=1
dev.hdaa.1.nid30_config: 0x01451130 as=3 seq=0 device=SPDIF-out conn=Jack ctype=Optical loc=Rear color=Black misc=1
dev.hdaa.1.nid27_original: 0x02214020 as=2 seq=0 device=Headphones conn=Jack ctype=1/8 loc=Front color=Green misc=0
dev.hdaa.1.nid27_config: 0x02214020 as=2 seq=0 device=Headphones conn=Jack ctype=1/8 loc=Front color=Green misc=0
dev.hdaa.1.nid26_original: 0x0181104f as=4 seq=15 device=Line-in conn=Jack ctype=1/8 loc=Rear color=Black misc=0
dev.hdaa.1.nid26_config: 0x0181104f as=4 seq=15 device=Line-in conn=Jack ctype=1/8 loc=Rear color=Black misc=0
dev.hdaa.1.nid25_original: 0x02a19050 as=5 seq=0 device=Mic conn=Jack ctype=1/8 loc=Front color=Pink misc=0
dev.hdaa.1.nid25_config: 0x02a19050 as=5 seq=0 device=Mic conn=Jack ctype=1/8 loc=Front color=Pink misc=0
dev.hdaa.1.nid24_original: 0x01a11040 as=4 seq=0 device=Mic conn=Jack ctype=1/8 loc=Rear color=Black misc=0
dev.hdaa.1.nid24_config: 0x01a11040 as=4 seq=0 device=Mic conn=Jack ctype=1/8 loc=Rear color=Black misc=0
dev.hdaa.1.nid23_original: 0x411111f0 as=15 seq=0 device=Speaker conn=None ctype=1/8 loc=Rear color=Black misc=1
dev.hdaa.1.nid23_config: 0x411111f0 as=15 seq=0 device=Speaker conn=None ctype=1/8 loc=Rear color=Black misc=1
dev.hdaa.1.nid22_original: 0x01011011 as=1 seq=1 device=Line-out conn=Jack ctype=1/8 loc=Rear color=Black misc=0
dev.hdaa.1.nid22_config: 0x01011011 as=1 seq=1 device=Line-out conn=Jack ctype=1/8 loc=Rear color=Black misc=0
dev.hdaa.1.nid21_original: 0x01011012 as=1 seq=2 device=Line-out conn=Jack ctype=1/8 loc=Rear color=Black misc=0
dev.hdaa.1.nid21_config: 0x01011012 as=1 seq=2 device=Line-out conn=Jack ctype=1/8 loc=Rear color=Black misc=0
dev.hdaa.1.nid20_original: 0x01015010 as=1 seq=0 device=Line-out conn=Jack ctype=1/8 loc=Rear color=Red misc=0
dev.hdaa.1.nid20_config: 0x01015010 as=1 seq=0 device=Line-out conn=Jack ctype=1/8 loc=Rear color=Red misc=0
dev.hdaa.1.nid17_original: 0x4037c540 as=4 seq=0 device=CD conn=None ctype=Analog loc=0x00 color=Res.C misc=5
dev.hdaa.1.nid17_config: 0x4037c540 as=4 seq=0 device=CD conn=None ctype=Analog loc=0x00 color=Res.C misc=5
dev.hdaa.0.nid9_original: 0x585600f0 as=15 seq=0 device=Digital-out conn=None ctype=Digital loc=0x18 color=Unknown misc=0
dev.hdaa.0.nid9_config: 0x585600f0 as=15 seq=0 device=Digital-out conn=None ctype=Digital loc=0x18 color=Unknown misc=0
dev.hdaa.0.nid8_original: 0x585600f0 as=15 seq=0 device=Digital-out conn=None ctype=Digital loc=0x18 color=Unknown misc=0
dev.hdaa.0.nid8_config: 0x585600f0 as=15 seq=0 device=Digital-out conn=None ctype=Digital loc=0x18 color=Unknown misc=0
dev.hdaa.0.nid7_original: 0x585600f0 as=15 seq=0 device=Digital-out conn=None ctype=Digital loc=0x18 color=Unknown misc=0
dev.hdaa.0.nid7_config: 0x585600f0 as=15 seq=0 device=Digital-out conn=None ctype=Digital loc=0x18 color=Unknown misc=0
dev.hdaa.0.nid6_original: 0x585600f0 as=15 seq=0 device=Digital-out conn=None ctype=Digital loc=0x18 color=Unknown misc=0
dev.hdaa.0.nid6_config: 0x585600f0 as=15 seq=0 device=Digital-out conn=None ctype=Digital loc=0x18 color=Unknown misc=0
dev.hdaa.0.nid5_original: 0x185600f0 as=15 seq=0 device=Digital-out conn=Jack ctype=Digital loc=0x18 color=Unknown misc=0
dev.hdaa.0.nid5_config: 0x185600f0 as=15 seq=0 device=Digital-out conn=Jack ctype=Digital loc=0x18 color=Unknown misc=0
dev.hdaa.0.nid4_original: 0x185600f0 as=15 seq=0 device=Digital-out conn=Jack ctype=Digital loc=0x18 color=Unknown misc=0
dev.hdaa.0.nid4_config: 0x185600f0 as=15 seq=0 device=Digital-out conn=Jack ctype=Digital loc=0x18 color=Unknown misc=0
iZEN ★★★★★
() автор топика
Ответ на: комментарий от andytux

Встань к ним спиной.

Да, они почему-то в Rear стоят:

% cat /dev/sndstat
Installed devices:
pcm0: <NVIDIA (0x0081) (HDMI/DP 8ch)> (play)
pcm1: <NVIDIA (0x0081) (HDMI/DP 8ch)> (play)
pcm2: <Realtek ALCS1200A (Rear Analog 5.1/2.0)> (play/rec)
pcm3: <Realtek ALCS1200A (Front Analog)> (play/rec)
pcm4: <Realtek ALCS1200A (Rear Digital)> (play) default
No devices installed from userspace.
iZEN ★★★★★
() автор топика
Ответ на: комментарий от iZEN

они почему-то в Rear стоят

Значит тебе нужно перераскинуть те, что loc=Rear из твоего выхлопа выше.

Также ты сказал, что подключение у тебя оптическое, то есть ctype=Optical.

Итого тебя вроде как должно интересовать только это:

dev.hdaa.1.nid30_original: 0x01451130 as=3 seq=0 device=SPDIF-out conn=Jack ctype=Optical loc=Rear color=Black misc=1
dev.hdaa.1.nid30_config: 0x01451130 as=3 seq=0 device=SPDIF-out conn=Jack ctype=Optical loc=Rear color=Black misc=1

Для начала выведи его отдельно:

hint.hdaa.0.nid30.config="as=6 seq=0"

И поиграйся с seq= (смотри snd_hda(4)).

mord0d ★★★★★
()

Входной кабель оптический

А выходной? Перепаяй контакты на штекере и не парься.

ya-betmen ★★★★★
()
Ответ на: комментарий от anonymous

А почему именно 1.nid30?

Здесь топикстартер показал выхлоп "распиновки", а в ОП он написал, что колонки подключены оптическим кабелем (S/PDIF).

С device=SPDIF-out (-in это микрофон, -out — колонки/динамики/наушники) там ровно одна строка (_original это то, что драйвер выставил по умолчанию, _config — то, что было (пере)определено в device.hints, потому для нас не важно какую строку смотреть, если до этого конфиг не трогали, они будут идентичны), и это nid30.

какая связь у этих строк с pcm4 (колонками ТСа)

Здесь у него написано Rear. Угадай, какой из единственного device=SPDIF-out + loc=Rear nid нам нужен? (%

Смотреть в /dev/sndstat нам вообще не нужно, оно не даёт никакой полезной информации для настройки аудио ввода/вывода.

Оно полезно чтобы посмотреть список логических вводов/выводов. Например для манипуляций с sysctl hw.snd.default_unit (переназначение которого доступно даже рядовому пользователю).

mord0d ★★★★★
()
Ответ на: комментарий от mord0d
hint.hdaa.0.nid30.config="as=6 seq=0"

Ой, hdaa.1, конечно же…

hint.hdaa.1.nid30.config="as=6 seq=0"

Спасибо анону выше, иначе я бы не перечитал своё сообщение и не заметил очепятки…

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

И поиграйся с seq= (смотри snd_hda(4)).

Поменять местами pin’ы для левого и правого канала не удалось.

Пока удалось сделать только «фронтальный» тип цифрового выхода вместо «тылового»:

hint.hdaa.1.nid30.config="seq=0 loc=Front"

Как результат:

% cat /dev/sndstat
Installed devices:
pcm0: <NVIDIA (0x0081) (HDMI/DP 8ch)> (play)
pcm1: <NVIDIA (0x0081) (HDMI/DP 8ch)> (play)
pcm2: <Realtek ALCS1200A (Rear Analog 5.1/2.0)> (play/rec)
pcm3: <Realtek ALCS1200A (Front Analog)> (play/rec)
pcm4: <Realtek ALCS1200A (Front Digital)> (play) default
No devices installed from userspace.

Но роли динамиков не изменились.

С «ассоциациями» (as) игрался, но кроме гашения звука ничего не вышло.

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

Думаю, добавить пару строчек в код ядра и пересобрать будет проще. https://github.com/freebsd/freebsd-src/blob/main/sys/dev/sound/pcm/matrix.h - скопировать матрицу 2.0, назвать 2.4, поменять в ней местами левые с правыми. Ну чего как не BSDун!

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

роли динамиков не изменились

Если бы у тебя колонки подключались отдельно, было бы значительно проще. А у тебя один пин на два канала, потому была надежда только на as.

удалось сделать только «фронтальный» тип цифрового выхода вместо «тылового»

А вот loc к сожалению ни на что не влияет, кроме метки в /dev/sndstat.

С «ассоциациями» (as) игрался, но кроме гашения звука ничего не вышло.

Я не знаю что может делать misc (в мануале описание поверхностное, а в исходники я не лез). Можно попробовать покурить в эту сторону, но вряд ли из этого что-то вырастет…

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

Думаю, добавить пару строчек в код ядра

Лул, проблема которая решается звуковым сервером типа pipewire за секунды, требует пересборки ядра, но лишь бы не иметь нормальную звуковую систему, это все шлак, лишние прослойки, ненужно! А музыку можно тоже в ядро ОС влинковать.

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

проблема которая решается звуковым сервером типа pipewire за секунды

Как? Как она решается? Напомню, задача поменять местами колонки, а не левый и правый канал в стерео. Решение должно работать на 2, 4, 5.1, 7.1 конфигурациях.

r--r--r--
()

Может такой вариант подойдёт: ffplay -i 'Top Tracks - U.D.O.'/'Bob the Wraith.....the Bogeyman.mkv' -af "pan=stereo|c0=1*c1|c1=1*c0" или mpv --af=lavfi=[pan=stereo|c0=1c1|c1=1c0] 'Top Tracks - U.D.O.'/'Love Machine.mp4'

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

но лишь бы не иметь нормальную звуковую систему, это все шлак, лишние прослойки, ненужно!

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

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

Для переустановки ядра нужен ребут, это совсем другое. И даже если оно модулем, то для перезагрузки модуля может понадобиться кого-то дропнуть перед этим, тоже нежелательно.

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

Вяленый вообще не нужен. А подкрутка матрицы и целая дополнительная прослойка это совсем разные вещи.

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

лишь бы не иметь нормальную звуковую систему

Какая в данный момент считается нормальной и через сколько времени в ней найдётся фатальный недостаток?

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

С Pipewire уже научился работать Firefox? Пока что у последнего в опциях только: ALSA, PulseAudio и SNDIO.

(Pipewire есть на FreeBSD. Но боюсь, что это глобально проблему не решит — какие-то приложения будут работать через него, какие-то нет).

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

Любые pulse приложения с pipewire работают как родные, лучше чем с pulse даже. В том числе Firefox.

Через pipewire будут работать все приложения. Главное, чтобы работал сам pipewire. Но - на Freebsd могут быть свои серьезные нюансы.

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

Поставил: pipewire, pipewire-pulse, пломбировщик. Но удаление PulseAudio не даёт запустить pipewire, как это описывается в мануале работы pipewire на FreeBSD — сервер pipewire не запускается, что-то держит сокет.

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

Похоже, жуткая каша из наслоений над OSS из Alsa, PulseAudio, сдобренная маслом PipeWire не даёт сделать такие простые вещи, как поменять каналы местами. Действительно, легче перекомпилировать нативный модуль звуковой подситемы. Вот только знать бы где что поменять.

iZEN ★★★★★
() автор топика

Для приложений с PulseAudio проблема решена раскомментированием и редактированием строчки в секции в конце файла конфиурации демона /usr/local/etc/pulse/daemon.conf :

; default-sample-format = s16le
; default-sample-rate = 44100
; alternate-sample-rate = 48000
; default-sample-channels = 2
default-channel-map = front-right,front-left

На всякий случай оставил запись в файле /boot/device.hints:

hint.hdaa.1.nid30.config="as=6 seq=0 loc=Front misc=0"

(Ну а вдруг)

Тест динамиков: https://vkvideo.ru/video-227673890_456240612

iZEN ★★★★★
() автор топика
Последнее исправление: iZEN (всего исправлений: 1)
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария