HDMIとヘッドフォンジャックの両方に出力されるALSA仮想デバイスをどのように作成しますか?

HDMIとヘッドフォンジャックの両方に出力されるALSA仮想デバイスをどのように作成しますか?

私のプログラムにHDMIに出力するように指示できます。またはヘッドフォンジャックは素晴らしいですが、同時に両方のデバイスに出力されるasound.confで仮想デバイスを作成する方法はありますか?

この構成は動作に非常に近いですが、ヘッドフォンジャックにある種のパルスノイズを生成します。

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オーディオテストファイル!オーディオ変換! alsasinkデバイス="sirmix"

答え1

したがって、上記の設定とパイプラインは本質的に優れています。 ALSAフォーラムに行くと、上記のようなものをお勧めします。ただし、rate出力の一致は別途考慮する必要があります。

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

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

最終設定ファイルは次のとおりです。これには、個々の出力デバイスと共有上位デバイスのボリュームコントロール、および複数の再生プロセスにわたるミキシングが含まれます。

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"

これは、標準のDellデスクトップコンピュータがヘッドフォンジャックとDisplayPortの両方に出力できるようにするためです。

関連情報