alsa, кодирование многоканального звука и передача по цифре
gentooman 17 октября, 2009 - 23:11
Доброе время суток!
Собственно такая ситуация. Можно ли многоканальный звук 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 /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
по крайней мере работают без проблемс