Прошу помочь новичку в настройке звука

Сразу оговорюсь - я совершеннейший новичок в 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 support                 

2. Собираем и устанавливаем ядро (а так же правим /boot/grub/menu.lst и т.д.)
make all modules_install firmware_install install
3. перезагружаемся с новым ядром
4. проделываем alsaconf
5. запускаем алсу /etc/init.d/alsasound и добавляем ее в автозагрузку rc-update add alsasound boot
6. из-под нужного пользователя запускаем alsamixer и нажимаем в столбце SPDIF (должно загореться два нолика на зеленом фоне снизу). Возможно нужно еще выставить "SPDIF Playback Source" в значение PCM...

теперь звук по дефолту будет через 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.

Theli написал(а):
нажимаем в столбце SPDIF

нажимаем клавишу латинскую М ;)

P.P.P.S. в спецификации на spdif сказано, что через него можно передавать квадро-звук, но реально ни один ресивер и ПО этого не поддерживают ((

Цитата: через spdif можно

Цитата:
через spdif можно передавать только стерео (максимум 24/96-оптика, 24/192-коаксиал)!!! никакого 5.1!! только если DTS или AC3, а это сжатые форматы ;)

Разумеется, это так. Я не совсем корректно поставил вопрос. Сейчас загрузил 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!

Beelzebubbie написал(а):
вот http://www.alsa-project.org/main/index.php/A52_plugin вроде бы то что нужно.

1. Я затрудняюсь определить, установлен ли он у меня. Как это сделать?
2. нужно сконфигурировать ALSA для использования плагина. Нужна помощь.

USE index подсказывает, что есть одноимённый USE-флаг a52.
Я бы начал с глобального выставления этого флага (и пересборки мира с опцией --newuse).

:wq
--
Live free or die

Цитата: Я бы начал с

Цитата:
Я бы начал с глобального выставления этого флага (и пересборки мира с опцией --newuse).

можно поподробнее?

Beelzebubbie

Beelzebubbie написал(а):
Цитата:
Я бы начал с глобального выставления этого флага (и пересборки мира с опцией --newuse).

можно поподробнее?

Хэндбук и 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 отправлять? Хотя бы направление поисков если бы кто подсказал, быдл бы весьма замечательно...

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".