오디오 잭과 프로그램을 통해 동시에 오디오를 출력하도록 루프백을 사용하여 ALSA 구성

오디오 잭과 프로그램을 통해 동시에 오디오를 출력하도록 루프백을 사용하여 ALSA 구성

내 시스템(우분투 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
    }
}

그러나 내가 무엇을 하든 루프백은 재생과 동시에 작동하지 않는 것 같습니다. 그래서 나는 다음을 사용하여 재생을 들을 수 있습니다.

$ 재생 파일.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 및 멀티 플러그인은 어떻게 작동하나요? 문서가 너무 혼란스러워 보여요

관련 정보