Publicado el 21 de Marzo del 2018
892 visualizaciones desde el 21 de Marzo del 2018
681,5 KB
93 paginas
Creado hace 7a (16/01/2017)
1/93
Instalación de JACK
JACK
2/93
● Para crear agentes de JACK se requiere
instalar el servidor JACK.
● Así como las bibliotecas que permiten acceder
a las funcionalidades de JACK.
– Las bibliotecas oficiales son en el lenguaje C.
● Para eso estábamos haciendo el repaso.
– El sistema operativo mayormente soportado es
Linux.
JACK y Otros Lenguajes
3/93
● Hay otros lenguajes que también pueden acceder a
las funcionalidades de JACK.
– Aunque no están soportados oficialmente.
● JAVA: java-jack
– https://code.google.com/archive/p/java-jack/
● Python: JACK-client
– https://pypi.python.org/pypi/JACK-Client/
● C++: JackCpp
– http://x37v.info/projects/jackcpp/
JACK y Otros Sistemas Operativos
● También, se puede instalar JACK en otros
sistemas operativos.
4/93
● Windows:
– http://jackaudio.org/downloads/
● Sección “Windows”
● Mac OS X (Snow Leopard)
– http://jackaudio.org/downloads/
● Sección “OS X”
JACK y Proyecto Final
5/93
● En este curso utilizaremos el lenguaje oficial de la
biblioteca (C) en el sistema operativo mayormente
soportado (Linux).
● Pero el proyecto final lo pueden hacer en cualquier
lenguaje y en cualquier sistema operativo.
– Se califica el desempeño final, no la herramienta.
“Si funciona bien, no puedo argumentar en contra.”
Instalación
6/93
● Cada computadora es su propio mundo, pero
normalmente en Ubuntu 12.04 en adelante lo
siguiente debe funcionar:
sudo apt-get install jackd2 libjack-jackd2-dev
pulseaudio-module-jack qjackctl
● Respondan que “sí” al preguntarles que si
quieren que corra en tiempo real.
Instalación
7/93
● jackd2 : servidor de JACK
● qjackctl : una interfaz para configurar y
controlar al servidor de JACK
● libjack-jackd2-dev : librerias de C para crear
agentes de JACK
● pulseaudio-module-jack : modulo de
PulseAudio para que puedan vivir a la vez
JACK y PulseAudio
JACK en Tiempo Real
8/93
● El servidor de JACK corre en tiempo real sólo
si el usuario que lo levanta pertenece al grupo
“audio”.
● Utilicen el comando “groups” para saber a
cuáles grupos su usuario pertenece.
Agregar Usuarios a Grupos
9/93
● Corran:
sudo adduser <usuario> audio
Y para terminar...
10/93
● Reinicien su sesión para que los cambios se
apliquen.
● Vuelvan a correr “groups” para verificar que su
usuario ya está en el grupo “audio”.
Instalación
11/93
● jackd2 : servidor de JACK
● qjackctl : una interfaz para configurar y
controlar al servidor de JACK
● libjack-jackd2-dev : librerias de C, C++ para
crear agentes de JACK
● pulseaudio-module-jack : modulo de
PulseAudio para que puedan vivir a la vez
JACK y PulseAudio
¿PulseAudio?
● Conceptualmente parecido a JACK.
12/93
13/93
14/93
PulseAudio
PulseAudio Agents
¿PulseAudio?
15/93
● Es el sistema de audio que a los
desarrolladores de Ubuntu les ha gustado.
– La mayoría de los programas de Ubuntu se
apoyan en PulseAudio para acceder a dispositivos
de Audio.
● Pero es lento e impredecible al momento de
entregar datos de audio en tiempo real.
16/93
En un mundo fenomenal, sólo existiría JACK...
Pero...
17/93
● Hay programas que no pueden “ver” a JACK,
pero sí pueden ver a PulseAudio.
– PulseAudio es popular y, teniendo la “preferencia”
de Ubuntu, no podemos ignorarlo.
● pulseaudio-module-jack le da la posibilidad a
PulseAudio en convertirse en un agente de
JACK.
– Así agentes de PulseAudio y JACK pueden
convivir al mismo tiempo.
18/93
19/93
PulseAudio
PulseAudio
Agents
Otro pero...
20/93
● Para que esto suceda, tenemos que primero
configurar el servidor de JACK.
● Luego nos encargamos de PulseAudio.
● Y, no se preocupen, esto no va a desinstalar
nada del sistema operativo.
– De hecho, se puede revertir con sólo unos
cambios a archivos de configuración.
QJackCtl
21/93
22/93
23/93
24/93
Configurar al Servidor JACK
● Cerciorar que el “Realtime” esté seleccionado.
● Periods/Buffer sea 4 (2 normalmente da
problemas)
● Seleccionar al dispositivo de salida y entrada en
“Input Device” y “Output Device”.
– Utilizar los dipositivos generales como “hw:0” o
“hw:1”, NO los específicos como “hw:1,0” o “hw:0,2”.
– Recomendable que el de salida y entrada sea el
mismo dispositivo.
¿Scripts?
25/93
● QJackCtl permite correr scripts en diferentes
momentos antes y después de haber corrido o
matado al servidor JACK.
● Esto es útil si, por ejemplo:
– Justo después de haber iniciado el servidor quisieramos
que PulseAudio se hiciera un agente de JACK.
jack_startup
– Justo antes de matar al servidor JACK regreseramos a
PulseAudio a ser el servidor de audio principal.
jack_shutdown
26/93
Scripts
● Descarguen los archivos de:
http://calebrascon.info/jack/jack_startup
http://calebrascon.info/jack/jack_shutdown
jack_startup
27/93
● Asumiendo que un servidor de JACK está corriendo:
– Levanta los módulos de entrada y salida de PulseAudio
hacia JACK.
● Usando a pactl, “PulseAudio Control”
– Pone como salida y entrada default de PulseAudio hacia
JACK.
● Usando a pacmd, “PulseAudio Command”
– Para más información:
man pactl
man pacmd
jack_shutdown
28/93
● Asumiendo que un servidor de JACK está
corriendo:
– Remueve los módulos de PulseAudio de salida y
entrada hacia JACK.
● PulseAudio automáticamente agarra otra
salida y entrada por default.
Scripts
29/93
● Muevan estos archivos a donde gusten.
– Recomendación: a /home/<usuario>
● Activen el modo de ejecución para los scripts:
chmod +x jack_startup
chmod +x jack_shutdown
● Y agréguenlos a QJackCtl.
30/93
Correr JACK
31/93
● Suban el volumen de las bocinas y de su micrófono.
– JACK asume dichos niveles como sus máximos.
● Intenten correr JACK por medio de pulsar el botón de
Inicio (Start).
● Observen que la configuración de PulseAudio (clic
derecho en botón de audio de Ubuntu → Configuración)
tiene como salida y entrada a:
– Jack Sink
– Jack Source
● Ya están conviviendo.
En caso de problemas...
32/93
● Es posible que los dispositivos seleccionados
no sean válidos.
– Utilizar otros.
● Es posible que PulseAudio no quiera prestar
los dispositivos.
– Reiniciar PulseAudio por medio de:
pulseaudio --kill
pulseaudio --start
QjackCtl → Connect
33/93
Probar Salida
34/93
● En una terminal corran:
– jack_simple_client
● Deben escuchar un tono.
● Observen que en la ventana de “Connect” de
QjackCtl se ha agregado un nuevo agente.
● Presionar CTRL + C en la terminal cuando se
harten del tono.
Probar Entrada
35/93
● En la ventana de Connect.
● De la columna izquierda, seleccionen uno de los
puertos bajo “system”, que sus nombres comienzan
con “capture”.
● De la columna derecha, seleccionen uno de los
puertos bajo “system”, que sus nombres comienzan
con “playback”.
● Presionen el botón “Connect”.
● ¿Se escuchan?
36/93
Por cierto...
● ¡Felicidades!
● Ya están procesando audio.
– Muy simple, pero se vale aplaudir.
37/93
Ahora, a crear nuestro primer agente de JACK
Agentes de JACK
38/93
● Cada agente se comunica con JACK por
medio de escribir y/o leer valores de energía
en arreglos de datos.
● Dichos arreglos representan ventanas de
audio.
Agentes de JACK
39/93
● La comunicación agente-servidor se hace de
por medio de una función callback.
– Son funciones especiales que se hacen
accesibles al exterior del programa.
– Y se pueden correr desde otros programas como
forma de comunicación.
40/93
void func_callback(int *a){
*a = 1;
}
int main(){
/* codigo que determina a func_callback como nuestro callback */
while(1){
/* codigo que hace otra cosa */
}
}
Agentes de JACK
41/93
● Todo agente de JACK tiene que tener una
función callback a la que el servidor JACK
puede mandar a llamar en cada ciclo de audio.
– Un ciclo de audio es el intervalo de tiempo que el
servidor JACK permite a todos sus agentes trabajar
en sus callbacks correspondientes.
– Usualmente es limitado por la cantidad de tiempo
de “respuesta” (latency) que tiene que garantizar
para que sea tiempo real.
42/93
Agentes de JACK
43/93
● Aquellos que no respondan en el tiempo
propuesto (latency), se levanta un error de
“overrun”.
● Esto significa que la información en las salidas
del agente tardío es ignorada en el siguiente
ciclo de audio.
Ciclo de Audio
44/93
● En cada ciclo de audio, el servidor JACK
manda a llamar a la función callback de
TODOS los agentes JACK conectados.
● En dicha función, los agentes de JACK
pueden acceder a los datos de audio en su
entrada y/o escribir información en su salida.
Ciclo de Audio
45/93
● En cada ciclo de audio, el servidor JACK
provee a sus agentes buffers de datos de los
cuales se puede:
– Leer, si es buffer de entrada.
– Escribir, si es buffer de salida.
● El tamaño de dichos buffers es configurado en
el servidor JACK.
46/93
¿Frames? ¿Periodos?
47/93
● Los buffers son conocidos como periodos.
● Los datos dentro los buffers son conocidos como
frames.
● ADVERTENCIA: la opción de Periods/Buffers
habla de los buffers internos de JACK, no de los
buffers que provee a los agentes.
– A los desarrolladores de JACK les gusta confundir a la
gente.
Código Ejemplo
48/93
● Para proseguir, es más fácil apoyarnos en un
ejemplo simple de un agente de JACK.
● Bajarlo de la página del curso, ó:
http://calebrascon.info/jack/jack_in_to_out.c
● Vamos a revisar sus partes...
● Se recomienda tener a la mano:
http://jackaudio.org/files/docs/html/index.html
Creación del Agente
49/93
● Se hace uso de jack_client_open
● Requiere de:
– El nombre del agente.
Creación del Agente
50/93
– Opciones de comienzo:
● El m
Comentarios de: Instalación de JACK (1)