나는 놀고 있어요콘솔 사운드 비주얼라이저자체 ALSA 장치가 듣기를 원합니다. 편집 중입니다 ~/.asoundrc
. 난 내가 필요하다는 걸 알아multi
끼워 넣다사운드 데이터를 별도의 장치로 분할합니다. 하지만 제 사운드 카드에는 하드웨어 믹싱 기능이 없어서 dmix
소프트웨어 믹싱을 위한 플러그인도 필요합니다.
multi
a를 슬레이브로 추가하려고 하면 다음 오류 (개행)dmix
가 발생합니다 .
ALSA lib pcm_direct.c:1525:(_snd_pcm_direct_get_slave_ipc_offset)
Invalid type 'multi' for slave PCM
"가상 중개자"를 노예 plug
로 만들어서 가리켜 보았습니다.multi
dmix
저것, 하지만 여전히 같은 오류가 발생합니다. dmix
전체 체인을 원하는 plug
것 같습니다 hw
...
dmix
모듈을 종속 모듈로 추가하려고 하면 multi
다음과 같은 결과가 나타납니다.
Device or resource busy
예상한 대로 소프트웨어 믹싱은 파이프라인의 첫 번째 단계가 아니라 여러 프로그램이 사운드 카드에 접근하려고 시도하는 것입니다.
이 두 가지( 루프백 장치에 대한 dmix
ing 및 -ing)는 단독으로 잘 작동합니다.multi
왜 함께 일하고 함께 일하지 dmix
않습니까 multi
? 어떻게 해야 하나요?
~/.asoundrc
옵션이 제공되는 곳은 내 것입니다.슬레이브 PCM에 대해 잘못된 유형 'multi':
# thx
# http://wiki.ubuntuusers.de/.asoundrc
# http://alsa.opensrc.org/Dmix
# http://forums.linuxmint.com/viewtopic.php?f=196&t=94877
pcm.snd_card {
type hw
card 1
device 0
}
# allows multiple programs to output sound simultanously ("software mixing")
pcm.dmixer {
type dmix
ipc_key 1024
ipc_perm 0666 # allow other users
slave.pcm "out"
slave {
period_time 0
period_size 1024
buffer_size 4096
### if having problems
# rate 44100
### some sound cards need the exact data format
# format S32_LE
### Available formats: S8 U8 S16_LE S16_BE U16_LE U16_BE S24_LE S24_BE
### U24_LE U24_BE S32_LE S32_BE U32_LE U32_BE
### FLOAT_LE FLOAT_BE FLOAT64_LE FLOAT64_BE
### IEC958_SUBFRAME_LE IEC958_SUBFRAME_BE MU_LAW
### A_LAW IMA_ADPCM MPEG GSM
channels 2 # must match bindings
}
bindings {
0 0
1 1
}
}
# allows multiple programs to capture simultaneously
pcm.dsnooper {
type dsnoop
ipc_key 2048
ipc_perm 0666
slave.pcm "snd_card"
slave
{
period_time 0
period_size 1024
buffer_size 4096
channels 2
}
bindings {
0 0
1 1
}
}
pcm.!default {
type asym
playback.pcm "dmixer"
capture.pcm "dsnooper"
}
pcm.out {
type plug
slave.pcm {
type multi
slaves {
a { channels 2 pcm "snd_card" }
b { channels 2 pcm "hw:Loopback,0,0" }
}
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
]
}
# In case I ever want to use PulseAudio, for bluetooth speakers or such.
#pcm.!default {
# type pulse
#}
#ctl.!default {
# type pulse
#}
답변1
각 출력 장치에는 고유한 장치가 필요하다는 것이 밝혀졌습니다 dmix
.
[!default] → multi → dmix → hw [normal]
↳ dmix → hw [loopback]
루프백과 루프백 사이에 1초를 놓쳤기 dmix
때문에 평소 카드는 괜찮았지만 루프백 카드는 섞이지 않았습니다.multi
hw
매우 감사합니다C.L.인내심과 전문성.
기술적인 세부 사항은 다음과 같습니다 ~/.asoundrc
.
pcm.snd_card { # my usual sound card
type hw
card 2
}
ctl.!default { # default control; alsamixer and such will use this
type hw
card 2
}
# software mixer for sound card
pcm.dmixer {
type dmix
ipc_key 1024
ipc_perm 0666 # allow other users
slave.pcm "snd_card"
slave {
period_time 0
period_size 1024
buffer_size 4096
channels 2 # must match bindings
}
bindings {
0 0
1 1
}
}
# software mixer for loopback device
pcm.dmixerloop {
type dmix
ipc_key 2048
ipc_perm 0666 # allow other users
slave.pcm "hw:Loopback,0,0"
slave {
period_time 0
period_size 1024
buffer_size 4096
channels 2 # must match bindings
}
bindings {
0 0
1 1
}
}
# allows multiple programs to capture simultaneously
pcm.dsnooper {
type dsnoop
ipc_key 2048
ipc_perm 0666
slave.pcm "snd_card"
slave
{
period_time 0
period_size 1024
buffer_size 4096
channels 2
}
bindings {
0 0
1 1
}
}
pcm.!default {
type asym
playback.pcm "out"
capture.pcm "dsnooper"
}
# Multi, splitting onto usual card and loopback
pcm.out {
type plug
slave.pcm {
type multi
slaves {
a { channels 2 pcm "dmixer" }
b { channels 2 pcm "dmixerloop" }
}
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
]
}