如何使用 aplay 在 4.0 環繞系統上同時播放聲音
在我與 alsa 的第一次配置戰(在CL的幫助下獲勝)之後,檢查這個問題……
我現在想更進一步:
我可以在我的設置上播放多聲道聲音,但我現在需要同時播放它們!
我發現使用 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”選項讓一些非常短的聲音一個接一個地快速播放,我無法擺脫這個動作。
長話短說,我正在尋找一個 asound.conf 文件,它可以讓我保持多聲道容量,但也可以讓我同時播放 2 種不同的聲音。
在 2 種聲音中,一種使用 2 個前置揚聲器,另一種使用 2 個後置揚聲器,兩種聲音都是使用 4 通道建構的,其中 2 通道(前或後取決於聲音)空白。
據我所知,我需要先指定一個“自定義設備”(插頭類型或任何其他類型?)然後“dmix”它們,因為我試圖更改pcm.dmixed塊內的slave.pcm 硬體地址但是這個給我一個錯誤,指出此塊的類型不正確(或類似的東西,如果需要,我可以提供確切的消息……)
hw:CA0106
到
surround40:CA0106
歡迎任何資訊和想法來幫助我解決這個問題。
UPDATE_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
看起來我錯過了從屬定義,但我找不到在哪裡……
UPDATE_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 } ] }
我終於從我的應用程序中使用了 plug:dmix_front 和 plug:dmix_front。
謝謝你。感謝您的支持和耐心。
根據文件,這樣的事情應該可以工作:
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 } ] }