Também duplica o som do alto-falante para HDMI

Também duplica o som do alto-falante para HDMI

Estou procurando ajuda ou conselho para configurar meu áudio em minha máquina Linux.

Gostaria de duplicar o áudio que sai do alto-falante para a saída HDMI.

Por favor, veja as configurações que tenho:

aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: HDMI [HDA ATI HDMI], device 3: Generic Digital [Generic Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: Generic [HD-Audio Generic], device 0: ALC662 rev3 Analog [ALC662 rev3 Analog]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 1: Generic [HD-Audio Generic], device 1: ALC662 rev3 Digital [ALC662 rev3 Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

# aplay -L
null
    Discard all samples (playback) or generate zero samples (capture)
hdmi:CARD=HDMI,DEV=0
    HDA ATI HDMI, Generic Digital
    HDMI Audio Output
sysdefault:CARD=Generic
    HD-Audio Generic, ALC662 rev3 Analog
    Default Audio Device
front:CARD=Generic,DEV=0
    HD-Audio Generic, ALC662 rev3 Analog
    Front speakers
surround21:CARD=Generic,DEV=0
    HD-Audio Generic, ALC662 rev3 Analog
    2.1 Surround output to Front and Subwoofer speakers
surround40:CARD=Generic,DEV=0
    HD-Audio Generic, ALC662 rev3 Analog
    4.0 Surround output to Front and Rear speakers
surround41:CARD=Generic,DEV=0
    HD-Audio Generic, ALC662 rev3 Analog
    4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=Generic,DEV=0
    HD-Audio Generic, ALC662 rev3 Analog
    5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=Generic,DEV=0
    HD-Audio Generic, ALC662 rev3 Analog
    5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=Generic,DEV=0
    HD-Audio Generic, ALC662 rev3 Analog
    7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
iec958:CARD=Generic,DEV=0
    HD-Audio Generic, ALC662 rev3 Digital
    IEC958 (S/PDIF) Digital Audio Output

e a

asound.conf

pcm.!default{
 type plug
 slave.pcm "speakerphat"
}

ctl.!default {
 type hw card 1
}

pcm.speakerphat {
  type softvol
  slave.pcm "plughw:1"
  control.name "Master"
  control.card 1
}

O som foi ativado para os alto-falantes:

amixer -q sset 'Master' unmute
amixer -q sset 'IEC958' unmute

Responder1

Esta resposta é uma possível resposta funcional no contexto de um sistema de som somente para alsa.
Todos os trechos de código a seguir devem ser catenados e substituir suas definições asound.conf existentes.
Tudo isto poderia ser muito mais curto através de definições em cascata. No entanto, oMagiaseria mais difícil de entender e a depuração ainda mais… ;-)


Vamos começar a definir o conversor de taxa a ser usado em caso de necessidade de reamostragem (reamostragens dmix quando necessário)

defaults.pcm.rate_converter "speexrate_best"

Em seguida, defina principalmente aliases para dispositivos.não bloqueadopermitindo que vários aplicativos abram o dispositivo associado simultaneamente.

pcm.ALC662{
        type hw
        card Generic
        device 1
        subdevice 0
        nonblock true}
ctl.ALC662{
        type hw
        card Generic}
pcm.ATI{
        type hw
        card HDMI
        device 0
        subdevice 0
        nonblock true}
ctl.ATI{
        type hw
        card HDMI}

Vamos agora prosseguir comdmixdefinição de plugin (permitindo mixagem de múltiplas fontes de som e reamostragem quando necessário). Um para cada dispositivo de saída de som.
Note ochave_ipc(identificador de memória compartilhada). Escolha qualquer número exclusivo. (verifique o primeiro disparo sudo ipcs -ma)
Observe também que ainda documentado conforme necessário, acabei de perceber agora no meu sistema que especificar o ipc_key é simplesmente inútil. Provavelmente alguma atualização que eliminou o uso de ipcs do tipo sysV nas minhas costas…?
Sinta-se também à vontade para se adaptarperíodo_tamanho&tamanho do bufferde acordo com seus requisitos de latência e capacidades do sistema…

pcm.analog {
    type dmix
    ipc_key 219345
    slave{
        pcm ALC662
        format S32_LE
        period_size 1024
        buffer_size 4096 }}

pcm.hdmi {
    type dmix
    ipc_key 219346
    slave{
        pcm ATI
        format S32_LE
        period_size 1024
        buffer_size 4096 }}

Agora vem oMagia: Combinando vários fluxos (estéreo vg 2 canais) em um (estéreo vg 2 canais) graças aomultiplugar :

pcm.analogHDMI {
    type multi
    slaves.a.pcm "analog"
    slaves.a.channels 2
    slaves.b.pcm "hdmi"
    slaves.b.channels 2

    bindings.0.slave a
    bindings.0.channel 0
    bindings.1.slave a
    bindings.1.channel 1
    bindings.2.slave b
    bindings.2.channel 0
    bindings.3.slave b
    bindings.3.channel 1}

É isso ? Hmmm, bem… ainda não:

Observe que o pcm resultante não está no formato intercalado, mas no formato “complexo”. Conseqüentemente, não é acessível por aplicativos que podem lidar apenas com o formato intercalado (ou não intercalado). Nesse caso, envolva este PCM com rota ou plug-in.

WILCO, vamosrotacanais (volume origem.destino):

pcm.2in1 {
    type route
    slave.pcm "analogHDMI"   
    ttable.0.0 1
    ttable.1.1 1
    ttable.0.2 1
    ttable.1.3 1}

Claro, se você quiser que esta seja a saída padrão do alsa, você precisará adicionar:

pcm.!default {
    type plug
    slave.pcm "2in1"}

Para maisreferência.

informação relacionada