alsa, кодирование многоканального звука и передача по цифре

Доброе время суток!
Собственно такая ситуация. Можно ли многоканальный звук 5.1 в alsa сжимать кодеком ac3 или dts и передавать в таком виде через цифровой выход звуковой карточки на ресивер?
Такой финт на windows работает.

Вот пока то, чего я добился.

Вот пока то, чего я добился. Ядро 2.6.31 смогло опознать мою звуковую карточку. Просто стерео по оптике есть.

# cat /proc/asound/cards
 0 [XFi            ]: SB-XFi - Creative X-Fi
                      Creative X-Fi 20K2 SB0880
# cat /proc/asound/pcm
00-00: ctxfi : Front/WaveIn : playback 8 : capture 1
00-01: ctxfi : Surround : playback 8
00-02: ctxfi : Center/LFE : playback 8
00-03: ctxfi : Side : playback 8
00-04: ctxfi : IEC958 Non-audio : playback 1

Пробовал настроить как описано здесь, но не получается.

# cat /etc/asound.conf 
pcm.HW_Front/WaveIn {             
    type hw:0                     
    card 0                        
    device 0                      
}                                 

pcm.HW_Surround {
    type hw      
    card 0       
    device 1     
}                

pcm.HW_Center/LFE {
    type hw        
    card 0         
    device 2       
}                  

pcm.HW_IEC958 {
    type hw    
    card 0     
    device 4   
}              

pcm.Filter_Dmix {
    type dmix    
    ipc_key 1024                                                                                                                                                                                               
    slave.pcm "HW_IEC958"                                                                                                                                                                                      
}                                                                                                                                                                                                              

pcm.Filter_SoftwareVolumeDmix {
    type softvol               
    slave.pcm "Filter_Dmix"    
    control {                  
        name "Software"        
        card 0                 
    }                          
}                              

pcm.Filter_A52Encode {
    type a52          
    bitrate 448       
    card 0            
}                     

pcm.Filter_SimpleUpmix {
    type upmix          
    slave.pcm "Filter_A52Encode"
    channels 6                  
}                               

pcm.Filter_RoutingUpmix {
    type route           
    slave.pcm "Filter_A52Encode"
    slave.channels 6            
    ttable.0.0 1                
    ttable.1.1 1                
    ttable.0.2 1                
    ttable.1.3 1                
    ttable.0.4 0.5              
    ttable.1.4 0.5              
    ttable.0.5 0.5              
    ttable.1.5 0.5              
}                               

pcm.Filter_SoftwareVolume {
    type softvol           
    slave.pcm "Filter_SimpleUpmix"
#    slave.pcm "Filter_RoutingUpmix"
    control {
        name "Software"
        card 0
    }
}

pcm.Filter_Duplex {
    type asym
    playback.pcm "Filter_SoftwareVolume"
    capture.pcm "HW_Front/WaveIn"
}

pcm.Filter_RateConvert {
    type rate
    slave {
        pcm "Filter_Duplex"
        rate 48000
    }
}

pcm.!default {
    type plug
    slave.pcm "Filter_RateConvert"
#    slave.pcm "Filter_SimpleUpmix"
}

pcm.!noac3 {
    type plug
    slave.pcm "Filter_SoftwareVolumeDmix"
}

pcm.dsp "Filter_RateConvert"
pcm.dsp1 "Filter_RateConvert"
ctl.dsp {
    type plug
    slave.pcm "HW_Front/WaveIn"
}
ctl.mixer {
    type plug
    slave.pcm "HW_Front/WaveIn"
}

При попытке воспроизведения например в audacious

ALSA lib conf.c:3952:(snd_config_expand) Unknown parameters {AES0 0x6 AES1 0x82 AES2 0x0 AES3 0x2  CARD 0}
ALSA lib pcm.c:2211:(snd_pcm_open_noupdate) Unknown PCM iec958:{AES0 0x6 AES1 0x82 AES2 0x0 AES3 0x2  CARD 0}
MADPlug-Message: failed to open audio output: XMMS reverse compatibility output plugin

До этого он кодер не находил, поставил alsa-plugins, нашел. alsa версии 1.0.20.

через S/P-DIF вы сможете

через S/P-DIF вы сможете проиграть либо через проигрыватели, основанные на xine-lib, либо через mplayer...

$ mplayer -afm hwac3 file...
в kaffeine еще удобно xine настроить и там же слушать...

если найдете wav файлы с dts внутри, которые mplayer автоматом не распознает, то воспользуйтесь
$ mplayer -ao alsa:device=spdif file.wav

кодировать на лету невозможно в принципе, кодировать в dts невозмножно по лицензионным соображениям, в ac3 можно перекодировать например mplayer...

Через S/P-DIF у меня и так

Через S/P-DIF у меня и так играет стерео. Из коробки, как говорится, сразу как установил, безо всяких хитрых настроек.
Но на фронтальных колонках и сабвуфере (на саб НЧ фильтруется силами ресивера). А мне хотелось бы на всех.
Можно на ресивере постоянно режимы переключать (стерео -> на 5 колонок), но это не наш метод.

Второе, mplayer может передавать ac3 поток напрямую на цифровой выход. Это хорошо. Но одновременно никаких звуков уже не будет.
В поток не влезть. Опять же, если до этого смотрел тюнер/слушал музыку на всех колонках - надо трогать ресивер, чтоб переключить его в соответствующий режим.

Далее, у меня карта Creative X-Fi Titanium Fatality чего-то там. Под 200$ стоила.
Лицензию на кодирование многоканального сигнала на лету в ac3 и dts я проплатил.
Даже на сайте, когда скачиваешь такой кодер для windows, надо серийный номер вводить и т.д.
Я то думал, что она это аппаратно делает. Единственная доступная с такой функцией была.
Оказалось - софтово, на уровне драйвера.

С выходом ядра 2.6.31 она наконец обнаружилась в линуксе. Вот я и задался такой целью, настроить.
Судя по информации в инете, такое возможно.
Вопрос в том - как?
Как правильно подключить фильтр а52, присутствующий в alsa, чтобы он заработал?

всё очень просто, если фильтр

всё очень просто, если фильтр уже установлен

pcm.a52encode {
type a52
card 0
}

перегоняет шестиканальный aac/dts в ac3
заместо
card 0
можно
slavepcm "мойдевайс"
поставить и какой нить другой девайс подцепить

мой .asoundrc

pcm.snd_card {
        type hw
        card 0
        device 1
}

ctl.snd_card {
        type hw
        card 0
        device 1
}

pcm.a52encode {
	type a52
	## rate 44100
	card 0
}
pcm.a52upmix {
    type upmix
    slave.pcm "a52encode"
    channels 6 
}

pcm.!default {
    type plug
    slave.pcm "snd_card"
}

любой 6тиканальный звук перегоняется в ac3
стерео апмиксит на 6 каналов и тоже пакует в ac3

только вот музычку бывает заикает в XBMC, в нём я настроил custom sound device plug:a52upmix
в твоей проге по идее тоже должно работать
speaker-test -c 2 -D a52encode
и
speaker-test -c 6 -D a52encode
по крайней мере работают без проблемс

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

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