24 bit LPCM в Linux

Разные проблемы звука, видео, обсуждение разных устройств и т.д.

Модератор: Модераторы разделов

Аватара пользователя
Mahoney
Сообщения: 200
ОС: Fedora

24 bit LPCM в Linux

Сообщение Mahoney »

Есть у меня один DVD с дорожкой в формате 24 bit LPCM (звук у меня Audigy2). В связи с этим у меня несколько вопросов.
1. Умеет ли ALSA 24-битный звук в принципе?
если да, то...
2. Как заставить Xine (Kaffeine) воспроизводить этот звуковой поток? Причём желательно без предварительной конвертации в 16 bit PCM, т.е. воспроизводить его "как есть". Из трёх моих плееров (Kaffeine, MPlayer и VLC) звук я услышал только в последнем. MPlayer вообще не показал эту дорожку, как будто её нет. Kaffeinе радостно воспроизвёл белый шум, что логично.
в связи с этим вопрос...
3. Есть ли в природе утилита, которая бы показывала подробную информацию об активных звуковых потоках в ALSA (разрядность, частоту дискретизации и т.п.)? Или хотя бы можно это получить программно (я сам прогу состряпую)?
I code, therefore I am...
Спасибо сказали:
Аватара пользователя
Александр
Сообщения: 945
Статус: Пользователь Debian
ОС: Debian 'Etch'

Re: 24 bit LPCM в Linux

Сообщение Александр »

Вопрос из интереса: если у вас действительно есть такая акустика, способная воспроизвести 24 бита, то сколько она сейчас стоит?
HP 530 Core2Duo T2400 950GMA 1GB RAM 120 HDD
KDE 3.5.7 kernel 2.6.25 X.org 7.4
Спасибо сказали:
Аватара пользователя
Mahoney
Сообщения: 200
ОС: Fedora

Re: 24 bit LPCM в Linux

Сообщение Mahoney »

Ну так и скажите, что "нет, Linux не умеет больше 16-бит".
А по третьему вопросу тоже "нет"?

Александр писал(а):
02.01.2008 14:40
Вопрос из интереса: если у вас действительно есть такая акустика, способная воспроизвести 24 бита, то сколько она сейчас стоит?


Этот вопрос из разряда необходимости 64-битных ОС.
Я всего лишь хочу использовать вещи по назначению. Может и нет слышимых улучшений от 24 бит, зато есть реальные ухудшения от процесса конвертации 24->16 бит. Если уж досталась мне LPCM-дорожка в 24 битах, я хочу её услышать с минимально возможными в данных условиях искажениями. Есть ещё 16 бит DD5.1, но разницу между PCM и DD я слышу даже на сравнительно дешёвой акустике. Имею я право слушать 24-бита без любого ресемплинга?
I code, therefore I am...
Спасибо сказали:
Аватара пользователя
Александр
Сообщения: 945
Статус: Пользователь Debian
ОС: Debian 'Etch'

Re: 24 bit LPCM в Linux

Сообщение Александр »

зато есть реальные ухудшения от процесса конвертации 24->16 бит.

Знакомое кино, когда много народу пинало Creative за принудительную передискретизацию. Да, при конвертации звук может улететь, как ни печально. Вообще, алса вроде как даже 96КГц через костыли подерживает, хотя может в последнее время поправили как-нибудь.
HP 530 Core2Duo T2400 950GMA 1GB RAM 120 HDD
KDE 3.5.7 kernel 2.6.25 X.org 7.4
Спасибо сказали:
kreator
Сообщения: 384
ОС: LFS

Re: 24 bit LPCM в Linux

Сообщение kreator »

Ну так и скажите, что "нет, Linux не умеет больше 16-бит".

Умеет. Хотя вопрос о необходимости для бытового применения остаётся открытым. Многие отсутствие dithering'а не слышат (искажения до -60dB), а тут более 96dB.
2. Как заставить Xine (Kaffeine) воспроизводить этот звуковой поток? Причём желательно без предварительной конвертации в 16 bit PCM, т.е. воспроизводить его "как есть". Из трёх моих плееров (Kaffeine, MPlayer и VLC) звук я услышал только в последнем. MPlayer вообще не показал эту дорожку, как будто её нет. Kaffeinе радостно воспроизвёл белый шум, что логично.
в связи с этим вопрос...

mplayer -aid 128 или 129
3. Есть ли в природе утилита, которая бы показывала подробную информацию об активных звуковых потоках в ALSA (разрядность, частоту дискретизации и т.п.)? Или хотя бы можно это получить программно (я сам прогу состряпую)?

cat /proc/asound/card0/pcm0p/sub0/hw_params
Спасибо сказали:
kreator
Сообщения: 384
ОС: LFS

Re: 24 bit LPCM в Linux

Сообщение kreator »

Александр писал(а):
02.01.2008 20:20
зато есть реальные ухудшения от процесса конвертации 24->16 бит.

Знакомое кино, когда много народу пинало Creative за принудительную передискретизацию. Да, при конвертации звук может улететь, как ни печально. Вообще, алса вроде как даже 96КГц через костыли подерживает, хотя может в последнее время поправили как-нибудь.

В alsa можно включить очень качественный ресемплинг для любой звуковой платы.
Очень печально слышать про "костыли" в алса. ИМХО если и есть костыли, так только из-за кривизны железа и отсутствия спецификаций.
Спасибо сказали:
Аватара пользователя
Mahoney
Сообщения: 200
ОС: Fedora

Re: 24 bit LPCM в Linux

Сообщение Mahoney »

kreator писал(а):
04.01.2008 19:13
Умеет. Хотя вопрос о необходимости для бытового применения остаётся открытым. Многие отсутствие dithering'а не слышат (искажения до -60dB), а тут более 96dB.

Пока не увидел умения.

kreator писал(а):
04.01.2008 19:13
mplayer -aid 128 или 129

Не то. По-прежнему воспроиводит DD5.1 трек, а не LPCM. Кроме того Mplayer для меня стоит "чтоб было". Не пользуюсь им, Kaffeine удобнее и с DVD-шным меню умеет нормально работать.

kreator писал(а):
04.01.2008 19:13
cat /proc/asound/card0/pcm0p/sub0/hw_params

А вот за это спасибо, то, что нужно. Видно, что VLC просто конвертирует поток в 16-bit 48 kHz.
I code, therefore I am...
Спасибо сказали:
kreator
Сообщения: 384
ОС: LFS

Re: 24 bit LPCM в Linux

Сообщение kreator »

Не то. По-прежнему воспроиводит DD5.1 трек, а не LPCM. Кроме того Mplayer для меня стоит "чтоб было". Не пользуюсь им, Kaffeine удобнее и с DVD-шным меню умеет нормально работать.

Я использую mplayer и на его примере мне будет легче объяснить.
Для начала нужно определить номер нужного аудио трека.
Запускаем mplayer -v 123.vob и ищем что-то типа:
==> Found video stream: 0
==> Found audio stream: 128
==> Found audio stream: 129
==> Found audio stream: 138
Затем пробуем mplayer -aid с соответствующими номерами (в данном случае 128, 129, 138).
Спасибо сказали:
Аватара пользователя
Mahoney
Сообщения: 200
ОС: Fedora

Re: 24 bit LPCM в Linux

Сообщение Mahoney »

Ещё лучше. Пишет, что, мол, оборудование не умеет 24-bit (это оно про Audigy2). И ресемплит в 16 bit.

Код: Выделить всё

Playing /media/dvd-read/VIDEO_TS/VTS_02_1.VOB.
get_path('sub/') -> '/home/mahoney/.mplayer/sub/'
[file] File size is 1073727488 bytes
STREAM: [file] /media/dvd-read/VIDEO_TS/VTS_02_1.VOB
STREAM: Description: File
STREAM: Author: Albeu
STREAM: Comment: based on the code from ??? (probably Arpi)
Checking for YUV4MPEG2
ASF_check: not ASF guid!
Checking for NuppelVideo
Checking for REAL
Checking for SMJPEG
Searching demuxer type for filename /media/dvd-read/VIDEO_TS/VTS_02_1.VOB ext: .VOB
Trying demuxer 2 based on filename extension
system stream synced at 0xD (13)!
==> Found video stream: 0
==> Found audio stream: 160
==> Found audio stream: 129
MPEG-PS file format detected.
Searching for sequence header... OK!
VIDEO:  MPEG2  720x576  (aspect 3)  25.000 fps  6700.0 kbps (837.5 kbyte/s)
[V] filefmt:2  fourcc:0x10000002  size:720x576  fps:25.00  ftime:=0.0400
get_path('sub/') -> '/home/mahoney/.mplayer/sub/'
X11 opening display: :0.1
vo: X11 color mask:  FFFFFF  (R:FF0000 G:FF00 B:FF)
vo: X11 running at 1280x1024 with depth 24 and 32 bpp (":0.1" => local display)
[x11] Detected wm supports NetWM.
[x11] Detected wm supports FULLSCREEN state.
[x11] Detected wm supports ABOVE state.
[x11] Detected wm supports BELOW state.
[x11] Detected wm supports STAYS_ON_TOP state.
[x11] Current fstype setting honours FULLSCREEN STAYS_ON_TOP ABOVE BELOW X atoms
Disabling DPMS
DPMSDisable stat: 1
[xv common] Drawing no colorkey.
[xv common] Maximum source image dimensions: 2046x2046
==========================================================================
Opening video decoder: [mpegpes] MPEG 1/2 Video passthrough
VDec: vo config request - 720 x 576 (preferred colorspace: Mpeg PES)
Trying filter chain: vo
Could not find matching colorspace - retrying with -vf scale...
Opening video filter: [scale]
SwScale params: -1 x -1 (-1=no scaling)
Trying filter chain: scale vo
The selected video_out device is incompatible with this codec.
Try appending the scale filter to your filter list,
e.g. -vf spp,scale instead of -vf spp.
VDecoder init failed :(
Opening video decoder: [libmpeg2] MPEG 1/2 Video decoder libmpeg2-v0.4.0b
Selected video codec: [mpeg12] vfm: libmpeg2 (MPEG-1 or 2 (libmpeg2))
==========================================================================
==========================================================================
Opening audio decoder: [dvdpcm] Uncompressed DVD/VOB LPCM audio decoder
dec_audio: Allocating 2048 + 65536 = 67584 bytes for output buffer.
AUDIO: 48000 Hz, 2 ch, s24be, 2304.0 kbit/100.00% (ratio: 288000->288000)
Selected audio codec: [dvdpcm] afm: dvdpcm (Uncompressed DVD/VOB LPCM)
==========================================================================
Building audio filter chain for 48000Hz/2ch/s24be -> 0Hz/0ch/??...
[libaf] Adding filter dummy
[dummy] Was reinitialized: 48000Hz/2ch/s24be
[dummy] Was reinitialized: 48000Hz/2ch/s24be
alsa-init: requested format: 48000 Hz, 2 channels, 10
alsa-init: using ALSA 1.0.14a
alsa-init: setup for 1/2 channel(s)
alsa-init: using device default
alsa-init: pcm opened in blocking mode
[AO_ALSA] Format s24be is not supported by hardware, trying default.
alsa-init: chunksize set to 1024
alsa-init: fragcount=16
alsa-init: got buffersize=65536
alsa-init: got period size 1024
alsa: 48000 Hz/2 channels/4 bpf/65536 bytes buffer/Signed 16 bit Little Endian
AO: [alsa] 48000Hz 2ch s16le (2 bytes per sample)
AO: Description: ALSA-0.9.x-1.x audio output
AO: Author: Alex Beregszaszi, Zsolt Barat <joy@streamminister.de>
AO: Comment: under developement
Building audio filter chain for 48000Hz/2ch/s24be -> 48000Hz/2ch/s16le...
[dummy] Was reinitialized: 48000Hz/2ch/s24be
[libaf] Adding filter format
[format] Changing sample format from big-endian 24-bit signed int to little-endian 16-bit signed int
[dummy] Was reinitialized: 48000Hz/2ch/s24be
[format] Changing sample format from big-endian 24-bit signed int to little-endian 16-bit signed int
Starting playback...
I code, therefore I am...
Спасибо сказали:
Аватара пользователя
Mahoney
Сообщения: 200
ОС: Fedora

Re: 24 bit LPCM в Linux

Сообщение Mahoney »

Вообще ничего не понимаю :crazy:
Запись звука в формате 24-bit 96 kHz проходит как надо, звук в файле оказывается в правильном формате, но при попытке вопроизведения любым плеером в системе он конвертируется в 16-битный формат. Причём sample rate не меняется! Вот пример:

Код: Выделить всё

[mahoney@mahoney ~]$ play -V sample.wav

Input File     : 'sample.wav'
Sample Size    : 24-bit (3 bytes)
Sample Encoding: signed (2's complement)
Channels       : 1
Sample Rate    : 96000
Duration       : 00:10.15 = 974848 samples = 1657.9 CDDA sectors
Endian Type    : little
Reverse Nibbles: no
Reverse Bits   : no

play alsa: trying for word samples.

Output File    : 'default' (alsa)
Sample Size    : 16-bit (2 bytes)
Sample Encoding: signed (2's complement)
Channels       : 1
Sample Rate    : 96000
Endian Type    : little
Reverse Nibbles: no
Reverse Bits   : no

Time: 00:10.15 [00:00.00] of 00:10.15 ( 100.0%) Output Buffer: 974.85K


Как это всё понимать?
I code, therefore I am...
Спасибо сказали:
kreator
Сообщения: 384
ОС: LFS

Re: 24 bit LPCM в Linux

Сообщение kreator »

Насколько я знаю, это происходит из-за кривизны железа. Почти все звуковые платы выдают 32 бита вместо 24 либо float (что кстати гораздо удобнее в последующей обработке). С чем точно это связано - не знаю. Под win драйвера просто срезают лишнии биты. Попробуй mplayer -af format=s32le или format=floatle.
Спасибо сказали:
Аватара пользователя
Mahoney
Сообщения: 200
ОС: Fedora

Re: 24 bit LPCM в Linux

Сообщение Mahoney »

kreator писал(а):
07.01.2008 01:48
Попробуй mplayer -af format=s32le или format=floatle.

Так-так... Плеер перестал ругаться на несовместимое железо, уверяет, что воспроизводит в S32_LE. А вот /proc/asound/Audigy2/pcm0p/sub0/hw_params уверяет меня, что по-прежнему вопросизводится S16_LE.
Вот, что говорит mplayer

Код: Выделить всё

==========================================================================
Opening audio decoder: [dvdpcm] Uncompressed DVD/VOB LPCM audio decoder
dec_audio: Allocating 2048 + 65536 = 67584 bytes for output buffer.
AUDIO: 48000 Hz, 2 ch, s24be, 2304.0 kbit/100.00% (ratio: 288000->288000)
Selected audio codec: [dvdpcm] afm: dvdpcm (Uncompressed DVD/VOB LPCM)
==========================================================================
Building audio filter chain for 48000Hz/2ch/s24be -> 0Hz/0ch/??...
[libaf] Adding filter format
[format] Changing sample format from big-endian 24-bit signed int to little-endian 32-bit signed int
[format] Changing sample format from big-endian 24-bit signed int to little-endian 32-bit signed int
alsa-init: requested format: 48000 Hz, 2 channels, 19
alsa-init: using ALSA 1.0.14a
alsa-init: setup for 1/2 channel(s)
alsa-init: using device default
alsa-init: pcm opened in blocking mode
alsa-init: chunksize set to 1024
alsa-init: fragcount=16
alsa-init: got buffersize=131072
alsa-init: got period size 1024
alsa: 48000 Hz/2 channels/8 bpf/131072 bytes buffer/Signed 32 bit Little Endian
AO: [alsa] 48000Hz 2ch s32le (4 bytes per sample)
AO: Description: ALSA-0.9.x-1.x audio output
AO: Author: Alex Beregszaszi, Zsolt Barat <joy@streamminister.de>
AO: Comment: under developement
Building audio filter chain for 48000Hz/2ch/s24be -> 48000Hz/2ch/s32le...
[format] Changing sample format from big-endian 24-bit signed int to little-endian 32-bit signed int
[format] Changing sample format from big-endian 24-bit signed int to little-endian 32-bit signed int
Starting playback...


А вот содержимое hw_params:

Код: Выделить всё

access: MMAP_INTERLEAVED
format: S16_LE
subformat: STD
channels: 2
rate: 48000 (48000/1)
period_size: 1024
buffer_size: 16384
tick_time: 1000

Ну и кто из них врёт?
I code, therefore I am...
Спасибо сказали:
kreator
Сообщения: 384
ОС: LFS

Re: 24 bit LPCM в Linux

Сообщение kreator »

У каждого своя правда :) Никто не врёт. Скорее всего сигнал идёт через dmix (или что-то подобное). Пробуй отправлять в hw:0,0 (mplayer -ao alsa:device=hw=0.0).
Спасибо сказали:
Аватара пользователя
Mahoney
Сообщения: 200
ОС: Fedora

Re: 24 bit LPCM в Linux

Сообщение Mahoney »

kreator писал(а):
08.01.2008 03:52
У каждого своя правда :) Никто не врёт. Скорее всего сигнал идёт через dmix (или что-то подобное). Пробуй отправлять в hw:0,0 (mplayer -ao alsa:device=hw=0.0).

В общем, если вызывать

Код: Выделить всё

mplayer -af format=s32le -ao alsa:device=hw=0.0

говорит, что формат не поддерживается, если убрать

Код: Выделить всё

-ao alsa:device=hw=0.0

то не ругается, но звук тихо конверится в 16-bit.
Самое интересное, если написать

Код: Выделить всё

mplayer -af format=s32le -ao alsa:device=hw=1.0

т.е. отправить звук через встроенное аудио Intel, то в /proc/asound/Intel/pcm0p/sub0/hw_params я вижу S32_LE.
Таки не умеет Linux 24-бит звук на Audigy2, а на встроенном Intel'овском умеет, но через задницу :(
I code, therefore I am...
Спасибо сказали:
kreator
Сообщения: 384
ОС: LFS

Re: 24 bit LPCM в Linux

Сообщение kreator »

Глянул драйвер, похоже чип (CA0102) поддерживает только 32 бита, 16 бит не поддерживает! Остаётся загадкой почему в proc пишет S16_LE, должно быть всегда 32.
У меня CA0106 поддерживает и 16 и 32.
Попробуй поставить jack и запустить 'jackd -d alsa', затем посмотри в proc.
Спасибо сказали:
Аватара пользователя
Mahoney
Сообщения: 200
ОС: Fedora

Re: 24 bit LPCM в Linux

Сообщение Mahoney »

kreator писал(а):
09.01.2008 01:36
Глянул драйвер, похоже чип (CA0102) поддерживает только 32 бита, 16 бит не поддерживает! Остаётся загадкой почему в proc пишет S16_LE, должно быть всегда 32.
У меня CA0106 поддерживает и 16 и 32.
Попробуй поставить jack и запустить 'jackd -d alsa', затем посмотри в proc.

Запустил:

Код: Выделить всё

[root@mahoney everything]# jackd -d alsa
jackd 0.103.0
Copyright 2001-2005 Paul Davis and others.
jackd comes with ABSOLUTELY NO WARRANTY
This is free software, and you are welcome to redistribute it
under certain conditions; see the file COPYING for details

JACK compiled with System V SHM support.
loading driver ..
creating alsa driver ... hw:0|hw:0|1024|2|48000|0|0|nomon|swmeter|-|32bit
control device hw:0
ALSA: Cannot open PCM device alsa_pcm for capture. Falling back to playback-only mode
configuring for 48000Hz, period = 1024 frames, buffer = 2 periods
ALSA: final selected sample format for playback: 16bit little-endian
ALSA: use 2 periods for playback
I code, therefore I am...
Спасибо сказали:
kreator
Сообщения: 384
ОС: LFS

Re: 24 bit LPCM в Linux

Сообщение kreator »

Похоже на баг. Покажи мне вывод команды lspci -nn | grep 1102
Спасибо сказали: