LINUX.ORG.RU

Помогите понять, как выводится звук через HDMI

 ,


0

2

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

1. Посмотрел alsasmixer. На вкаладке HDMI-устройства никакого управления нет. Через HDMI-интерфейс гонится цифра. Логично. Управление громкостью может быть только на конечном устройстве, где уже воспроизводится аналоговый сигнал (например - телевизор). Однако, в разных программах есть регулировки уровня громкости, а может быть и еще много чего. Тогда получается, это делается через puls-у? Выходит, она в реальном времени перекодирует цифровой поток? 2. Насколько я понимаю, звуковое приложение может выводить цифровой аудио-поток в различных фформатах. А если вдруг окажется, что HDMI не поддерживает этот формат, то что происходит? Та же pulsa согласовыввает необходимый формат с каждым приложением?

3. А как вообще роутятся звуковые потоки? Это настраивается в ALSA? Или можно выбрать, куда выводить для конкретного приложения в puls-е? Или и там и там по разному?

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

Нет, это делается в рамках самого приложения, еще до Pulseaudio.

А если вдруг окажется, что HDMI не поддерживает этот формат

А если у тебя обычная карточка не умеет конкретный формат?

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

3. А как вообще роутятся звуковые потоки? Это настраивается в ALSA? Или можно выбрать, куда выводить для конкретного приложения в puls-е? Или и там и там по разному?

Можно и в pulse переназначить, можно и без него в приложении указать конкретное ALSA-устройство для вывода звука.

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

А если у тебя обычная карточка не умеет конкретный формат?

Хороший вопрос. Пока писал вопросы про HDMI, он тоже пришел мне в глову.

Т.е. по сути нет разницы, через что выводить, так? Только в случае с ЦАП на борту компьютера alsamixer может выставить некий единый пресет по куче каналов этого ЦАП для всех источников звука. Так? А уровни громкости для каждого приложения отдельно можно выставить в pulseadio, и там на лету будет делаться перекодирование цифровых потоков? Ведь в ALSA все равно нельзя рулить аппартными параметрами воспроизведения для отдельного потока? Все равно в ЦАП (codec) даже от разных приложений, «играющих» одновременно будет поступать смкшированный программно цифровой аудиопоток?

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

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

не совсем так - есть различные расширения HDMI, которые позволяют управлять звуком намного гибче (CEC, ARC, eARC), но они почему-то не популярны (похоже проблемы с совместимосью разных производителей) и в alsa нет для них стандартного интерфейса.

anonymous
()

HDMI Audio - это всего лишь цифровой транспортировщик аудиопотока. Так как в компьютере представление информации осуществляется только в цифровой форме, то исключаются преобразования аудиосигнала из цифровой в аналоговую и снова в цифровую - цифра сразу раскладывается в цифру и передаётся по проводам кабеля на конечное устройство (телевизор, монитор со стереоколонками). Там уж ЦАП преобразует цифру в аналоговый сигнал.

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

вообще не обязательно.
громкость как минимум регулируется в аудио-миксере при смешивании потоков аудио разных источников. на вход миксера они попадают уже в PCM.

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

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

steemandlinux ★★★★★
()

у меня вообще не выводится - подключил телек к машине через hdmi звука нет, только через звуковуху на матке, а hdmi в видеокарту воткнут - разве видеокарта в звук умеет? на винде тоже самое - звука нет!

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

с точки зрения потребности «регулировка звука» все указанные варианты эквипенисуальны :)

amd_amd, гдето чтото не работает или отключено (ткнул пальцем в небо :) )

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

Умеет видеокарта в звук. Цифра это цифра, ей пофиг.

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

вообще не обязательно.

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

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

Итак, потоки pcm поступают (могут поступать) от разных приложений в Pulseaudio. Pulseaudio их смешивает и в соответствии с выставленным уровнем громкости перекодирует pcm. Так? Кстати, следует ли из этого, что, если выставить уровень громкости в 100%, то Pulseaudio будет выполнять минимально возможный объем работы по обработке потоков pcm (меньше будет грузить процессор)? Если для отдельных приложений задан свой уровень громкости, то Pulseaudio будет еще и каждый входной поток pcm перекодировать. Так?

Дальше поток заворачивается в ALSA. Если вывод настрен через HDMI, то ALSA просто транслирует поток в HDMI. Если вывод настроен через набортный codec, то ALSA транслирует поток в этот codec. Но при этом уже в самом codec-е уже аппаратно регулируется уровень сигнала в соотвествии с заданным в amixer пресетом. Так?

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

Нет, поддержки уровня громкости в кодеках нет. Исключение всякие карты типа creative x-fi. Современные кодеки деградировали до состояния: принять поток PCM, раскидать по цапам.

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

смешивает и в соответствии с выставленным уровнем громкости перекодирует pcm. Так?

Нет, сначала превращается в PCM, а затем смешивается. Вот суть микшера (все волумы от 0.0 до 1.0):

out = (in1 * in1Volume + in2 * in2Volume + inN * inNVolume) * outVolume;
Кстати, пропробуй в альсу/пульсу воспроизвести 10 плееров одновременно с громкостью 100% у каждого. О результатах отпишись.

deep-purple ★★★★★
()

В пульсу приложения гонят несжатый звуковой поток. Соответственно, отрегулировать громкость это просто умножить/поделить все гонящиеся значения на нужный коэффициент (хотя фича громкость > 100% в VLC под капотом уже применяет более сложную модификацию сигнала). Вопрос может быть только в частоте дискретизации и разрядность. Но тут HDMI ничем не выделяется - точно такие же проблемы есть и с обычными звуковыми картами (они далеко не всегда поддерживают все-все-все варианты). К тому же при одновременном выводе звука несколькими приложениями никто не гарантирует, что они выдают звук с одинаковой частотой дискретизации. Пульса старается выбрать оптимальный вариант (поддерживаемый выходным устройством и используемый большинством приложений пытающихся в звук, либо перекодируемым без потерь - это возможно, если частоты дискретизации кратные) и все потоки, которые ему не соответствуют, передескретизируются.

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.