alsa와의 첫 번째 구성 전쟁 이후(C.L.) 확인하다이 문제...
이제 나는 한 단계 더 나아가고 싶다.
내 설정에서 다중 채널 사운드를 재생할 수 있지만 이제는 동시에 재생해야 합니다!
dmix를 사용하면 도움이 될 것이라는 것을 알았지만 올바른 asound.conf 파일을 설정하는 데 여전히 문제가 있습니다. 다음은 제가 시도한 다양한 솔루션과 그에 따른 결과입니다.
초기(여러 채널을 사용하지만 동시에 사용하지는 않음) asound.conf:
pcm.!default {
type asym
playback.pcm {
type plug
slave.pcm "surround40:CA0106"
}
capture.pcm {
type plug
slave.pcm "hw:CA0106"
}
}
초기(동시 재생이지만 다중 채널은 아님, 여기서는 2채널만) asound.conf:
pcm.dmixed {
type dmix
ipc_key 1024
ipc_key_add_uid 0
slave.pcm "hw:CA0106"
}
pcm.duplex {
type asym
playback.pcm "dmixed"
}
# Instruct ALSA to use pcm.duplex as the default device
pcm.!default {
type plug
slave.pcm "duplex"
}
위 설정에 대한 참고 사항 이 asound.conf를 사용하면 동시에 2개의 사운드를 재생할 수 있지만 2개 채널에서만 재생할 수 있으며 다중 채널 기능이 손실됩니다...
또한 초기 asound.conf(위의 첫 번째 발췌)에서 작동했던 일부 사운드는 더 이상 이 asound.conf에서 작동하지 않습니다.실패 메시지입니다:
[root@server Sons]# aplay -N Apparition.wav
Playing WAVE 'Apparition.wav' : Signed 32 bit Little Endian, Rate 22050 Hz, Channels 4
aplay: set_params:1015: Unable to install hw params:
ACCESS: RW_INTERLEAVED
FORMAT: S32_LE
SUBFORMAT: STD
SAMPLE_BITS: 32
FRAME_BITS: 128
CHANNELS: 4
RATE: NONE
PERIOD_TIME: 125000
PERIOD_SIZE: NONE
PERIOD_BYTES: (44096 44112)
PERIODS: (1 2)
BUFFER_TIME: (249977 249978)
BUFFER_SIZE: 5512
BUFFER_BYTES: 88192
TICK_TIME: 0
유효한 소리 예는 다음과 같습니다.
[root@server Sons]# aplay -vN Disparition.wav
Playing WAVE 'Disparition.wav' : Signed 32 bit Little Endian, Rate 22254 Hz, Channels 4
Plug PCM: Route conversion PCM (sformat=S32_LE)
Transformation table:
0 <- 0
1 <- 1
Its setup is:
stream : PLAYBACK
access : RW_INTERLEAVED
format : S32_LE
subformat : STD
channels : 4
rate : 22254
exact rate : 22254 (22254/1)
msbits : 32
buffer_size : 5563
period_size : 2781
period_time : 125000
tstamp_mode : NONE
period_step : 1
avail_min : 2781
period_event : 0
start_threshold : 5563
stop_threshold : 5563
silence_threshold: 0
silence_size : 0
boundary : 729153536
Slave: Rate conversion PCM (48000, sformat=S16_LE)
Its setup is:
stream : PLAYBACK
access : MMAP_INTERLEAVED
format : S32_LE
subformat : STD
channels : 2
rate : 22254
exact rate : 22254 (22254/1)
msbits : 32
buffer_size : 5563
period_size : 2781
period_time : 125000
tstamp_mode : NONE
period_step : 1
avail_min : 2781
period_event : 0
start_threshold : 5563
stop_threshold : 5563
silence_threshold: 0
silence_size : 0
boundary : 729153536
Slave: Direct Stream Mixing PCM
Its setup is:
stream : PLAYBACK
access : MMAP_INTERLEAVED
format : S16_LE
subformat : STD
channels : 2
rate : 48000
exact rate : 48000 (48000/1)
msbits : 16
buffer_size : 12000
period_size : 6000
period_time : 125000
tstamp_mode : NONE
period_step : 1
avail_min : 6000
period_event : 0
start_threshold : 12000
stop_threshold : 12000
silence_threshold: 0
silence_size : 0
boundary : 1572864000
Hardware PCM card 0 'CA0106' device 0 subdevice 0
Its setup is:
stream : PLAYBACK
access : MMAP_INTERLEAVED
format : S16_LE
subformat : STD
channels : 2
rate : 48000
exact rate : 48000 (48000/1)
msbits : 16
buffer_size : 12000
period_size : 6000
period_time : 125000
tstamp_mode : ENABLE
period_step : 1
avail_min : 6000
period_event : 0
start_threshold : 1
stop_threshold : 1572864000
silence_threshold: 0
silence_size : 1572864000
boundary : 1572864000
"-N" 옵션을 사용하여 매우 짧은 사운드를 차례로 빠르게 재생하는데 이 동작을 제거할 수 없습니다.
간단히 말해서, 다중 채널 용량을 유지하면서 동시에 2개의 서로 다른 사운드를 재생할 수 있게 해주는 asound.conf 파일을 찾고 있습니다.
2개의 사운드 중 하나는 전면 스피커 2개를 사용하고 다른 하나는 후면 스피커 2개를 사용하며 둘 다 4개 채널을 사용하여 구축되었으며 그 중 2개(사운드에 따라 전면 또는 후면)는 공백입니다.
제가 조금 이해한 바에 따르면 먼저 "사용자 정의 장치"(플러그 유형 또는 다른 유형?)를 지정한 다음 변경하려고 할 때 "혼합"해야 합니다.Slave.pcm 하드웨어 주소내부에 -PCM.dmixed하지만 이로 인해 블록이 올바른 유형이 아니라는 오류가 발생합니다(또는 이와 유사한 것, 필요한 경우 정확한 메시지를 제공할 수 있습니다...).
hw:CA0106
도착하다
surround40:CA0106
이 문제를 해결하는 데 도움이 되는 정보와 아이디어를 환영합니다.
업데이트_1: CL.의 제안에 따라 다음과 같이 asound.conf를 만들었습니다.
pcm.dmixed {
type dmix
ipc_key 1024
ipc_key_add_uid 0
slave {
pcm "hw:0,0"
channels 4
}
}
pcm.dmixed2 {
type dmix
ipc_key 1025
ipc_key_add_uid 0
slave {
pcm "hw:0,1"
channels 4
}
}
pcm.quad {
type multi
slave.pcm "dmixed"
slave.pcm "dmixed2"
}
# Instruct ALSA to use pcm.quad as the default device
pcm.!default {
type plug
slave.pcm "quad"
}
하지만 여전히 작동하지 않습니다. 다음 오류로 인해 실패합니다.
ALSA lib pcm_multi.c:1042:(_snd_pcm_multi_open) Unknown field slave
슬레이브 정의가 누락된 것 같은데 어디에 있는지 찾을 수 없습니다...
업데이트_2: CL 덕분에 이것은 내 최신 "거의" 작업 파일입니다. 아직 사운드를 재생하는 두 부분이 있지만(자세한 내용은 설명 참조) 아무것도 없는 것보다는 낫습니다.
pcm.!default { # The "!" is used to overwrite an existing definition (pcm.default in this case ...)
type asym
playback.pcm {
type plug # plug is the "automatic conversion" plugin : convert data rate, channel and format on demand
slave.pcm "quad"
}
}
pcm.dmix_front { # Define the front speakers device : hw:0,0
type dmix
ipc_key 12345
ipc_key_add_uid 0
slave.pcm "hw:0,0"
}
pcm.dmix_rear { # Define the rear speakers device : hw:0,1
type dmix
ipc_key 67890
ipc_key_add_uid 0
slave.pcm "hw:0,1"
}
pcm.quad {
type multi
slaves {
a { pcm dmix_front channels 2 }
b { pcm dmix_rear channels 2 }
}
bindings [
{ slave a channel 0 }
{ slave a channel 1 }
{ slave b channel 0 }
{ slave b channel 1 }
]
}
결국 내 애플리케이션에서 플러그:dmix_front 및 플러그:dmix_front를 사용하게 되었습니다.
고마워요, CL. 귀하의 지원과 인내심에 감사드립니다.
답변1
~에 따르면문서, 다음과 같이 작동해야 합니다.
pcm.dmix_front {
type dmix
ipc_key 12345
ipc_key_add_uid 0
slave.pcm "hw:0,0"
}
pcm.dmix_rear {
type dmix
ipc_key 67890
ipc_key_add_uid 0
slave.pcm "hw:0,1"
}
pcm.quad {
type multi
slaves {
a { pcm dmix_front channels 2 }
b { pcm dmix_rear channels 2 }
}
bindings [
{ slave a channel 0 }
{ slave a channel 1 }
{ slave b channel 0 }
{ slave b channel 1 }
]
}