LINUX.ORG.RU

История изменений

Исправление 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 }
}

А вообще для того, чтоб разобраться в алсовских конфигах, надо читать

и прочее оттуда.

Исходная версия 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 }
}