JACK Audio Connection Kit (Español)
- JACK Audio Connection Kit (o JACK; un acrónimo recursivo) es un demonio de servidores de sonido profesional que proporciona conexiones de baja latencia en tiempo real para audio y datos MIDI entre aplicaciones que implementan su API.
Instalación
Para que JACK funcione correctamente, su usuario debe ser agregado al grupo realtime
para acceder a ulimits más altos definidos en /etc/security/limits.d/99-realtime-privileges.conf
(proporcionado por el paquete realtime-privileges package), que es necesario para el procesamiento de audio en tiempo real.
Hay dos implementaciones de JACK, consulte esta comparación para ver la diferencia entre las dos. En resumen, Jack 1 y Jack 2 son implementaciones equivalentes del mismo protocolo. Los programas compilados contra Jack 1 funcionarán con Jack 2 sin recompilar (y viceversa).
JACK2
JACK2 Es una implementación de C++ con soporte SMP. instálalo con el paquete jack2 Si está en una instalación de 64 bits y necesita ejecutar aplicaciones de 32 bits que requieren JACK, también instale el paquete lib32-jack2 desde el repositorio multilib.
JACK2 D-Bus
JACK2 con D-Bus se puede instalar a través de jack2-dbus. Es igual que el paquete jack2 pero no proporciona el servidor "jackd" heredado.
Está controlado por la utilidad jack_control
. La utilidad jack_control requiere que también instales el paquete jack2-dbus}.
Los comandos importantes se enumeran a continuación: jack_control start - inicia el servidor jack jack_control stop - detiene el servidor jack jack_control ds alsa - Selecciona alsa como el conductor (backend) jack_control eps realtime True - establecer los parámetros del motor, como en tiempo real jack_control dps period 256 - establecer el período de parámetros del controlador a 256
JACK
utiliza una API de C y admite más de una tarjeta de sonido en Linux (más MIDI). instálalo con el paquete jackAUR. Si está en una instalación de 64 bits y necesita ejecutar aplicaciones de 32 bits que requieren JACK, también instale el paquete lib32-jackAUR desde el repositorio multilib.
GUI
- Cadence — Conjunto de herramientas útiles para la producción de audio. Realiza comprobaciones del sistema, administra JACK, llama a otras herramientas y realiza ajustes en el sistema.
- Patchage — Bahía de parches modulares para sistemas de audio y MIDI basados en JACK y ALSA.
- PatchMatrix — Parche de JACK en estilo de matriz de flujo.
- QjackCtl — Aplicación Qt simple para controlar el demonio del servidor de sonido JACK.
- Studio Controls — Herramienta para configurar JACK con dispostivos USB y puentes PulseAudio.
Configuración básica
Descripción general
La configuración correcta para sus necesidades de hardware y aplicaciones depende de varios factores. Su tarjeta de sonido y la CPU afectarán en gran medida la baja latencia que puede alcanzar al usar JACK.
La línea principal del kernel de Linux ahora admite la programación en tiempo real, por lo que ya no es necesario usar un kernel parcheado. Sin embargo, linux-rtAUR en el AUR es un kernel parcheado que tiene algunos parches adicionales que pueden ayudar a obtener latencias más bajas.
Una configuración de ejemplo basada en shell
La edición D-Bus de JACK2 puede hacer que el arranque sea mucho más fácil. Anteriormente, se usaba QjackCtl para iniciarlo, o se usaba un demonio o algún otro método. Pero utilizando jack2-dbus, JACK2 se puede iniciar y configurar fácilmente a través de un script de shell.
Cree un script de shell que se pueda ejecutar al iniciar sesión en X:
start_jack.sh
#!/bin/bash jack_control start jack_control ds alsa jack_control dps device hw:HD2 jack_control dps rate 48000 jack_control dps nperiods 2 jack_control dps period 64 sleep 10 a2jmidid -e & sleep 10 qjackctl &
Lo anterior iniciará una instancia de JACK de trabajo que otros programas pueden utilizar. Los detalles de cada línea siguen. Cuando descubra su propia mejor configuración, es útil hacer pruebas y errores utilizando la GUI de QjackCtl con una versión de D-Bus JACK2.
Detalles de la configuración de ejemplo basada en shell
jack_control start
Inicia JACK si aún no está iniciado.
jack_control ds alsa
Establece JACK para usar el conjunto de controladores ALSA.
jack_control dps device hw:HD2
Configura a JACK para usar una tarjeta de sonido compatible con ALSA llamada HD2. Uno puede encontrar los nombres con cat /proc/asound/cards
. La mayoría de los tutoriales y configuraciones predeterminadas de ALSA utilizan números de tarjeta, pero esto puede resultar confuso cuando se utilizan dispositivos MIDI externos; Los nombres lo hacen más fácil.
jack_control dps rate 48000
Establece JACK para utilizar muestreo de 48000 khz. Sucede que funciona muy bien con esta tarjeta. Algunas tarjetas sólo se hacen 44100, muchos van a subir mucho más. Cuanto más alto vaya, más baja será su latencia, pero mejor deberán ser su tarjeta y su CPU, y el software también tiene que admitir esto.
jack_control dps nperiods 2
Establece JACK para usar 2 periodos. 2 es adecuado para la placa base, PCI, PCI-X, etc .; 3 para USB.
jack_control dps period 64
Establece JACK para usar 64 periodos por cuadro. Inferior es menos latencia, pero la configuración en este script proporciona 2.67 ms de latencia, que es bastante baja sin poner demasiado énfasis en el hardware en particular para el que se creó este ejemplo. Si un sistema de sonido USB estuviera en uso, podría ser bueno probar 32. Cualquier cosa menor a 3-4 ms debería estar bien para síntesis en tiempo real y/o efectos, 5 ms es lo más pequeño que un ser humano puede detectar. QjackCtl te dirá cómo estás; sin carga, lo que significa que no hay clientes conectados, deseará un máximo de 3-5% de uso de CPU, y si no puede obtener eso sin xruns (los números rojos que significan que el sistema no puede cumplir con las demandas), Tienes que mejorar tu hardware.
sleep 10
Espera a que lo anterior se asiente.
a2jmidid -e &
Inicie el puente MIDI de ALSA a JACK. Bueno para mezclar en aplicaciones que toman entrada MIDI a través de ALSA pero no JACK.
sleep 10
Espera a que lo anterior se asiente.
qjackctl &
Cargar QjackCtl. La configuración de la GUI le dice que se ejecute en la bandeja del sistema. Recogerá la sesión JACK iniciada por D-Bus muy bien, y muy bien también. Mantiene el patchbay, las conexiones entre estas aplicaciones y cualquier otra aplicación habilitada para JACK para iniciarse manualmente. El patchbay se configura mediante la GUI manual, pero las conexiones preconfiguradas en el patchbay son creadas automáticamente por QjackCtl cuando se inician las aplicaciones.
Una configuración de ejemplo basada en GUI
Esta configuración de ejemplo utiliza una configuración y administración más centrada en la GUI de JACK
- Instale jack2-dbus.
- Instale qjackctl, e informe a su sistema de escritorio/ventana GUI para que se ejecute al inicio.
- Asegúrese de que se diga a QjackCtl que:
- usar la interfaz D-Bus,
- ejecutar en el arranque,
- guardar su configuración en la ubicación predeterminada,
- iniciar el servidor de audio JACK en el inicio de la aplicación,
- habilitar el icono de la bandeja del sistema, y
- inicio minimizado a la bandeja del sistema.
- Reiniciar.
- Después de iniciar sesión, verá QjackCtl en la bandeja del sistema. Haz clic izquierdo en él.
- Ajustar la configuración en la interfaz gráfica de QjackCtl para reducir la latencia. La configuración de Tamaño de marco, Búfer de marco y Velocidad de bits afectan la latencia. Los tamaños de fotogramas más grandes reducen la latencia, los fotogramas inferiores reducen la latencia y los valores de bitrate más altos reducen la latencia, pero todos aumentan la carga en la tarjeta de sonido y en la CPU. Una latencia de aproximadamente ~ 5 ms es deseable para el monitoreo directo de instrumentos o micrófonos, ya que la latencia comienza a ser perceptible en latencias más altas.
Jugando bien con ALSA
Para permitir que los programas Alsa se reproduzcan mientras se está ejecutando el conector, debe instalar el complemento del conector para alsa con alsa-plugins.
Y habilítelo editando (o creando) /etc/asound.conf (configuración de todo el sistema) para tener estas líneas:
# convertir alsa API sobre jack API # usarlo con #% aplay foo.wav # usa esto como predeterminado pcm.!default { type plug slave { pcm "jack" } } ctl.mixer0 { type hw card 1 } # pcm tipo jack pcm.jack { type jack playback_ports { 0 system:playback_1 1 system:playback_2 } capture_ports { 0 system:capture_1 1 system:capture_2 } }
No necesitas reiniciar tu computadora ni nada. Solo edita los archivos de configuración alsa, inicia el jack, y listo...
Recuerde iniciarlo como usuario. Si lo inicia con jackd
-d alsa como usuario X, no funcionará para el usuario Y.
Otro enfoque, utilizando el dispositivo de bucle de retorno ALSA (más complejo pero probablemente más robusto), se describe en este artículo.
GStreamer
GStreamer requiere que el paquete gst-plugins-good funcione con JACK, que contiene el complemento jackaudiosink que agrega compatibilidad con la reproducción de JACK.
Más información (desactualizada): https://jackaudio.org/faq/gstreamer_via_jack.html
PulseAudio
Si necesita mantener pulseaudio instalado (en caso de que lo requieran otros paquetes, como gnome-settings-daemon), es posible que desee evitar que se genere automáticamente con X y tomando el relevo de JACK.
Edite /etc/pulse/client.conf
, elimine el comentario "autospawn" y configúrelo en "no":
;autospawn = yes autospawn = no
Si desea que ambos se reproduzcan, consulte: PulseAudio/Examples#PulseAudio through JACK
Firewire
Para evitar que ALSA pierda el tiempo con sus dispositivos firewire, debe incluir en la lista negra todos los módulos de kernel relacionados con firewire. Esto también evita que PulseAudio use Firewire. Crea el siguiente archivo:
/etc/modprobe.d/alsa-no-jack.conf
blacklist snd-fireworks blacklist snd-bebob blacklist snd-oxfw blacklist snd-dice blacklist snd-firewire-digi00x blacklist snd-firewire-tascam blacklist snd-firewire-lib blacklist snd-firewire-transceiver blacklist snd-fireface blacklist snd-firewire-motu
La lista de módulos es la más reciente disponible en el momento de escribir en Alsa Firewire mejorar repositorio.
Ahora puede descargar sus módulos Firewire cargados o reiniciar.
Red/audio remoto
JACK se puede configurar para enviar datos de audio a través de una red a una máquina "master", que luego emite el audio a un dispositivo físico. Esto puede ser útil para mezclar audio de una serie de computadoras "esclavas" sin necesidad de cables adicionales o mezcladores de hardware, y mantener la ruta de audio digital durante el mayor tiempo posible (ya que los mezcladores de hardware con entradas digitales son muy raros).
La configuración es muy simple, sin embargo requiere una red que admita el tráfico de multidifusión (es decir, el IGMP Snooping debe estar habilitado en los switches de red administrados), y requiere que todas las máquinas estén ejecutando la misma versión principal de JACK (JACK1 o JACK2) ya que los protocolos son no interoperable entre versiones. Para JACK2, se debe cargar el módulo de la aplicación:
master$ jack_load netmanager -i -c
La opción -i -c
le indica al administrador de red que asigne automáticamente las conexiones entrantes al dispositivo de audio predeterminado. Sin esto, cada conexión entrante tendría que asignarse manualmente en cada conexión. En su lugar, puede utilizar -i -h
para ver todas las opciones disponibles, sin embargo tenga en cuenta que las opciones se imprimen en la salida del servidor jackd
, el comando jack_load
no mostrará nada.
En el cliente, JACK debe iniciarse en modo de red:
slave$ jackd -d net
Las dos máquinas se conectarán y en el maestro la nueva fuente de audio será visible:
master$ jack_lsp system:playback_1 system:playback_2 remotehost:from_slave_1 remotehost:from_slave_2
Si ha pasado la opción -c
a la anterior jack_load
, entonces el sistema remoto ahora será capaz de reproducir audio.
MIDI
JACK puede manejar una tarjeta de sonido muy bien y un número arbitrario de dispositivos MIDI (conectados, por ejemplo, a través de USB). Si inicia JACK y desea usar un teclado MIDI o un sintetizador o algún otro dispositivo MIDI puro, debe iniciar JACK con una tarjeta de sonido adecuada (una que realmente emita o ingrese sonido PCM). Tan pronto como lo hayas hecho, puedes conectar el dispositivo MIDI. P.ej. con QjackCtl (qjackctl), haga clic en el botón de conexión y encontrará su dispositivo en la lista de JACK-MIDI o ALSA-MIDI, dependiendo del controlador. Para JACK-MIDI, puede configurar el Controlador MIDI en seq o raw en Configuración> Configuración de QjackCtl . Esto debería hacer que su dispositivo MIDI aparezca en la pestaña MIDI . También puede cambiar el nombre del cliente (de un genérico "midi_capture_1" a algo más descriptivo), si habilita "Configuración> Pantalla> Habilitar alias de puerto/cliente" y luego "Permitir la edición de alias de cliente/puerto (renombrar) .
Para ALSA-MIDI, asegúrese de activar 'Habilitar el soporte del secuenciador ALSA' en QjackCtl Configuración> Miscelánea . Esto agregará la pestaña ALSA en la ventana Conectar de QjackCtl donde se mostrará su controlador MIDI.
Para conectar ALSA-MIDI a JACK-MIDI, puede considerar el uso de a2jmidid (a2jmidid). El siguiente comando exportará todos los puertos ALSA MIDI disponibles a los puertos JACK MIDI:
$ a2jmidid -e
Serán visibles en QjackCtl en la pestaña MIDI etiquetada como cliente "a2j".
Puede automatizar el inicio de a2jmidid agregando a QjackCtl Configuración> Opciones> Ejecutar secuencia de comandos después del inicio : /usr/bin/a2jmidid -e &
- Q: ¿Cuál es la diferencia entre JACK-MIDI y ALSA-MIDI?
- A: El primero ha mejorado la sincronización y muestra la alineación precisa de eventos MIDI. Extiende o incluso puede reemplazar a este último, pero en este punto ambos coexisten.
Para instalar algunos teclados MIDI M-Audio, necesitará el paquete de firmware midisport-firmwareAUR en AUR. Además, el módulo snd_usb_audio debe estar disponible. Para obtener más información sobre dispositivos USB MIDI específicos, consulte https://alsa.opensrc.org/USBMidiDevices.
Solución de problemas
Mensaje de "No se puede bloquear el área de memoria (No se puede asignar memoria)" en el inicio
Consulte Realtime process management#Configuring PAM y asegurarse de que el usuario está en el grupo de usuario realtime
.
Jack2-dbus y qjackctl errores
¿Aún tiene el error "No se puede asignar memoria" y/o "No se puede conectar con el socket del servidor = No hay tal archivo o directorio" al presionar el botón de inicio de qjackctl (suponiendo que tiene el paquete jack2-dbus instalado)?
Borre ~/.jackdrc
, ~/.config/jack/conf.xml
, ~/.config/rncbc.org/QjackCtl.conf
. Mate jackdbus y reiniciar desde cero :)
(Gracias a nedko)
Tambien intenta correr
$ fuser /dev/snd/*
y verifique los PID resultantes con
$ ps ax | grep [PID here]
Esperemos que esto muestre los programas conflictivos.
Error "ALSA: no se puede establecer el número de canales en 1 para la captura" en los registros
Cambie los canales de entrada y salida de ALSA de 1 a 2.
Crackling y chasquidos en audio
Su CPU o tarjeta de sonido es demasiado débil para manejar su configuración para JACK. Baje la tasa de bits, baje el tamaño del cuadro y aumente el período del cuadro en pequeños incrementos hasta que cese el crujido.
Problemas con aplicaciones específicas.
VLC - no hay audio después de iniciar JACK
Ejecuta VLC y cambia las siguientes opciones de menú:
- Herramientas> Preferencias
- Mostrar ajustes: Todos
- Audio> Módulos de salida> Módulo de salida de audio: salida de audio JACK
- Audio> Módulos de salida> JACK: conectarse automáticamente a clientes grabables (habilitar)