2011-08-09 13 views
5

tengo dos corrientes diferentes de muestras PCM. ¿Es posible mezclarlos de alguna manera y jugar con ALSA en el mismo dispositivo de salida?Cómo mezclar múltiples flujos PCM usando ALSA

leí que puede ser posible usar el mezclador, pero me resulta difícil de entender dada la falta de documentación. ¿Podría alguien proporcionar más información de algún tipo sobre cómo se puede implementar esto (si es que realmente lo es)?

Gracias!

Respuesta

3

Para ello, compruebe si tiene .asoundrc presentar nuestro sistema. Si no está allí, cree una y puede colocarla en su carpeta/home. Actualícela con estos valores:

pcm.!default { 
       type plug 
       slave.pcm "dmixer" 
} 
pcm.dmixer { 
      type dmix 
     ipc_key 1024 
     slave { 
      pcm "hw:1,0" 
      period_time 0 
       period_size 1024 
      buffer_size 4096 
      rate 44100 
     } 
     bindings { 
      0 0 
      1 1 
     } 
} 
ctl.dmixer { 
     type hw 
     card 0 
} 

Uso $aplay -l para obtener una lista de los dispositivos de su sistema. El hw: X, Y proviene de esta asignación de su hardware, donde X es el número de la tarjeta, mientras que Y es el número del dispositivo.

Ahora, abrir el terminal, y juega su primer flujo de PCM con: $aplay -f cd pcm_sound1.wav Y en otra pestaña, reproducir su segunda corriente PCM: $aplay -f cd -D default pcm_sound2.wav

Será mezclar sus dos flujos de datos PCM.

Cheers,

+0

Esta respuesta es muy útil, pero estoy un poco confundido y agradecería más explicaciones. ¿Por qué el segundo comando 'aplay' tiene' -D default', pero el primero no? ¿Cuál es el significado de la sección 'bindings', y para qué sirve' ctl.dmixer'? ¿Es posible mezclar más de dos transmisiones, p. si ejecuto tres comandos 'aplay' simultáneamente? ¿Por qué el dispositivo "predeterminado" de tipo 'plug' apunta a' dmixer', podríamos cambiar el nombre 'pcm.dmixer' por' pcm.! Default' y evitar la indirección? – Metamorphic

1

no estoy seguro si esto merece una respuesta por separado. Utilicé la respuesta de HSC y los ejemplos en "ALSA Wiki - The Dmix Howto". La documentación de Dmix es de hecho un poco frustrante.

Aquí es un ejemplo ~/.asoundrc que funciona para mí. La sección de "enlaces" no es necesaria, pero el CÓMO dice que ayuda a que "los chips multicanal funcionen más rápido" (¿no estoy seguro si me importa?). Si ato "0 1 1 0", cambia los canales derecho/izquierdo. Si enlace "0 1 1 1", me sale basura en el oído derecho ... Aparentemente, ipc_key es un parámetro obligatorio; Solo elegí un entero al azar.

# example 1 
pcm.hw3mix { 
    type dmix 
    ipc_key 1939 # must be unique 
    slave { 
     pcm "hw:3" 
     period_time 0 
     period_size 1024 # must be power of 2 
     buffer_size 4096 
     rate 44100 
    } 
    bindings { 
     0 0 
     1 1 
    } 
} 

pcm.!default hw3mix 

La última línea hace que mi nueva hw3mix el dispositivo por defecto.

Simplifiqué lo anterior a:

# example 2 
pcm.hw3mix { 
    type dmix 
    ipc_key 1939 # must be unique 
    slave { pcm "hw:3" } 
} 

pcm.!default hw3mix 

y parece funcionar muy bien.

Como se sugiere en el enlace de ALSA Wiki anterior, puedo simplificar aún más a:

# example 3 
pcm.dsp0 { 
    type plug 
    slave.pcm "dmix" 
} 

pcm.!default dsp0 

y esto puede ser aún más simplificada a:

# example 4 
pcm.!default { 
    type plug 
    slave.pcm "dmix" 
} 

o incluso:

# example 5 
pcm.!default plug:dmix 

sin embargo, los últimos tres ejemplos no me permiten especificar los parámetros para el plugin Dmix. Quería crear un dispositivo que mezcle varias transmisiones a "hw: 3". Creo que esto debe especificarse como un parámetro para Dmix ya que no es el dispositivo predeterminado, así que fui con mi segundo ejemplo anterior.En mi actual ~/.asoundrc, también hay un bloque para "hw: 0,0" llamado "hw0mix", así que al cambiar los comentarios en las siguientes líneas, puedo cambiar la salida de las secuencias (recién creadas) entre mis auriculares y altavoces:

#pcm.!default hw0mix 
pcm.!default hw3mix 

NB: lo anterior se refiere a dispositivos como "hw: 0,0" y "HW: 3" ... fue un poco difícil de encontrar la manera de asegurar los números de dispositivo estable para mis diferentes de sonido USB dispositivos, encontré las instrucciones here en "Ordenar varias tarjetas del mismo tipo". La configuración consta de una línea en un archivo en /etc/modprobe.d/. Así es como obtengo números como 0 y 3 para referirme a los mismos dispositivos durante los reinicios.

Cuestiones relacionadas