Audio a través de una red. Experimentos con netjack2

  • 1
#1 por Pablo_F el 12/10/2009
Buenas,

Esta mañana he estado haciendo pruebas de rutear audio desde un ordenador a otro en tiempo real. Es muy divertido. La prueba ha sido con un tecladito MIDI (hardware) que hago sonar con qsynth y también con un reproductor de audio, todo esto en mi netbook, pero la tarjeta de audio que suena está en mi otro ordenador!

Todavía estoy empezando y no me entero mucho, por ejemplo, no entiendo bien la diferencia entre conexión asíncrona y síncrona y en qué casos sería mejor una sobre otra. De momento he sido impaciente y he ido directamente a hacer la prueba con los parámetros por defecto.

Ayer hice la prueba con conexión wireless y fue un desastre, la música se oía fatal. No entiendo casi nada de redes, pero supongo que es normal que compartir audio en tiempo real a través de una red inalámbrica sea dificultoso. En cambio, con los dos ordenadores conectados por cable a la red, es una gozada, puedo tocar el teclado midi conectado al netbook y escucharlo en el desktop sin latencia apreciable.

Mis pruebas con jack1 no resultaron... Me instalé jack2 en los dos ordenadores y vualá, a la primera y superfácil.

Aclaración: Jack1 es el "jack original" de Paul Davies y sólo funciona en Linux y en Mac. Jack2 es una variante, con soporte para multiprocesadores y que también funciona en Windows. 'jackd -v' nos dirá la versión del servidor. Si el primer número es un 0, estamos en "Jack1". Si es un 1. será "Jack2".

Ubuntu jaunty viene con jack1. Se puede actualizar a jack2 a través del repositorio de jaunty backports de 64studio: 'deb http://apt.64studio.com/backports/ jaunty-backports main' o compilarlo desde las fuentes pero yo prefiero la primera opción; es más fácil y funciona. Para otras distros no sé si habrá paquetes precompilados, puede que sí.

Aquí va un pequeño tutorial justo para empezar. Puede que a muchos no les sea útil pero seguro que alguien puede estar interesado en poner varios ordenadores en "red de audio". Además, netjack2 es multiplataforma y vale para Linux / Windows / Mac.

Primero decidiremos cuál va a ser el ordenador maestro. En mi caso, ha sido el desktop, donde tengo la tarjeta buena. En éste lanzamos jack de la forma habitual. Después, desde una terminal, lanzaremos el gestionador de redes de jack con: 'jack_load netmanager'. Esto es un servidor sin interfaz gráfica ni nada, pero es necesario para que el maestro pueda ver a los esclavos. Ahora en el ordenador esclavo, lanzamos desde terminal 'jackd -R -d net' y a continuación abrimos una interfaz gráfica para realizar las conexiones, por ejemplo Jack Control. (Al lanzar Jack Control vemos que el servidor está "activo", claro, ya lo habíamos lanzado desde terminal). Pero antes de seguir con el esclavo, vamos a comprobar que en el maestro aparece nuestro ordenador esclavo, con su hostname, en las conexiones de audio. Hecha esta comprobación, lanzamos las aplicaciones en el esclavo, como primera prueba un reproductor de audio (me gusta aqualung por lo bien que está integrado con jack, lo bien que suena y lo bien que se deja llevar a cualquier punto de una canción sin fallar nunca). Nos aseguramos que las salidas del reproductor estén conectadas a los system:playbacks y ahora volvemos al maestro. En el maestro, conectamos los puertos "from_slave" a los system:playbacks y ala, ya tenemos sonando en un ordenador lo que estamos reproduciendo en el otro.

También podemos hacer que el maestro vea puertos jack MIDI del esclavo, si usamos las opciones -i y -o en el comando que escribimos en el esclavo. (por ejemplo 'jackd -R -d net -i 2 -o 2')

Saludos, Pablo

Créditos y para saber más (y mejor):

http://trac.jackaudio.org/wiki/WalkThro ... r/NetJack2
Subir
#2 por diegopicco el 11/01/2011
interesante, perdón por revivirlo, pero me interesa el tema, me gustaría ir un paso mas allá en todo esto. Crear un servidor, totalmente dedicado al proceso de plugins, y un cliente, que solo envié la señal sin procesar y la reciba procesada, si alguien me pudiera dar una pista, ya sea en linux o windows.
Por ejemplo, el protocolo OSC seria capaz de enviar audio en tiempo real a través de la red? es suficiente la capacidad de transmisión de datos de una red para enviar y recibir audio de buena calidad en tiempo real?
Si alguien tiene alguna idea, estaría muy bueno poder compartirlas.
Saludos
Diego

"La mediocridad para algunos es normal, la locura es poder ver mas alla..."
:::: DIEGO::::

Subir
#3 por vagar el 11/01/2011
netjack (lo que comenta Pablo en su post) es adecuado para lo que tú quieres, no sé si habrá un protocolo parecido para Windows, aunque me extrañaría que no lo hubiera, sería cuestión de buscar en Google.

Respecto a lo del tiempo real, el transporte por ethernet añadirá algo de latencia, pero pruébalo a ver si te vale.

Ars longa, vita brevis.
Mi colección de enlaces web en diigo.

Subir
--84263--
#4 por --84263-- el 12/01/2011
no entiendo nada, pero disfruto como un gorrino leyendo las inquietudes de pablo.Adelante pablo.
salud
Subir
#5 por Pablo_F el 14/01/2011
Sólo quería comentar que creo que Diego tiene un error de concepto. La pregunta "¿El protocolo OSC sería capaz de enviar audio en tiempo real a través de la red?" no tiene sentido.

OSC está diseñado desde el principio para ser transmitido por red pero los datos OSC no son datos de audio digital.

Con netjack se pueden transmitir datos de audio digital y de MIDI (jack midi). Con qmidinet se pueden transmitir datos MIDI (alsa midi). Con cualquier programa que soporte OSC se trasmiten datos OSC.

Saludos, Pablo
Subir
#6 por vagar el 14/01/2011
OSC es un protocolo que básicamente aporta encapsulamiento de datos, con cierta orientación al tráfico de eventos MIDI, ya que desde el principio los define como uno de sus tipos de datos básicos. En principio no es inconcebible utilizarlo para transferir audio, imágenes o recetas de cocina, pero su uso para este problema concreto sería difícil de justificar.

Como cosa curiosa, se puede encapsular audio en mensajes MIDI, para casos en los que no hay otra opción más eficiente.

Ars longa, vita brevis.
Mi colección de enlaces web en diigo.

Subir
#7 por Pablo_F el 14/01/2011
Gracias por la aclaración, Luis. Evidentemente, el error de concepto era el mío #-o .
Subir
--84263--
#8 por --84263-- el 14/01/2011
yo creo que leyendo, leyendo,y mas leyendo algo pillas, sino es hoy sera el mes que viene.
Subir
#9 por vagar el 14/01/2011
Los dos tenéis razón y no al mismo tiempo. OSC podría teóricamente formar parte de una pila de protocolos que sirviera para transferir audio y, dentro de ella, aportar las funciones para las que está diseñado. Pero no parece una opción particularmente ventajosa, ya que es un protocolo que incluye una redundancia importante. OSC tiene más sentido como protocolo "políglota", cuando se prevé que haya que comunicar dispositivos con arquitecturas hardware muy variadas.

Ars longa, vita brevis.
Mi colección de enlaces web en diigo.

Subir
#10 por diegopicco el 17/01/2011
Holaa, gente disculpen mi desaparición, el finde no pude conectarme.... Pablo, tienes razón con lo que dices, sabia que OSC era un protocolo con mas afinidad al midi que a otras cosas, pero no perdía nada con preguntar, ya que se podían mandar también otro tipo de paquetes y pensé que el audio podía llegar a ser posible, lo de netjack, esta disponible para windows, y se acerca mucho a lo que quiero, aunque la taza de transferencia, creo que complicaría mucho el enviar mas de una pista, teniendo en cuenta que por el mismo cable debería circular la señal de retorno, seguiré investigando, y les comentare un poco luego,
gracias a todos por responder
Saludos Diego

"La mediocridad para algunos es normal, la locura es poder ver mas alla..."
:::: DIEGO::::

Subir
#11 por daniko el 30/07/2011
Hola a todos.

voy a intentar revivir este tema yo también que estoy picado con el tema de audio por red.

Entonces, por lo que he entendido la comunicación de audio se hace del esclavo al maestro, siendo el maestro el que reproduce..... ¿Podría hacerse al revés? ¿Que el maestro mandara el audio y los esclavos lo reprodujeran localmente?

Sería genial para tener un sistema en casa con un servidor con todos los mp3 y después multiples puntos de reproducción para oir tu musica favorita en función de donde te encuentres (habitación, salón, jardín, baño xD...etc)

saludos!
Subir
#12 por Pablo_F el 30/07/2011
Se podría hacer la prueba de lanzar el maestro con el driver dummy (o sea, sin tarjeta de audio) y los esclavos con el driver net, por supuesto, y después lanzar alsa_out en los esclavos. Pero se me acaba de ocurrir y seguro que hay formas mejores de conseguir lo que buscas.

Saludos, Pablo
Subir
#13 por monon el 31/07/2011
Ahí lo que necesitas es un servidor de streaming y en eso VLC es un buen candidato.
Subir
#14 por vagar el 31/07/2011
Correcto, para hacerse una especie de hilo musical un servidor de streaming con vlc o icecast es mejor solución que netjack. O si en cada punto tienes una máquina independiente, un simple disco de red, para poder bajarse y reproducir música distinta en cada estancia.

El propósito de netjack es fundamentalmente repartir la carga de DSP entre varias máquinas (por ejemplo un rendering farm orquestal, con varios LinuxSampler ejecutándose en paralelo).

Ars longa, vita brevis.
Mi colección de enlaces web en diigo.

Subir
#15 por daniko el 31/07/2011
Gracias a todos por vuestras respuestas.

En principio busco hacer monitorización en tiempo real para estudio y/o directo, de ahí mi interés por netjack y su baja latencia, además de que ofrece la posibilidad de utilizar la librería CELT (si pudiera ser inalámbrico sería la releche)

Además me gustaría poder tratar el audio y eso en jack tiene pinta de estar tirado, por lo que he podido ver en los ejemplos que trae.
Subir
Respuesta rápida

Regístrate o para poder postear en este hilo