Прошу помочь новичку в настройке звука
Сразу оговорюсь - я совершеннейший новичок в Linux. Неделю назад я установил на свой HTPC Sabayon (2.6.34-sabayon (Gentoo 4.4.2 p1.0)), до этого там стояла Win 7 + XBMC. Все проблемы с новой ОС постепенно к моему удовольствию разрешились, осталась только одна, но очень болезненная - звук. Звук у меня встроенный Realtek ALC889A (SPDIF), есть еще HDMI выход с чипсета Nvidia 9400, но он отключен в BIOS. SPDIF оптикой подключен к ресиверу. Под Win проблем со звуком не было - канальность звука всегда была правильной, громкость регулировалась в XBMC (Audio Output было установлено в Analog Audio) для любого источника (MP3, AC3, DTS, OGG, AAC). Однако теперь со звуком полный беспорядок, сейчас я и попытаюсь его описать:
lspci -v
00:08.0 Audio device: nVidia Corporation MCP79 High Definition Audio (rev b1)
Subsystem: Giga-byte Technology Device a102
Flags: bus master, 66MHz, fast devsel, latency 0, IRQ 21
Memory at e5180000 (32-bit, non-prefetchable) [=16K]
Capabilities: [44] Power Management version 2
Kernel driver in use: HDA Intel
Kernel modules: snd-hda-intel
aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: NVidia [HDA NVidia], device 0: ALC889A Analog [ALC889A Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: NVidia [HDA NVidia], device 1: ALC889A Digital [ALC889A Digital]
Subdevices: 0/1
Subdevice #0: subdevice #0
aplay -L
null
Discard all samples (playback) or generate zero samples (capture)
front:CARD=NVidia,DEV=0
HDA NVidia, ALC889A Analog
Front speakers
surround40:CARD=NVidia,DEV=0
HDA NVidia, ALC889A Analog
4.0 Surround output to Front and Rear speakers
surround41:CARD=NVidia,DEV=0
HDA NVidia, ALC889A Analog
4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=NVidia,DEV=0
HDA NVidia, ALC889A Analog
5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=NVidia,DEV=0
HDA NVidia, ALC889A Analog
5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=NVidia,DEV=0
HDA NVidia, ALC889A Analog
7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
iec958:CARD=NVidia,DEV=0
HDA NVidia, ALC889A Digital
IEC958 (S/PDIF) Digital Audio Output
Проблема в том, что мне так и не удалось никаким плеером получить регулируемый звук 5.1. Насколько я понял, используя утилиты pavumeter и pavucontrol, звук AC3 и DTS идет мимо Pulseaudio прямо на SPDIF (громкость не регулируется). Все остальные типы аудиопотоков попадают в Pulseaudio, который по умолчанию настроен как Analog Stereo Output. Интересное начинается когда выбираю Analog Surround 5.1 Output - avumeter и pavucontrol показывают регулируемый звук 5.1 (для 5.1 источников и если ALSA выводит на ALC889A Analog), однако на ресивере тишина. В общем - "по отдельности" все работает, то есть звук КАК БЫ есть, однако в медиацентре такой разнобой никуда не годится.
У меня сложилось определенное подозрение, что проблема в том, ЧТО выводится на ресивер Pulseaudio когда оно сконфигурировано как Analog Surround 5.1 Output. Может просто в формате, не понимаемом ресивером? В общем, я практически в отчаянии )) Как-то почему-то все очень сложно со звуком ))
Приветствую любую помощь и любые идеи (по теме, разумеется :-)
- Для комментирования войдите или зарегистрируйтесь

1. Конфигурируем ядро на
1. Конфигурируем ядро на поддержку alsa
Device Drivers ---> <*> Sound card support ---> [*] Preclaim OSS device numbers <*> Advanced Linux Sound Architecture ---> <M> Sequencer support <M> Sequencer dummy client <M> OSS Mixer API <M> OSS PCM (digital audio) API [*] OSS PCM (digital audio) API - Include plugin system [*] OSS Sequencer API <M> HR-timer backend support [*] Use HR-timer as default sequencer timer [*] Dynamic device file minor numbers [*] Support old ALSA API [*] Verbose procfs contents [*] Verbose printk [*] PCI sound devices ---> <M> Intel HD Audio ---> [*] Build hwdep interface for HD-audio driver [*] Allow dynamic codec reconfiguration (EXPERIMENTAL) [*] Build Realtek HD-audio codec support [*] Enable generic HD-audio codec parser [*] Build NVIDIA HDMI HD-audio codec support2. Собираем и устанавливаем ядро (а так же правим /boot/grub/menu.lst и т.д.)
в столбце SPDIF (должно загореться два нолика на зеленом фоне снизу). Возможно нужно еще выставить "SPDIF Playback Source" в значение PCM...
make all modules_install firmware_install install3. перезагружаемся с новым ядром
4. проделываем alsaconf
5. запускаем алсу
/etc/init.d/alsasoundи добавляем ее в автозагрузкуrc-update add alsasound boot6. из-под нужного пользователя запускаем alsamixer и нажимаем
теперь звук по дефолту будет через spdif
P.S. для того, чтобы AC3 и DTS декодировал ресивер, а не программный кодек, для mplayer нужно прописать в конфиг
afm=hwac3 или в командной строке дописывать -afm hwac3. В других приложениях лазать по настройкам и искать галочку AC3/DTS PassThrouth или аналогичную ;)
Удачи с домашним кинотеатром ;)
еще для спарвки: через spdif
еще для спарвки:
через spdif можно передавать только стерео (максимум 24/96-оптика, 24/192-коаксиал)!!! никакого 5.1!! только если DTS или AC3, а это сжатые форматы ;)
P.S. включи на ресивере DolbyPrologycII или режим дублирования каналов и отключай его, когда смотришь фильм с DTS или AC3 ;)
P.P.S.
нажимаем клавишу латинскую М ;)
P.P.P.S. в спецификации на spdif сказано, что через него можно передавать квадро-звук, но реально ни один ресивер и ПО этого не поддерживают ((
Цитата: через spdif можно
Разумеется, это так. Я не совсем корректно поставил вопрос. Сейчас загрузил 7-ку и посмотрел, как там все настроено: в настройках карты для digital output стоит Dolby Surround Live 5.1, то есть ВЕСЬ звук перекодируется на лету в AC3 (индикаторы ресивера это подтверждают), может даже и аппаратно. Громкость регулируется программно. Это то, что мне и надо. На другом компе (XP) в настройках карты такого нет, но этого же эффекта я добился в настройках ffdshow audio decoder, включив AC3 SPDIF encode mode. Вопрос в том, как добиться этого не в Windows? ;-)
По вопросу ядра и Alsa - я так понимаю, у меня уже все в порядке? Звук-то через нее в общем-то работает:
--- Intel HD Audio x x x x [*] Build hwdep interface for HD-audio driver x x x x [*] Allow dynamic codec reconfiguration (EXPERIMENTAL) x x x x [*] Support digital beep via input layer x x x x (1) Digital beep registration mode (0=off, 1=on, 2=mute sw on/off) x x x x [*] Support jack plugging notification via input layer x x x x [ ] Support initialization patch loading for HD-audio x x x x [*] Build Realtek HD-audio codec support x x x x [*] Build Analog Device HD-audio codec support x x x x [*] Build IDT/Sigmatel HD-audio codec support x x x x [*] Build VIA HD-audio codec support x x x x [*] Build ATI HDMI HD-audio codec support x x x x [*] Build NVIDIA HDMI HD-audio codec support x x x x [*] Build INTEL HDMI HD-audio codec support x x x x [*] Build Cirrus Logic codec support x x x x [*] Build Conexant HD-audio codec support x x x x [*] Build Creative CA0110-IBG codec support x x x x [*] Build C-Media HD-audio codec support x x x x [*] Build Silicon Labs 3054 HD-modem codec support x x x x [*] Enable generic HD-audio codec parser x x x x [*] Aggressive power-saving on HD-audio x x x x (0) Default time-out for HD-audio power-save modeТак как все-таки включить "AC3 SPDIF encode mode"? может надо начать с родного Realtek драйвера? (Если этот режим поддерживается аппаратно (как это узнать?), то вся проблема сразу и должна решиться) На их сайте свеженький, вчерашний. Самому эту проблему мне я чувствую не одолеть, буду весьма признателен, если поможете..
Резюмирую: нужно чтобы весь звук перекодировался на лету в AC3 - никаких pass-through, нужна программная регулировка громкости.
вот нашел кое-что:
вот нашел кое-что: http://sonosaurus.com/ac3jack/. В Portage такое не включено...
вот
вот http://www.alsa-project.org/main/index.php/A52_plugin вроде бы то что нужно.
1. Я затрудняюсь определить, установлен ли он у меня. Как это сделать?
2. нужно сконфигурировать ALSA для использования плагина. Нужна помощь. Вот инструкция:
A52 OUTPUT PLUGIN ================= This plugin converts S16 linear format to A52 compressed stream and send to an SPDIF output. It requires libavcodec for encoding the audio stream. A PCM using this plugin can be defined like below: pcm.myout { type a52 } In addition, the following options are available: - The "card" option specifies the card ID or number of the SPDIF. The output PCM becomes "iec958:{CARD=$CARD}" with extra AESx settings. When omitted, the default card is used. - The "slavepcm" option specifies a string of the slave PCM explicitly. This is useful if a device has no proper SPDIF configuration (e.g. usb-audio), or if you want to pass your own PCM definition. This option is exclusive with "card" option. - The "rate" option specifies the input/output sample rate in HZ. The accepted rate is either 44100 or 48000. When omitted, 48000 is used. - The "channels" option specifies the number of _input_ channels. It must be either 2, 4 or 6. The default value is 6. - The "bitrate" option specifies the bit-rate of the compressed stream in kbps. Too small or too big value may not be accepted by the encoder. When omitted, 448 is used. - The "format" option specifies the output format type. It's either S16_LE or S16_BE. As default, S16_LE is used. An example using the secondary card, 44.1kHz, 4 channels, output bitrate 256kbps and output format S16_BE looks like below: pcm.myout { type a52 card 1 rate 44100 channels 4 bitrate 256 format S16_BE } For using slavepcm option, pcm.mypcm { card 1 device 2 } pcm.myout { type a52 slavepcm "mypcm" } The plugin reads always S16 format (i.e. native-endian) as input, so you'd need plug layer appropriately to covert it.Ты в Gentoo Linux!
USE index подсказывает, что есть одноимённый USE-флаг
a52.Я бы начал с глобального выставления этого флага (и пересборки мира с опцией
--newuse).:wq
--
Live free or die
Цитата: Я бы начал с
можно поподробнее?
Beelzebubbie
Хэндбук и
man emergeв помощь.:wq
--
Live free or die
1. анархист правильно сказал
1. анархист правильно сказал про флаг a52... только скорее всего он тянет только библиотеку для декодирования, а не кодирования
2. плагины для алсы находятся в пакете alsa-plugins... наверняка там есть то, что нужно
3. я бы особо не рассчитывал получить сей эффект в линухах, т.к. DolbyDigital штука закрытая и врятли появится поддержка кодирования в открытом доступе...
4. а по поводу мануала, то я не пойму, что там сложного )) надовсего лишь создать в домашнем каталоге файл .asoundrc и прописать в него то, что предлагается ;) это если для одного пользователя... либо создать аналогичный файл в /etc, чтобы примениить настройки глобально...
Теперь все наоборот...
В общем, махнул я рукой на Sabayon и поставил генту. Перед настройкой звука перечитал все по alsa (все, что смог найти и понять). "Установил и настроил" A52 plugin. Все прекрасно работает - в смысле кодируется в AC3 и передается на SPDIF, громкость регулируется программно. (Кстати, официально разрешенная версия alsa-plugins-1.0.21 работала неправильно, не передавая кодеру инфу о каналах, а в замаскированной alsa-plugins-1.0.23-r1 этой ошибки нет.)
Однако... однако возникла другая проблема (ха-ха, я просто не могу в это поверить). теперь звук есть только через A52 plugin!! Без него - тишина.. Удаляю asound.conf - все равно тишина. Когда именно и куда пропал простой звук на default - неизвестно. (Возможно при установке замаскированной alsa-plugins-1.0.23-r1) Вопрос - "зачем он нужен, если работает через A52?" ответ такой, что через A52 в один момент только один звук быть может, второй вызывает audio open error: Device or resource busy.
Воспроизведение на устройство iec958 кстати работает. Конечно громкость в данном случае не регулируется.
Вопрос в том, как это починить? Уже 2 недели пытаюсь сделать нормальный звук и без толку! Вправьте плз мне мозги )))))
вот asound.conf:
pcm.!ac3 { type plug slave.pcm "Filter_FormatConvert" } pcm.!default { type plug slave.pcm "Filter_SoftwareVolumeDMix" } pcm.Filter_FormatConvert { type linear slave { pcm "Filter_RateConvert" format S16_LE } } pcm.Filter_RateConvert { type rate slave { pcm "Filter_SoftwareVolume" rate 48000 } } pcm.Filter_SoftwareVolume { type softvol slave.pcm "Filter_A52Encode" control { name "SoftVolume" card 0 } } pcm.Filter_A52Encode { type a52 bitrate 640 slavepcm "HW_digital" } pcm.Filter_SoftwareVolumeDMix { type softvol slave.pcm "Filter_DMix" control { name "SoftVolume" card 0 } } pcm.Filter_DMix { type dmix ipc_key 1024 slave.pcm "HW_analog" } pcm.HW_analog { type hw card 0 device 0 } pcm.HW_digital { type hw card 0 device 1 }И еще вопрос - при экспериментах с asound.conf у меня получился лишний регулятор громкости - не могу найти как его удалить.
приложив воистину титаническое количество
приложив воистину титаническое количество в общем-то бесплодных усилий, я случайно наткнулся на проблему, связанную с модулем snd-hda-intel. А именно, сделав ему rmmod и попробовав скормить ему разные опции, я внезапно обнаружил, что:
1) один из 2х регуляторов громкости SPDIF стал mute
2) исчез "лишний" софтрегулятор оставшийся из предыдущих опытов
3) появился звук на hw:0,0 и hw0,1
что именно произошло, я не понял - если кто знает, расскажите )
Однако, осталась проблема с одновременным воспроизведением через a52 plugin и pcm на SPDIF - не получается. Насколько я понял, и a52 и dmix требуют в качестве выхода не виртуальное а физическое устройство. То есть нельзя смиксить входящие звуки а потом их отправить в a52. Или все-таки как-то можно? Может быть можно это сделать через какое-нибудь PulseAudio - миксить в нем а потом в a52 отправлять? Хотя бы направление поисков если бы кто подсказал, быдл бы весьма замечательно...