Как одновременно воспроизводить звуки в системе объемного звучания 4.0 с использованием aplay

После моей первой конфигурации война против 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 каналов с двумя каналами (спереди или сзади в зависимости от звука).

Из моего небольшого понимания мне нужно сначала указать «настраиваемое устройство» (тип штекера или любой другой тип?), А затем «dmix», потому что я попытался изменить аппаратный адрес slave.pcm внутри блока pcm.dmixed, но это дает мне ошибку, заявляя, что тип не подходит для этого блока (или что-то подобное, я могу предоставить точное сообщение, если необходимо …)

 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., У меня все еще есть звук, воспроизводимый в 2 частях (см. Комментарии для получения дополнительной информации), но он все же лучше, чем ничего.

 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 и подключился: dmix_front из моего приложения.

Спасибо CL. за вашу любезную поддержку и терпение.

  • t: Alsa - почему он не работает на Linux ARM?
  • Звуковой сигнал командной строки для одновременного воспроизведения и записи
  • Мое устройство вмешивается в звук?
  • Как установить выходной порт на звуковой карте?
  • какое имя устройства я должен предоставить в snd_pcm_open, кроме "default"
  • Запись петли не работает с alsa
  • USB Audio обнаружен ALSA, но не JACK?
  • Как получить CoreAudio от Mac до Linux / Unix?
  • One Solution collect form web for “Как одновременно воспроизводить звуки в системе объемного звучания 4.0 с использованием aplay”

    Согласно документации , что-то вроде этого должно работать:

     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 } ] } 
    Linux и Unix - лучшая ОС в мире.