7.1 사운드 카드에는 8개의 독립적인 모노 채널이 있지만 동시에 8개 채널에서 사운드를 재생할 수 있습니다.

7.1 사운드 카드에는 8개의 독립적인 모노 채널이 있지만 동시에 8개 채널에서 사운드를 재생할 수 있습니다.

Raspberry Pi 3 및 USB 7.1 채널 사운드 카드를 사용하는 개인 사운드 프로젝트의 경우 사운드 카드를 8개의 독립 모노 채널로 사용하여 특정 채널에서 다양한 모노 사운드를 재생해야 합니다. 때로는 두 개 이상의 모노 사운드가 특정 채널에서 동시에(혼합) 재생되는 경우가 있습니다. 마침내 구성 파일 .asoundrc에서 이 작업을 수행하는 방법을 찾았습니다 .

pcm_slave.usbsoundcard {
pcm "hw:1"
rate 44100
channels 8
periods 128
period_time 0
period_size 1024
buffer_time 0
buffer_size 4096
}

pcm.ch1 {
type dmix
slave usbsoundcard
ipc_key 1001
bindings [ 0 ]
}

pcm.ch2 {
type dmix
slave usbsoundcard
ipc_key 1001
bindings [ 1 ]
}

pcm.ch3 {
type dmix
slave usbsoundcard
ipc_key 1001
bindings [ 6 ]
}

pcm.ch4 {
type dmix
slave usbsoundcard
ipc_key 1001
bindings [ 7 ]
}

pcm.ch5 {
type dmix
slave usbsoundcard
ipc_key 1001
bindings [ 2 ]
}

pcm.ch6 {
type dmix
slave usbsoundcard
ipc_key 1001
bindings [ 3 ]
}

pcm.ch7 {
type dmix
slave usbsoundcard
ipc_key 1001
bindings [ 4 ]
}

pcm.ch8 {
type dmix
slave usbsoundcard
ipc_key 1001
bindings [ 5 ]
}

이 구성 파일을 사용하면 원하는 채널에서 원하는 것을 재생할 수 있으며, 필요한 경우 다음과 같은 명령을 사용하여 각 독립 채널에서 동시에 여러 사운드를 재생할 수 있습니다.

aplay -D plug:ch3 sound1_mono.wav &
aplay -D plug:ch3 sound2_mono.wav &  # sound 2 mixed with sound 1 on channel 3
aplay -D plug:ch7 sound3_mono.wav &
aplay -D plug:ch8 sound4_mono.wav &

등...

하지만 나는 또 다른 가능성을 추가하고 싶다. 8개의 모노 채널 모두에서 재생되는 사운드를 라우팅해야 하는 "all"이라는 가상 채널을 추가하고 싶습니다. 최종 목표는 Asterisk pbx 시스템을 이 채널을 사용하는 인터콤으로 구성하는 것입니다. 호출되면 Asterisk가 자동으로 응답하고 음성이 사운드 카드의 8개 채널 모두에서 라우팅(혼합)되기를 원합니다.

나는 순진하게 시도했다:

pcm.all {
type dmix
slave usbsoundcard
ipc_key 1001
bindings [ 0 1 2 3 4 5 6 7 ]
}

그러나 이것은 작동하지 않습니다. 테스트를 위해 "모든" 가상 채널에서 모노 사운드도 재생했습니다. 다음과 같이 하면 aplay -Dplug:all sound5_mono.wav 사운드가 모든 채널 ch1...ch8에서 올바르게 재생되고 다른 wav 파일은 재생되지 않습니다. 하지만 이미 사운드가 재생되고 있는 채널에서는 sound5_mono가 들리지 않습니다. wav 그런데 딱딱거리는 소리가 나네요

.asoundrc 파일을 작동시키려면 어떻게 작성해야 합니까? 내가 하고 싶은 것은 일종의 오디오 멀티룸입니다. 서로 다른 방에서 각 채널 ch1....ch8의 서로 다른 모노 파일을 재생하고 SIP 전화를 사용하여 라즈베리 파이에 전화하면 모든 방에서 음성을 재생(믹스)합니다.

답변1

마지막 제안이 가상 채널 "모두"에 적용되지 않더라도 많은 도움이 되었으며 동일한 USB 사운드 카드를 사용하여 내 컴퓨터에서 완벽하게 작동하는 것을 시도했습니다.

구성 파일은 다음과 같습니다.

pcm.dmix8 {
    type dmix
    ipc_key 1001
    slave {
        pcm "hw:2"
        rate 44100
        channels 8
        period_size 1024
        buffer_size 32768
    } }

pcm.ch1 {
    type plug
    slave.pcm dmix8
    ttable.0.0 1 }

pcm.ch2 {
    type plug
    slave.pcm dmix8
    ttable.0.1 1 }

pcm.ch3 {
    type plug
    slave.pcm dmix8
    ttable.0.6 1 }

pcm.ch4 {
    type plug
    slave.pcm dmix8
    ttable.0.7 1 }

pcm.ch5 {
    type plug
    slave.pcm dmix8
    ttable.0.4 1 }

pcm.ch6 {
    type plug
    slave.pcm dmix8
    ttable.0.5 1 }

pcm.ch7 {
    type plug
    slave.pcm dmix8
    ttable.0.6 1 }

pcm.ch8 {
    type plug
    slave.pcm dmix8
    ttable.0.7 1 }

pcm.all {
    type plug
    slave.pcm dmix8
    ttable.0.0 1
    ttable.0.1 1
    ttable.0.2 1
    ttable.0.3 1
    ttable.0.4 1
    ttable.0.5 1
    ttable.0.6 1
    ttable.0.7 1 }

이 구성 파일을 사용하면 모든 것이 예상대로 작동합니다! Asterisk는 "모든" 채널을 로컬 소프트폰으로 사용하며, ch1...ch8은 8개의 다른 방에서 다양한 모노 사운드를 재생합니다. Asterisk를 호출하면 자동으로 응답이 되고, 방에 있는 기존 소리와 8HP의 소리가 섞여서 들리네요 :)

도와주셔서 감사합니다!

다음으로 내 Raspberry Pi 3 보드에서 시도해 보았으나 다른 동작을 할 이유가 없었습니다.

답변2

dmix동일한 정의에 대해 다른 정의를 사용할 수 있는지 잘 모르겠습니다 ipc_key. 일반 dmix장치를 사용하는 것이 더 나은 아이디어일 수 있습니다.

모든 채널에서 스테레오 파일을 재생하려면 먼저 모노로 변환해야 합니다.

pcm.dmix8 {
    type dmix
    slave {
        pcm "hw:1"
        rate 44100
        channels 8
        period_size 1024
        buffer_size 32768
    }
}

pcm.ch1 {
    type plug
    slave.pcm dmix8
    ttable.0.0 1
}
pcm.ch2 {
    type plug
    slave.pcm dmix8
    ttable.0.1 1
}
# and so on with "ttable.0.x 1"

pcm.all {
    type plug
    slave {
        pcm {
            type route
            slave.pcm dmix8
            ttable [ [ 1 1 1 1 1 1 1 1 ] ]
        }
        channels 1
    }
}

관련 정보