LINUX.ORG.RU

Может ли голая альса переключать устройство вывода на лету?

 , , ,


1

2

Пульса и трубопровод задрали своими глюками (трубопровод отваливаеться, пульса иногда обнаруживает USB-наушники с 10-го раза). Альса по умолчанию выводит звук на встроенную звуковуху (колонки большую часть времени отключены). Можно, конечно, назначить наушники устройством по-умолчанию. Но поддерживает ли голая альса автоматическое переключение потока вывода на новое устройство? Можно ли это сделать без перезапуска приложений?

★☆

ЕМНИП, нет. Но можешь написать скрипт, делающий это за неё.

Korchevatel ★★★★★
()

А ты думаешь, зачем вообще люди изобретают всякие пульсы и им подобные вещи? Звук по сети это редкий юзкейс, bluetooth при желании тоже можно без пульсы настроить. Старая проблема с захватом устройства alsa приложением сейчас почти не актуальна, большинство приложений alsa так не делают. А вот переключение устройств без перезапуска - это проблема, судя по всему не решаемая на уровне alsa.

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

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

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

Остановите pulseaudio (systemctl --user stop pulseaudio.s{ocket,ervice}) и запустите pulseaudio -vvvvv вручную. Это даст подробный вывод.

Дальше поперевтыкайте наушники, пока проблема не воспроизведётся, и выложите вывод.

Rootlexx ★★★★★
()

Вернул обратно пульсу. Выставил профиль «Аналоговый стерео выход + аналоговый моно вход». Пока вроде бы работает.

hateWin ★☆
() автор топика

Но поддерживает ли голая альса автоматическое переключение потока вывода на новое устройство?

нет и не должна уметь. для этого и существуются всякие pulse и pipewire.

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

Можно, конечно, назначить наушники устройством по-умолчанию.

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

Вообще какая конфигурация железа звукового? И как надо настроить? Т.е. желательно указать ожидаемое поведение.

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

pacmd list-sinks
pacmd list-sink-inputs

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

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

Может тогда сделать звук одновременно на оба устройства? Это делает module-combine-sink

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

pulseaudio-14.2
Но поддерживает ли голая альса автоматическое переключение потока вывода на новое устройство? Можно ли это сделать без перезапуска приложений?

Альса нет, пульса поддерживает. А начиная с 14.0 даже без перезапуска приложений можно. Но у меня 11.1, где еще надо было аналогичную вещь делать скриптами.

В default.pa поправить

load-module module-stream-restore restore_device=false
либо убрать совсем эту строчку, тогда вновь открытые программы будут воспроизводить звук через default sink, а в новой пульсе даже существующие должны перенестись на него.

https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Defau...

https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modul...

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

pacmd list-sinks

pacmd list-sinks
1 sink(s) available.
  * index: 5
        name: <alsa_output.pci-0000_00_1f.3.analog-stereo>
        driver: <module-alsa-card.c>
        flags: HARDWARE HW_MUTE_CTRL HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY FLAT_VOLUME DYNAMIC_LATENCY
        state: RUNNING
        suspend cause: (none)
        priority: 9039
        volume: front-left: 18350 /  28% / -33,17 dB,   front-right: 18350 /  28% / -33,17 dB
                balance 0,00
        base volume: 65536 / 100% / 0,00 dB
        volume steps: 65537
        muted: no
        current latency: 59,10 ms
        max request: 10 KiB
        max rewind: 10 KiB
        monitor source: 7
        sample spec: s16le 2-канальный 4410
        channel map: front-left,front-right
                     Стерео
        used by: 1
        linked by: 2
        configured latency: 60,00 ms; range is 0,50 .. 2176,87 ms
        card: 3 <alsa_card.pci-0000_00_1f.3>
        module: 9
        properties:
                alsa.resolution_bits = "16"
                device.api = "alsa"
                device.class = "sound"
                alsa.class = "generic"
                alsa.subclass = "generic-mix"
                alsa.name = "ALC887-VD Analog"
                alsa.id = "ALC887-VD Analog"
                alsa.subdevice = "0"
                alsa.subdevice_name = "subdevice #0"
                alsa.device = "0"
                alsa.card = "2"
                alsa.card_name = "HDA Intel PCH"
                alsa.long_card_name = "HDA Intel PCH at 0xeff20000 irq 132"
                alsa.driver_name = "snd_hda_intel"
                device.bus_path = "pci-0000:00:1f.3"
                sysfs.path = "/devices/pci0000:00/0000:00:1f.3/sound/card2"
                device.bus = "pci"
                device.vendor.id = "8086"
                device.vendor.name = "Intel Corporation"
                device.product.id = "a170"
                device.product.name = "100 Series/C230 Series Chipset Family HD Audio Controller"
                device.form_factor = "internal"
                device.string = "front:2"
                device.buffering.buffer_size = "384000"
                device.buffering.fragment_size = "192000"
                device.access_mode = "mmap+timer"
                device.profile.name = "analog-stereo"
                device.profile.description = "Аналоговый стерео"
                device.description = "Встроенное аудио Аналоговый стерео"
                module-udev-detect.discovered = "1"
                device.icon_name = "audio-card-pci"
        ports:
                analog-output-lineout: Line Out (priority 9000, latency offset 0 usec, available: yes)
                        properties:

                analog-output-headphones: Headphones (priority 9900, latency offset 0 usec, available: no)
                        properties:
                                device.icon_name = "audio-headphones"
        active port: <analog-output-lineout>

pacmd list-sink-inputs

pacmd list-sink-inputs
1 sink input(s) available.
    index: 111
        driver: <protocol-native.c>
        flags: START_CORKED 
        state: CORKED
        sink: 5 <alsa_output.pci-0000_00_1f.3.analog-stereo>
        volume: front-left: 10093 /  15% / -48,75 dB,   front-right: 10093 /  15% / -48,75 dB
                balance 0,00
        muted: no
        current latency: 178,83 ms
        requested latency: 75,00 ms
        sample spec: float32le 2-канальный 
        channel map: front-left,front-right
                     Стерео
        resample method: speex-float-5
        module: 14
        client: 4 <Firefox>
        properties:
                media.name = "Best 60fps Video on Youtube! - YouTube"
                application.name = "Firefox"
                native-protocol.peer = "UNIX socket client"
                native-protocol.version = "34"
                application.process.id = "11674"
                application.process.user = "mihajlo"
                application.process.host = "nixos"
                application.process.binary = "firefox"
                application.language = "ru_RU.UTF-8"
                window.x11.display = ":1"
                application.process.machine_id = "3c9fb175ffb44d4da32779642a49932b"
                application.process.session_id = "14"
                application.icon_name = "firefox"
                module-stream-restore.id = "sink-input-by-application-name:Firefox"

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

Это, я так понимаю, при отключенных наушниках. Вроде, все нормально, firefox должен играть через колонки.

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

bluetooth при желании тоже можно без пульсы настроить

Нед. По этой причине пульса в слаке появилась.

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

Действительно. Кто-то зоморочился.

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

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

А у меня всё наоборот.

PA работало нормально, а с PipeWire периодически после выдергивания наушников звук не появляется нигде вообще.

В общем понаделали говнокода, ни одну подсистему не могут отладить до юзабельного вида.

wandrien ★★
()
Последнее исправление: wandrien (всего исправлений: 1)
Ответ на: комментарий от damix9
pacmd list-sinks
2 sink(s) available.
  * index: 0
        name: <alsa_output.usb-C-Media_Electronics_Inc._USB_Audio_Device-00.analog-stereo>
        driver: <module-alsa-card.c>
        flags: HARDWARE HW_MUTE_CTRL HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY FLAT_VOLUME DYNAMIC_LATENCY
        state: SUSPENDED
        suspend cause: IDLE
        priority: 9049
        volume: front-left: 65536 / 100% / 0,00 dB,   front-right: 65536 / 100% / 0,00 dB
                balance 0,00
        base volume: 65536 / 100% / 0,00 dB
        volume steps: 65537
        muted: no
        current latency: 0,00 ms
        max request: 0 KiB
        max rewind: 0 KiB
        monitor source: 0
        sample spec: s16le 2-канальный 4800
        channel map: front-left,front-right
                     Стерео
        used by: 0
        linked by: 0
        configured latency: 0,00 ms; range is 0,50 .. 2000,00 ms
        card: 1 <alsa_card.usb-C-Media_Electronics_Inc._USB_Audio_Device-00>
        module: 7
        properties:
                alsa.resolution_bits = "16"
                device.api = "alsa"
                device.class = "sound"
                alsa.class = "generic"
                alsa.subclass = "generic-mix"
                alsa.name = "USB Audio"
                alsa.id = "USB Audio"
                alsa.subdevice = "0"
                alsa.subdevice_name = "subdevice #0"
                alsa.device = "0"
                alsa.card = "3"
                alsa.card_name = "USB Audio Device"
                alsa.long_card_name = "C-Media Electronics Inc. USB Audio Device at usb-0000:00:14.0-10, full speed"
                alsa.driver_name = "snd_usb_audio"
                device.bus_path = "pci-0000:00:14.0-usb-0:10:1.0"
                sysfs.path = "/devices/pci0000:00/0000:00:14.0/usb1/1-10/1-10:1.0/sound/card3"
                udev.id = "usb-C-Media_Electronics_Inc._USB_Audio_Device-00"
                device.bus = "usb"
                device.vendor.id = "0d8c"
                device.vendor.name = "C-Media Electronics, Inc."
                device.product.id = "0012"
                device.product.name = "USB Audio Device"
                device.serial = "C-Media_Electronics_Inc._USB_Audio_Device"
                device.string = "front:3"
                device.buffering.buffer_size = "384000"
                device.buffering.fragment_size = "192000"
                device.access_mode = "mmap+timer"
                device.profile.name = "analog-stereo"
                device.profile.description = "Аналоговый стерео"
                device.description = "USB Audio Device Аналоговый стерео"
                module-udev-detect.discovered = "1"
                device.icon_name = "audio-card-usb"
        ports:
                analog-output-speaker: Speakers (priority 10000, latency offset 0 usec, available: unknown)
                        properties:
                                device.icon_name = "audio-speakers"
        active port: <analog-output-speaker>
    index: 1
        name: <alsa_output.pci-0000_00_1f.3.analog-stereo>
        driver: <module-alsa-card.c>
        flags: HARDWARE HW_MUTE_CTRL HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY FLAT_VOLUME DYNAMIC_LATENCY
        state: SUSPENDED
        suspend cause: IDLE
        priority: 9039
        volume: front-left: 18330 /  28% / -33,20 dB,   front-right: 18330 /  28% / -33,20 dB
                balance 0,00
        base volume: 65536 / 100% / 0,00 dB
        volume steps: 65537
        muted: yes
        current latency: 0,00 ms
        max request: 0 KiB
        max rewind: 0 KiB
        monitor source: 3
        sample spec: s16le 2-канальный 4800
        channel map: front-left,front-right
                     Стерео
        used by: 0
        linked by: 0
        configured latency: 0,00 ms; range is 0,50 .. 2000,00 ms
        card: 3 <alsa_card.pci-0000_00_1f.3>
        module: 9
        properties:
                alsa.resolution_bits = "16"
                device.api = "alsa"
                device.class = "sound"
                alsa.class = "generic"
                alsa.subclass = "generic-mix"
                alsa.name = "ALC887-VD Analog"
                alsa.id = "ALC887-VD Analog"
                alsa.subdevice = "0"
                alsa.subdevice_name = "subdevice #0"
                alsa.device = "0"
                alsa.card = "0"
                alsa.card_name = "HDA Intel PCH"
                alsa.long_card_name = "HDA Intel PCH at 0xeff20000 irq 132"
                alsa.driver_name = "snd_hda_intel"
                device.bus_path = "pci-0000:00:1f.3"
                sysfs.path = "/devices/pci0000:00/0000:00:1f.3/sound/card0"
                device.bus = "pci"
                device.vendor.id = "8086"
                device.vendor.name = "Intel Corporation"
                device.product.id = "a170"
                device.product.name = "100 Series/C230 Series Chipset Family HD Audio Controller"
                device.form_factor = "internal"
                device.string = "front:0"
                device.buffering.buffer_size = "384000"
                device.buffering.fragment_size = "192000"
                device.access_mode = "mmap+timer"
                device.profile.name = "analog-stereo"
                device.profile.description = "Аналоговый стерео"
                device.description = "Встроенное аудио Аналоговый стерео"
                module-udev-detect.discovered = "1"
                device.icon_name = "audio-card-pci"
        ports:
                analog-output-lineout: Line Out (priority 9000, latency offset 0 usec, available: yes)
                        properties:

                analog-output-headphones: Headphones (priority 9900, latency offset 0 usec, available: no)
                        properties:
                                device.icon_name = "audio-headphones"
        active port: <analog-output-lineout>
pacmd list-sink-inputs
0 sink input(s) available.

Подключены и наушники и колонки.

hateWin ★☆
() автор топика

Кажеться, я разобрался. Во-первых, спасибо damix9 за наводку. Опция load-module module-stream-restore restore_device=false действительно помогает. Теперь звук автоматически переключается на наушники и обратно. Во-вторых, я включил общесистемный запуск пульсы. Дело в том, что в системе создано несколько пользователей. Проблемы проявлялись после переключения ндругого пользователя. У меня давно были подозрения, что нужно запускать одну общую копию пульсы. Теперь звук работает нормально, из под другого пользователя звук идет на наушники, есть доступ к микрофону на наушниках.

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