Если у вас нет акустической системы 5.1, подключенной по цифре (S/PDIF или HDMI) и понимающей DTS - можно дальше не читать.
Прошу протестировать ALSA-плугин, который позволяет выводить многоканальный звук из произвольного приложения (а не только готовый DTS-звук от DVD-плеера и т.п.) на такую акустическую систему путем конвертирования в DTS «на лету». Такое преобразование необходимо, т.к. несжатый многоканальный PCM в SPDIF не влезает.
В составе alsa-plugins есть нечто аналогичное для AC3. Сам проверить не могу, т.к. у меня ресивера, понимающего DTS, нет.
В случае успешного тестирования я завтра выпущу версию 1, в случае неуспешного тестирования - буду чинить.
Инструкция:
1. Скачать для контроля готовый DTS-файл, сделанный не моим кодеком: например, http://www.diatonis.com/downloads/diatonis_dts_wav_secret-universe.zip
2. Выяснить правильное название устройства spdif или hdmi:
У меня получается «hdmi:CARD=Intel,DEV=0». Для простановки бита non-audio, в конец надо добавить ",AES0=6", т.е. у меня получается «hdmi:CARD=Intel,DEV=0,AES0=6»
3. Проиграть готовый DTS wav-файл, чтобы убедиться, что ресивер действительно понимает DTS:
unzip diatonis_dts_wav_secret-universe.zip
aplay -D "hdmi:CARD=Intel,DEV=0,AES0=6" diatonis_dts_secret-universe.wav
mplayer -ao 'alsa:device=hdmi={CARD Intel DEV 0 AES0 6}' -ac hwdts diatonis_dts_secret-universe.wav
При ошибке «устройство занято» надо подождать, пока другая программа (вероятно, pulseaudio) освободит его, и повторить попыткую
Если aplay не работает, а mplayer работает - модель ресивера в студию с пометкой «требует заворачивания DTS в IEC61937», дальше не читать. Если обе команды шипят или молчат - ресивер DTS не понимает, дальше можно не читать.
4. Поставить заголовочные файлы от ALSA. В Ubuntu это apt-get install libasound2-dev.
5. Скачать и поставить dtsenc из git:
git clone git://gitorious.org/dtsenc/dtsenc.git
cd dtsenc
autoreconf -f -i -v
./configure --prefix=/usr # в другом префиксе ALSA-плугин работать не будет
make
sudo make install
6. Скачать 5.1 flac, который обычными средствами через spdif не играется. Например, отсюда: http://www.linnrecords.com/linn-downloads-testfiles.aspx (см. конец страницы).
7. Понизить частоту дискретизации, переконвертировать в DTS:
ffmpeg -i ForUntoUsSurround88.flac -ar 44100 ForUntoUsSurround44.wav
dcaenc ForUntoUsSurround44.wav ForUntoUsSurround44.dts 1411200
8. Попробовать вывести получившийся dts-файл через spdif:
aplay -D "hdmi:CARD=Intel,DEV=0,AES0=6" -f cd ForUntoUsSurround44.dts
Результат (молчит | шипит | поет | заикается) и модель ресивера - в студию. Если молчит или шипит - дальше не читать.
mplayer -ac hwdts работать не будет, т.к. использована вся доступная полоса spdif, и места для заголовка IEC61937 нет. При желании можно исправить, в main.c существующий вызов dcaenc_create() надо поменять вот на что:
c = dcaenc_create(f->sample_rate, channel_map[f->channels - 1], bitrate,
f->channels == 6 ? DCAENC_FLAG_LFE | DCAENC_FLAG_28BIT : DCAENC_FLAG_28BIT);
9. Создать в домашнем каталоге файл .asoundrc с таким содержимым:
pcm.dca {
type dca
slave.pcm "hdmi:CARD=Intel,DEV=0,AES0=6"
}
Проверить ALSA-плугин mplayer'ом:
mplayer -channels 6 -ao alsa:device=dca -af resample=44100 ForUntoUsSurround88.flac
10. Если у кого-то получится завести с моим плугином pulseaudio - инструкцию в студию.
Результат и модель ресивера - в студию.