Como eu crio um dispositivo virtual ALSA que gera saídas para HDMI e fone de ouvido?

3

Eu posso dizer aos meus programas para enviar para o HDMI ou o conector de fone de ouvido, mas existe uma maneira de criar um dispositivo virtual no asound.conf que produza ambos simultaneamente?

Essa configuração chega muito perto de funcionar, mas cria uma espécie de ruído pulsante na entrada de fone de ouvido.

pcm.internal {
  type hw
  card 1
  device 0
}

pcm.hdmi_hw {
  type hw
  card 0
  device 7
}

pcm.hdmi_complete {
  type softvol
  slave.pcm hdmi_hw
  control.name hdmi_volume
  control.card 1
}

pcm.sirmix {
    type plug
    slave.pcm {
        type multi
        slaves {
            a { channels 2 pcm "internal" }
            b { channels 2 pcm "hdmi_complete" }
        }
        bindings {
            0 { slave a channel 0 }
            1 { slave a channel 1 }
            2 { slave b channel 0 }
            3 { slave b channel 1 }
        }

    }
    ttable [
        [ 1 0 1 0 ]
        [ 0 1 0 1 ]
    ]
}

gst-launch-1.0 audiotestsrc ! audioconvert ! alsasink device="sirmix"

    
por mpr 22.09.2015 / 16:22

1 resposta

2

Portanto, aparentemente as configurações e o pipeline acima são essencialmente bons, e se você for aos fóruns da ALSA, eles recomendarão algo como o acima, mas um rate correspondente em suas saídas é algo que deve ser considerado além disso. / p>

pcm.internal {
  type hw
  card 1
  device 0
  rate 48000
}

pcm.hdmi_hw {
  type hw
  card 0
  device 7
  rate 48000
}

Meu arquivo de configuração final, que inclui controles de volume para os dispositivos de saída individuais, assim como o pai compartilhado e a mistura entre vários processos de reprodução, é o seguinte:

pcm.m_headphone_mixed {
 type dmix
 ipc_key 595900
 ipc_perm 0666
 slave {
  pcm "hw:1,0" 
  rate 48000
  period_time 0
  period_size 1024
  buffer_size 4096
  format S16_LE
 }
 bindings {
  0 0
  1 1  
 }
}

pcm.m_headphone_rate_adjusted {
 type rate
 slave {
  pcm "m_headphone_mixed"
  rate 48000
 }
}

pcm.m_headphone {
 type softvol
 slave.pcm m_headphone_rate_adjusted
 control.name m_headphone_volume
 control.card 1
}

pcm.m_hdmi_mixed {
 type dmix
 ipc_key 595901
 ipc_perm 0666
 slave {
  pcm "hw:0,7"
  rate 48000
  period_time 0
  period_size 1024
  buffer_size 4096
  format S16_LE
  channels 2
 }
 bindings {
  0 0 # channel 0 -> channel 0 
  1 1
 }
}

pcm.m_hdmi {
 type softvol
 slave.pcm "m_hdmi_mixed"
 control.name m_hdmi_volume
 control.card 1 
}

pcm.m_all_base {
 type plug

 slave.pcm {
   type multi
   slaves {
       a { channels 2 pcm "m_hdmi" }
       b { channels 2 pcm "m_headphone" }
   }
   bindings [
       { slave a channel 0 }
       { slave a channel 1 }
       { slave b channel 0 }
       { slave b channel 1 }
   ]
 } 
}

pcm.m_all_routed {
type route
 slave.pcm "m_all_base"
 slave.channels 4

 ttable [
  [ 1 0 1 0 ] # route left to channels 0,2
  [ 0 1 0 1 ] # route right to channels 1,3
 ]
}

pcm.m_all {
 type softvol;
 control.name m_all_volume;
 control.card 1
 slave.pcm "m_all_routed"
}

pcm.!default "m_all"

Isso foi feito para que um computador de mesa Dell padrão emitisse simultaneamente para o conector de fone de ouvido e o DisplayPort.

    
por 23.09.2015 / 15:35