Kraplax 13.04.2011 20:05

Есть проблема!Фильтр низких частот в ALSA через LADSPA

Всем доброго времени суток.

Ситуация - есть звуковая карта Creative Audigy SE (SB0570), к ней подключена система 5.1. Требуется иметь возможность слушать музыку и смотреть фильмы с адекватным микшированием.
Поясню - когда слушаем музыку воспроизведение идет 2.0 - соответственно нужно разбить на 5.1, причем не просто пустить смесь левого и правого на сабвуфер, но и отфильтровать частоты, оставив нижние сабу (в идеале еще бы верхние пустить на сателлиты), а также скопировать левый и правый в левый и правый задние.
Если смотрим фильм со звуковой дорожкой 5.1 - то ничего делать не нужно и просто воспроизводить как есть.

Поверьте, я уже гуглил на эту тему. решение со страницы ALSA Wiki привело вот к такому конфигу:
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
pcm.upmix_20to21 {
type route # as automatic routing does not work, use type route
slave.pcm lowpass_21to21_plug # 'route' outputs integer data, but float data is needed for ladspa.
# the additional plug will output float data
slave.channels 3
ttable {
0.0 1 # left channel
1.1 1 # right channel
0.2 0.5 # mix left and right ...
1.2 0.5 # ... channel for subwoofer
}
}

pcm.lowpass_21to21_plug {
type plug
slave.pcm "lowpass_21to21" # now, relay further to ladspa
}


pcm.lowpass_21to21 {
type ladspa
slave.pcm lowpass_float # ladspa will also output float data, but hw or route devices will need integer data
path "/usr/lib/ladspa"
channels 3
plugins {
0 {
id 1098 # Identity (Audio) (1098/identity_audio)
policy duplicate
input.bindings.0 "Input";
output.bindings.0 "Output";
}
1 {
id 1672 # 4 Pole Low-Pass Filter with Resonance (FCRCIA) (1672/lp4pole_fcrcia_oa)
policy none
input.bindings.2 "Input";
output.bindings.2 "Output";
input {
controls < 300 2 >
}
}
}
}

pcm.lowpass_float {
type lfloat # converts from float to integer data
slave {
pcm "surround51" # your slave device here
format "S16_LE" # the format ladspa uses
}
}

pcm.!default {
type route
slave.pcm upmix_20to21
slave.channels 2
ttable.0.0 1
ttable.1.1 1
}




Но aplay выдает ошибку:
aplay Music/Surround-SDL-testfiles/dolby-enlighten.wav
Playing WAVE 'Music/Surround-SDL-testfiles/dolby-enlighten.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Channels 6
ALSA lib pcm_params.c:2162:(snd1_pcm_hw_refine_slave) Slave PCM not usable
aplay: set_params:1037: Broken configuration for this PCM: no configurations available


На всякий случай релевантный вывод lspci
$ lspci -v
00:1b.0 Audio device: Intel Corporation N10/ICH 7 Family High Definition Audio Controller (rev 01)
Subsystem: Intel Corporation DeskTop Board D510MO
Flags: bus master, fast devsel, latency 0, IRQ 47
Memory at f0280000 (64-bit, non-prefetchable)
Capabilities:
Kernel driver in use: HDA Intel
Kernel modules: snd-hda-intel

05:00.0 Multimedia audio controller: Creative Labs CA0106 Soundblaster
Subsystem: Creative Labs SB0570
Flags: bus master, fast Back2Back, medium devsel, latency 32, IRQ 21
I/O ports at 1000
Capabilities:
Kernel driver in use: CA0106
Kernel modules: snd-ca0106


Что нужно поправить? В чем ошибка? Буду признателен за помощь в решении или даже ваш готовый конфиг


Тэги: 5.1 alsa ladspa вопрос звук
+ 2 -
Похожие Поделиться

Kraplax 13.04.2011 20:38 #
Заметил косяк в конфиге, поправил чтобы более соответствовал вики. Теперь выглядит так:
pcm.upmix_20to21 {
type route # as automatic routing does not work, use type route
slave.pcm lowpass_21to21_plug # 'route' outputs integer data, but float data is needed for ladspa.
# the additional plug will output float data
slave.channels 3
ttable {
0.0 1 # left channel
1.1 1 # right channel
0.2 0.5 # mix left and right ...
1.2 0.5 # ... channel for subwoofer
}
}

pcm.lowpass_21to21_plug {
type plug
slave.pcm "lowpass_21to21" # now, relay further to ladspa
}


pcm.lowpass_21to21 {
type ladspa
slave.pcm lowpass_float # ladspa will also output float data, but hw or route devices will need integer data
path "/usr/lib/ladspa"
channels 3
plugins {
0 {
id 1098 # Identity (Audio) (1098/identity_audio)
policy duplicate
input.bindings.0 "Input";
output.bindings.0 "Output";
}
1 {
id 1672 # 4 Pole Low-Pass Filter with Resonance (FCRCIA) (1672/lp4pole_fcrcia_oa)
policy none
input.bindings.2 "Input";
output.bindings.2 "Output";
input {
controls < 300 2 >
}
}
}
}

pcm.lowpass_float {
type lfloat # converts from float to integer data
slave {
pcm "upmix_21to51" # your slave device here
format "S16_LE" # the format ladspa uses
}
}

pcm.upmix_21to51 {
type plug
slave.pcm surround51
slave.channels 6
ttable {
0.0 1 # front left
1.1 1 # front right
0.2 1 # rear left
1.3 1 # rear right
0.4 0.5 # center
1.4 0.5 # center
2.5 1 # subwoofer
}
}

pcm.!default {
type route
slave.pcm upmix_20to21
slave.channels 2
ttable.0.0 1
ttable.1.1 1
}

Теперь aplay не выдает ошибку, НО! speaker-test -c6 воспроизводит каналы как попало, Амарок, судя по всему тоже, а cmus падает при воспроиведении многоканального .wav файла.
IT.Tux.Droid 13.04.2011 22:23 #
У меня сначала было доступно только "Analog Stereo Input/Output/Duplex" потом пересобрал alsa-driver-1.0.23 и стало так. Фильмы 5.1 нормально распределяются по каналам. А то, что стерео - каналы дублируются (и на саб тоже идет). Или я не понял вопроса?
Kraplax 14.04.2011 07:00 #
Дело в том, что моя звуковая карта не выдает мне таких удобств. По сути она выдает мне список выходов на ней - левый/правый, центр/саб, задние левый и правый. По отдельности. Нет ни одного подобного вашему устройсту. У вас нет случайно файлика ~/.asoundrc? или /etc/asound.rc?
IT.Tux.Droid 14.04.2011 12:05 #
"/etc/asound.rc" - нет, а "~/.asoundrc" - такой. Но я ничего сам не настраивал, только пересобрал alsa-driver-1.0.23 и все ок определилось.

PS: вот нарыл, может пригодиться ;)
Kraplax 15.04.2011 21:17 #
Проблема у меня как раз в том, что я не использую Пульс. У меня напрямую с железом альса. А поверх нее в кедах уже фонон на vlc и gstreamer (стоят оба варианта, но пользуюсь только первым). Собственно, в идеале вторая ссылка должна быть как раз моим решением, но почему-то не работает :(
Kraplax 15.04.2011 21:18 #
Кстати, решил вот пересобрать альсу - даже не смотря на то, что у меня и так самая свежая из репов арча - не вышло, ибо требует дерево сырья текущего ядра. Как-то это геморройно, имхо.
IT.Tux.Droid 15.04.2011 21:28 #
У меня тоже самая последняя версия альсы стоит, но после каждого обновления ядра бубунты - приходится заново пересобирать из исходников =(

PS: почему многие уже удалили и советуют всем удалить пульс? В чем профит?
Kraplax 16.04.2011 07:28 #
Не знаю почему советуют удалить - я в свое время снес только потому что через него было все как-то глючно и тормозно. Хотя, это было еще во времена kde4.0 и тогда еще не было толковых решений в отношении звука. Ну и вообще как-то хочется меньше прослоек в звуковой системе - чтобы с альсы напрямую, а не через еще один звуковой серверп.
SKAtina 15.04.2011 18:49 #
Если найдётся решение, то огромная просьба его озвучить тут или новым постом. У меня такая-же карта, 2.0 в 5.1 разбиваю при помощи pulseaudio, но хотелось бы иметь и фильтр низких частот который я не осилил. Под офтопиком с фильтром звук был гораздо лучше.
b.drakon 16.04.2011 10:52 #
Не вытерпел, зарегался помочь немного.Kraplax твой вывод lspci наглядно показал что видны две звукавухи, одна Intel Corporation N10/ICH 7 Family High Definition Audio Controller вторая Creative Labs CA0106 Soundblaster.Попробуй отключить встроенную интеловскую в биосе.Мне данный способ помог.
Kraplax 17.04.2011 08:53 #
Спасибо за совет. Отключил интелловскую звуковую - ситуация получалсь такая: cmus все так же падает при воспроизведении многоканальных wav и ogg файлов, амарок и vlc играют файлы нормально. Трудно сказать, играет ли Амарок или VLC действительные 5.1 если подсунуть звук 5.1 или все же они 2 из 6 каналов просто дублируют по тому же правилу, что и обычное стерео.
Я, конечно, не так часто пользуюсь скайпом - раз в пятилетку, но все же - у меня встроенный звук от интела как раз на него повешен. Буду дальше мучить, посмотрим что выйдет.