8 canais mono independente na placa de som 7.1, mas possibilidade de reproduzir som em 8 canais simultaneamente

1

Para um projeto de som pessoal com um raspberry PI 3 e uma placa de som USB 7.1, eu preciso usar a placa de som como 8 canais mono independentes, para reproduzir diferentes sons mono no canal específico. E em algum momento 2 ou mais sons mono podem ser reproduzidos (misturados) ao mesmo tempo em um determinado canal. Eu finalmente encontrei o caminho para fazer isso no meu arquivo de configuração .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 ]
}

Com este arquivo de configuração, posso reproduzir o que quiser no canal que quero e reproduzir vários sons ao mesmo tempo em cada canal independente, se necessário, com comandos como este:

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 &

etc ...

Mas quero adicionar outra possibilidade. Eu quero adicionar um canal virtual chamado "all", que deve rotear o som reproduzido em todos os 8 canais mono. O objetivo final é configurar o sistema Asterisk pbx configurado como intercomunicador para usar este canal: quando chamado, o Asterisk irá autoanswer, e eu quero voz roteada (mista) em todos os 8 canais da placa de som.

Eu ingenuamente tentei isso:

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

Mas isso não funciona. Para testar também reproduzo um som mono no canal virtual 'all'. Se eu faço: aplay -D plug: all sound5_mono.wav O som é tocado corretamente em todos os canais ch1 ... ch8 onde nenhum outro arquivo wav é tocado. Mas no canal em que um som já foi tocado, não consegue ouvir o som 5_mono. wav, mas eu tenho estalidos noices

Como posso escrever meu. arquivo asoundrc para que ele funcione? O que eu quero fazer é um tipo de multiroom de áudio: reproduzir diferentes arquivos mono em cada canal ch1 .... ch8 em diferentes salas, e quando eu chamo a framboesa com um telefone SIP, a voz é tocada (misturada) em todos os quartos.

    
por Cyril Haenel 17.07.2016 / 01:29

2 respostas

0

Não tenho certeza se você pode usar diferentes definições dmix com o mesmo ipc_key ; pode ser uma boa ideia usar um dispositivo dmix comum.

Para poder reproduzir um arquivo stero em todos os canais, você deve convertê-lo para mono primeiro.

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
    }
}
    
por 18.07.2016 / 09:48
0

mesmo que sua última proposta não funcione para o canal virtual "all", isso me ajudou muito, e eu tentei algo que funciona perfeitamente no meu computador, com a mesma placa de som USB.

Aqui está o arquivo de configuração:

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 }

Com este arquivo de configuração, tudo funciona como esperado !! O canal "all" é usado pelo Asterisk como um softphone local, e ch1 ... ch8 são usados para reproduzir diferentes sons mono em 8 salas diferentes. E quando eu chamo Asterisk, ele responde automaticamente e eu posso ouvir a voz nos 8 HP, misturada com o som existente da sala:)

Muito obrigado pela sua ajuda!

Próximo passo, experimente minha placa PI 3 de framboesa, mas não há motivos para ter um comportamento diferente.

    
por 19.07.2016 / 00:52

Tags