ループバックを使用して ALSA を設定し、オーディオジャックとプログラムの両方から同時にオーディオを出力する

ループバックを使用して ALSA を設定し、オーディオジャックとプログラムの両方から同時にオーディオを出力する

私のシステム [ubuntu 22.04] で ALSA とループバックを設定するのに苦労しています。ヘッドフォンとループバック ストリームを結合して、オーディオを再生するときに、オーディオ ジャックから聞こえるだけでなく、プログラムで使用できるループバックも聞こえるようにしたいと考えています。[周波数パターンを分析するため]

私は指示に従っていたhttps://github.com/maximtrp/spectrumLEDループバックカーネルsnd-aloopをロードした

aplay -l は以下を出力します。

$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Headphones [bcm2835 Headphones], device 0: bcm2835 Headphones [bcm2835 Headphones]
  Subdevices: 8/8
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
  Subdevice #4: subdevice #4
  Subdevice #5: subdevice #5
  Subdevice #6: subdevice #6
  Subdevice #7: subdevice #7
card 1: Loopback [Loopback], device 0: Loopback PCM [Loopback PCM]
  Subdevices: 8/8
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
  Subdevice #4: subdevice #4
  Subdevice #5: subdevice #5
  Subdevice #6: subdevice #6
  Subdevice #7: subdevice #7
card 1: Loopback [Loopback], device 1: Loopback PCM [Loopback PCM]
  Subdevices: 8/8
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
  Subdevice #4: subdevice #4
  Subdevice #5: subdevice #5
  Subdevice #6: subdevice #6
  Subdevice #7: subdevice #7

そして、次のように /etc に asound.conf を作成しようとしました。

pcm.!default {
    type plug
    playback.pcm "out"
    capture.pcm "loopin"
}
pcm.out {
    type plug
    slave.pcm {
        type multi
        slaves {
            a { channels 2 pcm "output" }
            b { channels 2 pcm "loopout" }
        }
        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 ]   # left  -> a.left,  b.left
        [ 0 1 0 1 ]   # right -> a.right, b.right
    ]
}

pcm.loopout {
    type dmix
    ipc_key 1025
    slave.pcm "hw:1,0,0"
    slave {
        period_time 0
        period_size 1024
        buffer_size 8192
        channels 2
    }
    bindings {
        0 0
        1 1
    }
}

pcm.loopin {
    type plug
    slave.pcm "hw:1,1,0"
}

pcm.output {
    type dmix
    ipc_key 1024
    slave.pcm "hw:0,0"
    slave {
        period_time 0
        period_size 1024
        buffer_size 8192
        channels 2
    }
    bindings {
        0 0
        1 1
    }
}

しかし、何をしてもループバックは再生と同時には機能しないようです。そのため、再生を聞くには

$ aplay ファイル.wav

[または]

$ mpv 音楽.mp3

ヘッドフォン ジャックからのオーディオ出力のみを提供し、周波数を分析するために使用しようとしているプログラムにストリームを送信しません...

唯一効果があると思われる方法は、

$ aplay file.wav -D hw:1,1

しかし、オーディオジャックからの出力は再生されません。

asound.conf に何か問題がありますか?

ネットでいろいろ調べてみましたが、うまくいくものは見つかりませんでした。

基本バージョンを試してみましたhttps://stackoverflow.com/questions/7002423/how-to-mix-multiple-pcm-streams-using-alsa

asound.conf

pcm.!default {
              type plug
              slave.pcm "dmixer"
}
pcm.dmixer  {
            type dmix
        ipc_key 1024
        slave {
          pcm "hw:1,0"
          period_time 0
              period_size 1024
          buffer_size 4096
          rate 44100
        }
        bindings {
          0 0
          1 1
        }
}
ctl.dmixer {
       type hw
       card 0
}

しかし、これもうまくいかないようです。

また、なぜループバックが 2 つあるのかについても非常に混乱しています。

誰かこれを明確にしてくれませんか?このdmixとmultiプラグインはどのように機能するのでしょうか?ドキュメントは非常にわかりにくいようです

関連情報