24 bit LPCM в Linux
Модератор: Модераторы разделов
-
Mahoney
- Сообщения: 200
- ОС: Fedora
24 bit LPCM в Linux
Есть у меня один DVD с дорожкой в формате 24 bit LPCM (звук у меня Audigy2). В связи с этим у меня несколько вопросов.
1. Умеет ли ALSA 24-битный звук в принципе?
если да, то...
2. Как заставить Xine (Kaffeine) воспроизводить этот звуковой поток? Причём желательно без предварительной конвертации в 16 bit PCM, т.е. воспроизводить его "как есть". Из трёх моих плееров (Kaffeine, MPlayer и VLC) звук я услышал только в последнем. MPlayer вообще не показал эту дорожку, как будто её нет. Kaffeinе радостно воспроизвёл белый шум, что логично.
в связи с этим вопрос...
3. Есть ли в природе утилита, которая бы показывала подробную информацию об активных звуковых потоках в ALSA (разрядность, частоту дискретизации и т.п.)? Или хотя бы можно это получить программно (я сам прогу состряпую)?
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
KDE 3.5.7 kernel 2.6.25 X.org 7.4
-
Mahoney
- Сообщения: 200
- ОС: Fedora
Re: 24 bit LPCM в Linux
Ну так и скажите, что "нет, Linux не умеет больше 16-бит".
А по третьему вопросу тоже "нет"?
Этот вопрос из разряда необходимости 64-битных ОС.
Я всего лишь хочу использовать вещи по назначению. Может и нет слышимых улучшений от 24 бит, зато есть реальные ухудшения от процесса конвертации 24->16 бит. Если уж досталась мне LPCM-дорожка в 24 битах, я хочу её услышать с минимально возможными в данных условиях искажениями. Есть ещё 16 бит DD5.1, но разницу между PCM и DD я слышу даже на сравнительно дешёвой акустике. Имею я право слушать 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
KDE 3.5.7 kernel 2.6.25 X.org 7.4
-
kreator
- Сообщения: 384
- ОС: LFS
Re: 24 bit LPCM в Linux
Ну так и скажите, что "нет, 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
Александр писал(а): ↑02.01.2008 20:20зато есть реальные ухудшения от процесса конвертации 24->16 бит.
Знакомое кино, когда много народу пинало Creative за принудительную передискретизацию. Да, при конвертации звук может улететь, как ни печально. Вообще, алса вроде как даже 96КГц через костыли подерживает, хотя может в последнее время поправили как-нибудь.
В alsa можно включить очень качественный ресемплинг для любой звуковой платы.
Очень печально слышать про "костыли" в алса. ИМХО если и есть костыли, так только из-за кривизны железа и отсутствия спецификаций.
-
Mahoney
- Сообщения: 200
- ОС: Fedora
Re: 24 bit LPCM в Linux
Пока не увидел умения.
Не то. По-прежнему воспроиводит DD5.1 трек, а не LPCM. Кроме того Mplayer для меня стоит "чтоб было". Не пользуюсь им, Kaffeine удобнее и с DVD-шным меню умеет нормально работать.
А вот за это спасибо, то, что нужно. Видно, что VLC просто конвертирует поток в 16-bit 48 kHz.
I code, therefore I am...
-
kreator
- Сообщения: 384
- ОС: LFS
Re: 24 bit LPCM в Linux
Не то. По-прежнему воспроиводит 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
Ещё лучше. Пишет, что, мол, оборудование не умеет 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
Вообще ничего не понимаю
Запись звука в формате 24-bit 96 kHz проходит как надо, звук в файле оказывается в правильном формате, но при попытке вопроизведения любым плеером в системе он конвертируется в 16-битный формат. Причём sample rate не меняется! Вот пример:
Как это всё понимать?
Запись звука в формате 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
Насколько я знаю, это происходит из-за кривизны железа. Почти все звуковые платы выдают 32 бита вместо 24 либо float (что кстати гораздо удобнее в последующей обработке). С чем точно это связано - не знаю. Под win драйвера просто срезают лишнии биты. Попробуй mplayer -af format=s32le или format=floatle.
-
Mahoney
- Сообщения: 200
- ОС: Fedora
Re: 24 bit LPCM в Linux
Так-так... Плеер перестал ругаться на несовместимое железо, уверяет, что воспроизводит в 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
У каждого своя правда
Никто не врёт. Скорее всего сигнал идёт через dmix (или что-то подобное). Пробуй отправлять в hw:0,0 (mplayer -ao alsa:device=hw=0.0).
-
Mahoney
- Сообщения: 200
- ОС: Fedora
Re: 24 bit LPCM в Linux
В общем, если вызывать
Код: Выделить всё
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
Глянул драйвер, похоже чип (CA0102) поддерживает только 32 бита, 16 бит не поддерживает! Остаётся загадкой почему в proc пишет S16_LE, должно быть всегда 32.
У меня CA0106 поддерживает и 16 и 32.
Попробуй поставить jack и запустить 'jackd -d alsa', затем посмотри в proc.
У меня CA0106 поддерживает и 16 и 32.
Попробуй поставить jack и запустить 'jackd -d alsa', затем посмотри в proc.
-
Mahoney
- Сообщения: 200
- ОС: Fedora
Re: 24 bit LPCM в Linux
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 playbackI code, therefore I am...
-
kreator
- Сообщения: 384
- ОС: LFS
Re: 24 bit LPCM в Linux
Похоже на баг. Покажи мне вывод команды lspci -nn | grep 1102