Рейтинг:1

Переключение аудиоустройств прерывает оптический аудиовыход

флаг kr

Я пытаюсь быстро переключаться между аудиовыходом наушников и динамиков. Оба подключены к моей материнской плате, которая имеет Линейный выход и Оптический аудиовыход линия. В идеале я хотел бы сделать это с помощью двух команд, чтобы я мог добавить их как макросы/горячие клавиши.

  • Динамики -> Оптическое аудио
  • Наушники -> Линейный выход

Я могу выполнить переключение с динамиков на наушники с помощью Настройки > Звук > Выход меню, где он успешно перечисляет 4 аудио опции, которые я подключил, две другие из которых являются соединениями DP/HDMI через графическую карту. Если я сейчас попытаюсь переключиться обратно на динамики из наушников, звук не будет выводиться. У меня есть «обходной путь», когда я приостанавливаю все аудио, переключаюсь на один из выходов видеокарты, жду 5 секунд, переключаюсь на динамики, жду 5 секунд, затем играю музыку, и это до сих пор надежно устранило проблему.

Я пытался использовать договор изменить выходы, которые, как я думал, будут тонет, но у меня есть только две раковины:

➢ ~ Список пактов сокращается
55 alsa_output.pci-0000_2d_00.4.iec958-stereo PipeWire s32le 2ch 48000Hz РАБОТАЕТ
52 alsa_output.pci-0000_2b_00.1.hdmi-stereo-extra1 PipeWire s16le 2ch 48000Hz SUSPENDED

Это шоу во время прослушивания звука на динамиках. Ниже приведено прослушивание звука в наушниках.

➢ ~ Список пактов сокращается
52 alsa_output.pci-0000_2b_00.1.hdmi-stereo-extra1 PipeWire s16le 2ch 48000Hz SUSPENDED
55 alsa_output.pci-0000_2d_00.4.analog-stereo PipeWire s32le 2ch 48000Hz РАБОТАЕТ

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

â ~ pactl set-sink-port alsa_output.pci-0000_2d_00.4.iec958-stereo аналог-стерео        
Неудача: нет такой сущности

Я совершенно запутался в том, как заставить это работать. Любая помощь приветствуется.

Ниже приведена некоторая информация, которая, я считаю, будет важной. ОС: Убунту 21.10

Ниже приведен вывод информация о договоре с моим удаленным именем пользователя:

Строка сервера: /run/user/1000/pulse/native
Версия протокола библиотеки: 35
Версия протокола сервера: 35
Является локальным: да
Индекс клиента: 68
Размер плитки: 65472
Имя пользователя: {ПОЛЬЗОВАТЕЛЬ}
Имя хоста: убунту
Имя сервера: PulseAudio (на PipeWire 0.3.38)
Версия сервера: 15.0.0
Спецификация образца по умолчанию: float32le 2ch 48000Hz
Карта каналов по умолчанию: передний левый, передний правый
Приемник по умолчанию: alsa_output.pci-0000_2d_00.4.iec958-stereo
Источник по умолчанию: alsa_input.usb-Sonix_Technology_Co.__Ltd._USB_2.0_Camera_SN0001-02.analog-stereo
Куки: bf70:5e64

РЕДАКТИРОВАТЬ

Учитывая ответ и комментарии @kanehekili, кажется, я хочу установить сливной порт. Способ сделать это - использовать pactl set-sink-port {SINK_NAME} {PORT_NAME} однако мой порт не существует в соответствии с приемники списка пактов:

➢ ~ список пактов
Раковина №47
    Состояние: РАБОТАЕТ
    Имя: alsa_output.pci-0000_2d_00.4.iec958-stereo
    Описание: Цифровой стереоконтроллер Starship/Matisse HD Audio (IEC958)
    Драйвер: PipeWire
    Пример спецификации: s32le 2ch 48000Hz
    Карта каналов: передний левый, передний правый
    Модуль владельца: 4294967295
    Отключение звука: нет
    Громкость: передний левый: 28524/44%/-21,68 дБ, передний правый: 28524/44%/-21,68 дБ
            баланс 0.00
    Базовая громкость: 65536/100%/0,00 дБ
    Источник монитора: alsa_output.pci-0000_2d_00.4.iec958-stereo.monitor
    Задержка: 0 мкс, настроено 0 мкс
    Флаги: HARDWARE HW_MUTE_CTRL DECIBEL_VOLUME LATENCY SET_FORMATS 
    Характеристики:
        object.path = "alsa:pcm:1:iec958:1:воспроизведение"
        api.alsa.path = "iec958:1"
        api.alsa.pcm.card = "1"
        api.alsa.pcm.stream = "воспроизведение"
        аудио.каналы = "2"
        audio.position = "FL,FR"
        устройство.маршруты = "1"
        alsa.resolution_bits = "16"
        устройство.api = "алса"
        устройство.класс = "звук"
        alsa.class = "общий"
        alsa.subclass = "универсальный микс"
        alsa.name = "Цифровой ALCS1200A"
        alsa.id = "Цифровой ALCS1200A"
        алса.подустройство = "0"
        alsa.subdevice_name = "подустройство #0"
        алса.устройство = "1"
        алса.карта = "1"
        alsa.card_name = "Универсальный HD-аудио"
        alsa.long_card_name = "HD-Audio Generic на 0xfc400000 irq 80"
        alsa.driver_name = "snd_hda_intel"
        device.profile.name = "iec958-стерео"
        device.profile.description = "Цифровое стерео (IEC958)"
        карта.профиль.устройство = "11"
        устройство.id = "41"
        factory.name = "api.alsa.pcm.sink"
        приоритет.драйвер = "672"
        приоритет.сессия = "672"
        media.class = "Аудио/Раковина"
        node.nick = "Универсальный HD-аудио"
        node.name = "alsa_output.pci-0000_2d_00.4.iec958-стерео"
        device.description = "Цифровой стереоконтроллер Starship/Matisse HD Audio (IEC958)"
        device.icon_name = "аудио-карта-iec958"
        устройство.шина = "PCI"
        device.bus_path = "PCI-0000:2d:00.4"
        node.pause-on-idle = «ложь»
        factory.id = "18"
        клиент.id = "32"
        узел.драйвер = "истина"
        factory.mode = "объединить"
        audio.adapt.follower = ""
        library.name = "аудиоконвертировать/libspa-аудиоконвертировать"
        объект.id = "47"
        node.max-латентность = "8192/48000"
    Порты:
        iec958-стерео-выход: цифровой выход (S/PDIF) (тип: SPDIF, приоритет: 0, доступность неизвестна)
    Активный порт: iec958-стерео-выход
    Форматы:
        ПКМ

Когда я пытаюсь переключить порты приемника, я встречаю ошибку

â ~ pactl set-sink-port alsa_output.pci-0000_2d_00.4.iec958-stereo аналог-стерео        
Неудача: нет такой сущности

Вышеописанное происходит даже при использовании числового идентификатора для приемника. Похоже, что порт, который я ищу, не существует, однако я могу изменить порт, используя меню «Настройки», о котором я упоминал выше, и запустив тот же приемники списка пактов изменяет порты, чтобы мой iec958-стерео порт больше не существует:

➢ ~ список пактов
Раковина №47
    Состояние: РАБОТАЕТ
    Имя: alsa_output.pci-0000_2d_00.4.аналог-стерео
    Описание: Starship/Matisse HD Audio Controller Analog Stereo
    Драйвер: PipeWire
    Пример спецификации: s32le 2ch 48000Hz
    Карта каналов: передний левый, передний правый
    Модуль владельца: 4294967295
    Отключение звука: нет
    Громкость: передний левый: 31249/48%/-19,30 дБ, передний правый: 31249/48%/-19,30 дБ
            баланс 0.00
    Базовая громкость: 65536/100%/0,00 дБ
    Источник монитора: alsa_output.pci-0000_2d_00.4.analog-stereo.monitor
    Задержка: 0 мкс, настроено 0 мкс
    Флаги: HARDWARE HW_MUTE_CTRL HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY 
    Характеристики:
        object.path = "alsa:pcm:1:front:1:playback"
        api.alsa.path = "спереди:1"
        api.alsa.pcm.card = "1"
        api.alsa.pcm.stream = "воспроизведение"
        аудио.каналы = "2"
        audio.position = "FL,FR"
        устройство.маршруты = "2"
        alsa.resolution_bits = "16"
        устройство.api = "алса"
        устройство.класс = "звук"
        alsa.class = "общий"
        alsa.subclass = "универсальный микс"
        alsa.name = "Аналог ALCS1200A"
        alsa.id = "Аналог ALCS1200A"
        алса.подустройство = "0"
        alsa.subdevice_name = "подустройство #0"
        алса.устройство = "0"
        алса.карта = "1"
        alsa.card_name = "Универсальный HD-аудио"
        alsa.long_card_name = "HD-Audio Generic на 0xfc400000 irq 80"
        alsa.driver_name = "snd_hda_intel"
        device.profile.name = "аналоговый-стерео"
        device.profile.description = "Аналоговое стерео"
        карта.профиль.устройство = "5"
        устройство.id = "41"
        factory.name = "api.alsa.pcm.sink"
        приоритет.драйвер = "689"
        приоритет.сессия = "689"
        media.class = "Аудио/Раковина"
        node.nick = "Универсальный HD-аудио"
        node.name = "alsa_output.pci-0000_2d_00.4.аналог-стерео"
        device.description = "Аналоговый стереофонический аудиоконтроллер Starship/Matisse HD"
        device.icon_name = "аналог аудиокарты"
        устройство.шина = "PCI"
        device.bus_path = "PCI-0000:2d:00.4"
        node.pause-on-idle = «ложь»
        factory.id = "18"
        клиент.id = "32"
        узел.драйвер = "истина"
        factory.mode = "объединить"
        audio.adapt.follower = ""
        library.name = "аудиоконвертировать/libspa-аудиоконвертировать"
        объект.id = "47"
        node.max-латентность = "8192/48000"
    Порты:
        Analog-output-lineout: Line Out (тип: Line, приоритет: 9000, группа доступности: Legacy 4, доступно)
        Analog-output-headphones: Наушники (тип: Наушники, приоритет: 9900, группа доступности: Legacy 5, недоступно)
    Активный порт: аналоговый выход-линейный выход
    Форматы:
        ПКМ
Рейтинг:1
флаг zw

Хитрость в том, что вам нужно переключить входы-приемники, которые доступны только тогда, когда они активны/работают:

pactl список коротких вводов-приемников
28 8 31 protocol-native.c float32le 2ch 48000Hz

Ваш поток "28" сопоставлен с выходом "8". Этот вывод можно проверить с помощью:

список пактов с короткими приемниками
1 alsa_output.pci-0000_1e_00.3.аналоговый-стереомодуль-alsa-card.c s16le 2ch 48000Hz ПОДВЕСЕН
8 alsa_output.pci-0000_1c_00.1.hdmi-stereo-extra3 module-alsa-card.c s16le 2ch 48000Hz SUSPENDED

Таким образом, в настоящее время входной поток 28 (каким бы ни был исходный поток) направляется на карту hdmi. Если вы хотите изменить вывод на внутренний аналоговую карту (например, наушники) просто можно переместить, выдав:

pactl перемещение-приемник-ввод 28 1

Итак, одна из ваших раковин представляет собой наушники, а другая — динамики. Поэтому вместо использования ("вам нужно будет переключить ввод на 52 или 55.

РЕДАКТИРОВАТЬ

Поскольку я не знаком с оптическим устройством, кроме аналоговых наушников, я бы попробовал порты переключения буксировки:

приемники списка пактов
Раковина №16
    Состояние: РАБОТАЕТ
    Имя: alsa_output.pci-0000_1e_00.3.аналог-стерео
    ....
    Порты: 
        аналоговый выход-линейный выход: линейный выход (тип: линейный, приоритет: 9000, доступен)
        Analog-output-headphones: Наушники (тип: Наушники, приоритет: 9900, доступно)
    Активный порт: аналоговый выход-линейный выход

В этом случае вы можете переключить порты в приемнике № 16 с помощью:

pactl set-sink-port 16 аналоговый-выход-линейный выход

или же

pactl set-sink-port 16 аналоговый-выход-наушники

Вам нужно найти правильный индекс приемника и имена портов — это применимо только в том случае, если цифровой выход является портом.

Пример не работает по умолчанию, так как pulseaudio и alsa обычно автоматически отключают динамики, если они вставлены (см. здесь для получения дополнительной информации), но с соответствующими настройками это работает.

TMarks avatar
флаг kr
Большое спасибо за ответ, я боялся, что никто не знает! К сожалению, я пытаюсь перейти не со своей внутренней карты на свою видеокарту, а с 3,5-мм выхода моей внутренней карты на оптический аудиовыход. Я могу сделать это вручную через меню настроек, хотя и с возней, о которой я упоминал в своем вопросе. Судя по тому, что вы описали, похоже, что я пытаюсь изменить все, что находится ниже в иерархии, чем стоки. На этой диаграмме (https://gavv.github.io/articles/pulseaudio-under-the-hood/diagrams/devices_and_streams.png) я пытаюсь изменить поле с надписью «Наушники».
kanehekili avatar
флаг zw
Хорошо, так как вы показали нам раковины, я подумал, что вы хотите переключаться между ними. Здесь вам придется переключать порты, как вы уже догадались. я проверю, если я могу найти что-то
TMarks avatar
флаг kr
Спасибо, я отредактировал свой вопрос, чтобы показать, какие порты мне доступны, и проблему, с которой я столкнулся.Я думаю, что это ближе к ответу, но я не понимаю, почему порты отображаются в меню настроек, а не в команде `pactl list sins`.
kanehekili avatar
флаг zw
В вашей команде отсутствует номер приемника. Попробуйте с `pactl set-sink-port 47 iec958-stereo-output`
TMarks avatar
флаг kr
Кажется, это не так. Кажется, я не могу установить «sink-port», так как за раз появляется только один.
kanehekili avatar
флаг zw
что говорит `список договорных карточек`? Возможно, вам придется поменять карты. Посмотрите [здесь] (https://unix.stackexchange.com/questions/65246/change-pulseaudio-input-output-from-shell) для получения дополнительной информации.
TMarks avatar
флаг kr
Давайте [продолжим это обсуждение в чате](https://chat.stackexchange.com/rooms/131021/discussion-between-tmarks-and-kanehekili).
TMarks avatar
флаг kr
Я добавил ответ на вопрос. Большое спасибо за вашу помощь @kanehekilli, я очень ценю это.
kanehekili avatar
флаг zw
Рад, что ты понял это. Спасибо за ваше время - я многому научился. Все еще не понимаю, почему переустановка исправила это.
TMarks avatar
флаг kr
Я думаю, причина в том, что я использовал PipeWire в сочетании с PulseAudio. Я не уверен, как взаимодействует эта комбинация, но я полагаю, что PipeWire обрабатывал мои порты и просто передавал их в PulseAudio, что означает, что они не будут отображаться в «приемниках списка pactl». Переустановка PulseAudio также удалила PipeWire, а это означает, что Pulse снова получил полный контроль над приемниками звука. Это моя беговая теория.
Рейтинг:0
флаг kr

Моя проблема была связана с использованием PipeWire, по-видимому. Я не смог решить эти проблемы, которые у меня были, пока я все еще использовал PipeWire, поэтому я попытался удалить, столкнулся с ошибкой графического интерфейса, мне пришлось sudo apt install --переустановить ubuntu-desktop затем перезагрузитесь. После этого и запуская только демон PulseAudio, я смог использовать:

pactl set-card-profile {card_number} {profile_name}

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

Ответить или комментировать

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