История изменений
Исправление alegz, (текущая версия) :
Частоту карты надо переключать контролами карты, ALSA сама по себе про это ничего не знает. Все эти rate
в конфиге для всех плагинов, кроме преобразующих частоту, имеют значение селекторов («с другими не работай»).
куда прописать:
resample.quality 10
rate_converter samplerate_best
Никуда. defaults.pcm.rate_converter "speexrate_best"
хватит по уши.
В общем, вот мой конфиг. В нём используется hw:Loopback для последующего подключения к JACK (джековскую половину конфига я тут выкинул, чтоб не мешалась), вместо этого указывай hw для своей карты, и её параметры. (Блок loop_parm
тут только для удобства, эти значения можно прописать непосредственно в нужные места.)
defaults.pcm.rate_converter "speexrate_best"
#defaults.pcm.rate_converter "speexrate_medium"
#defaults.pcm.rate_converter "speexrate"
loop_parm {
format S32_LE
rate 96000
alsa_dev 0
playback_subdev 0
capture_subdev 1
}
pcm.!default duplex_loop
pcm.duplex_loop {
type asym
playback.pcm "plug:dmix_out"
capture.pcm {
type plug
slave.pcm dsnoop_in
# to avoid possible phase inversions with digital mics
route_policy copy
}
hint.device 0
}
pcm.dmix_out {
type dmix
ipc_key 49634
ipc_key_add_uid true
hw_ptr_alignment rounddown
slave {
# dmix allows a hw slave only
pcm loop_alsa_out
format { @func refer name loop_parm.format }
rate { @func refer name loop_parm.rate }
# wine alsa out looback sizes (960/3840)
period_time 10000
periods 4
}
}
pcm.dsnoop_in {
type dsnoop
ipc_key 18819
ipc_key_add_uid true
slave {
pcm loop_alsa_in
format { @func refer name loop_parm.format }
rate { @func refer name loop_parm.rate }
period_size 1536 # 16 ms
periods 4
}
}
pcm.loop_alsa_out {
type hw
card Loopback
device { @func refer name loop_parm.alsa_dev }
subdevice { @func refer name loop_parm.playback_subdev }
}
pcm.loop_alsa_in {
type hw
card Loopback
device { @func refer name loop_parm.alsa_dev }
subdevice { @func refer name loop_parm.capture_subdev }
}
А вообще для того, чтоб разобраться в алсовских конфигах, надо читать
- https://www.alsa-project.org/alsa-doc/alsa-lib/conf.html
- https://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html
- https://www.alsa-project.org/alsa-doc/alsa-lib/pcm_plugins.html
и прочее оттуда.
Исходная версия alegz, :
Частоту карты надо переключать контролами карты, ALSA сама по себе про это ничего не знает. Все эти rate
в конфиге для всех плагинов, кроме преобразующих частоту, имеют значение селекторов («с другими не работай»).
куда прописать:
resample.quality 10
rate_converter samplerate_best
Никуда. defaults.pcm.rate_converter "speexrate_best"
хватит по уши.
В общем, вот мой конфиг. В нём используется hw:Loopback для последующего подключения к JACK (джековскую половину конфига я тут выкинул, чтоб не мешалась), вместо этого указывай hw для своей карты, и её параметры. (Блок loop_parm
тут только для удобства, эти значения можно прописать непосредственно в нужные места.)
defaults.pcm.rate_converter "speexrate_best"
#defaults.pcm.rate_converter "speexrate_medium"
#defaults.pcm.rate_converter "speexrate"
loop_parm {
format S32_LE
rate 96000
alsa_dev 0
playback_subdev 0
capture_subdev 1
}
pcm.!default duplex_loop
pcm.duplex_loop {
type asym
playback.pcm "plug:dmix_out"
capture.pcm {
type plug
slave.pcm dsnoop_in
# to avoid possible phase inversions with digital mics
route_policy copy
}
hint.device 0
}
pcm.dmix_out {
type dmix
ipc_key 49634
ipc_key_add_uid true
hw_ptr_alignment rounddown
slave {
# dmix allows a hw slave only
pcm loop_alsa_out
format { @func refer name loop_parm.format }
rate { @func refer name loop_parm.rate }
# wine alsa out looback sizes (960/3840)
period_time 10000
periods 4
}
}
pcm.dsnoop_in {
type dsnoop
ipc_key 18819
ipc_key_add_uid true
slave {
pcm loop_alsa_in
format { @func refer name loop_parm.format }
rate { @func refer name loop_parm.rate }
period_size 1536 # 16 ms
periods 4
}
}
pcm.loop_alsa_out {
type hw
card Loopback
device { @func refer name loop_parm.alsa_dev }
subdevice { @func refer name loop_parm.playback_subdev }
}
pcm.loop_alsa_in {
type hw
card Loopback
device { @func refer name loop_parm.alsa_dev }
subdevice { @func refer name loop_parm.capture_subdev }
}