Alsa resampling

3

Minha configuração é o Vortexbox 2.3, uma distro de música Linux baseada no Fedora. Eu tenho uma placa de som multicanal, USBStreamer da miniDSP. Eu configurei dispositivos estéreo separados em asound.conf , para que eu possa ter várias instâncias do squeezelite sendo reproduzidas para separar os canais de saída. Porque o seu é apenas um relógio para todos os jogadores, o áudio precisa estar na mesma taxa de amostragem. A maioria das minhas músicas é de 44.1kHz, mas algumas de 48kHz, então eu preciso de alguma reamostragem quando um arquivo de 48kHz é reproduzido. Eu tenho esse trabalho através de asound.conf . No entanto, parece ALSA está reamostrando tudo para 44.1kHz, mesmo que seja a taxa de amostragem original, não apenas o reprodutor produzindo 48kHz como eu esperava. Eu gostaria que os arquivos nativos 44.1 fossem reproduzidos sem reamostragem. Eu gostaria de lidar com a taxa de amostragem no ALSA em vez do player para que eu possa adicionar outros jogadores também.

Existe uma maneira de fazer com que o ALSA só modifique de novo quando a taxa não corresponde?

#
# Place your global alsa-lib configuration here...
#

#defaults.pcm.rate_converter "speexrate"

pcm_slave.miniDSP {
# pcm "hw:0,0"
pcm "hw:USBStreamer"
rate 44100        # fixed, because all dshare devices must use the same samplerate. Could use rate unchanged but not for here.
format S32_LE
channels 10
}

pcm.stereo_1_raw {
type plug
slave.pcm {
    type dshare
    ipc_key 662662
ipc_key_add_uid true
    slave miniDSP
    bindings [ 0 1 ]
}
}

pcm.stereo_2_raw {
type plug
slave.pcm {
    type dshare
    ipc_key 662662
ipc_key_add_uid true
    slave miniDSP
    bindings [ 2 3 ]
}
}

pcm.stereo_3_raw {
type plug
slave.pcm {
    type dshare
    ipc_key 662662
ipc_key_add_uid true
    slave miniDSP
    bindings [ 4 5 ]
}
}

pcm.stereo_4_raw {
type plug
slave.pcm {
    type dshare
    ipc_key 662662
ipc_key_add_uid true
    slave miniDSP
    bindings [ 6 7 ]
}
}

pcm.stereo_1_output {
    type rate
    slave {
            pcm stereo_1_raw
            rate 44100
    }
    #converter "speexrate_medium" This doesn't work for 4 channels.
converter "samplerate"
}

pcm.stereo_2_output {
    type rate
    slave {
            pcm stereo_2_raw
            rate 44100
    }
    converter "speexrate_medium"
}

pcm.stereo_3_output {
    type rate
    slave {
            pcm stereo_3_raw
            rate 44100
    }
#converter "speexrate_medium"
converter "samplerate"
}

pcm.stereo_4_output {
    type rate
    slave {
            pcm stereo_4_raw
            rate 44100
    }
    #converter "speexrate_medium"
converter "samplerate"
}
    
por Simon 01.11.2014 / 10:23

1 resposta

1

O plug-in plug insere um plug-in rate somente quando necessário, mas quando você insere um rate plug-in manualmente, é isso que você obtém.

Apenas elimine os plug-ins rate ; você pode usar os dispositivos stereo_x_raw diretamente. (Para o algoritmo de reamostragem, você pode confiar na configuração padrão.)

    
por 01.11.2014 / 13:01