Streaming de salida audio en tiempo real de N ordenadores a 1

Estoy haciendo un proyecto que es como un mezclador de sonido que me permita controlar el volumen, activar y desactivar varias entradas, y pensé en hacerlo por software para complicar menos la cosa. Y se me ocurrió buscar soluciones de streaming por LAN, y me encontré con Pulseaudio: la solución pasaría por hacer que el equipo receptor utilice el módulo module-native-protocol-tcp y load-module module-zeroconf-publish. De esta forma, puedo hacer que los equipos clientes (emisores de sonido) tengan disponible la tarjeta de sonido del equipo receptor.

La idea es montar la cosa con Raspberry o algo similar. Tras dos días buscando información conseguí hacer funcionar la cosa en una RPI 1 Model B con Raspbian Lite, pero lagueaba bastante el sonido - luego probé con OrangePi PC y Armbian y me iba mejor.

Funciona y es prácticamente instantáneo, me sorprendió lo bien que iba... pero hay algunos problemas. Para empezar, algunas aplicaciones, sobre todo las que reproducen vídeo, no van bien. Imagino que intentan sincronizar el vídeo con el audio, pero se supone que es imposible porque un poco de retardo siempre va a haber. Reproducir vídeo con VLC, SMPlayer y Youtube (desde Chromium y SMPlayer) va mal. Los vídeos se reproducen lento (incluso se quedan parados mientras el sonido avanza bien).

Además querría poder emitir desde 2 equipos a la vez (o más [fiu] ), pero esto no va del todo bien. Por funcionar funciona, porque de random acaba funcionando bien a veces esto, pero por lo general, en cuanto reproduzco sonido desde dos sitios al mismo tiempo, el receptor empieza a petardear y el sonido que saca va a cachos (como si reprodujese un rato uno y otro rato otro).

Imagino que esto que intento hacer no es algo muy común, pero quizás tenga suerte y alguien por aquí haya hecho algo similar o conozca alguna posible alternativa. La clave es que el streaming sea prácticamente instantáneo, y también tendría que ver más adelante que se pueda utilizar Windows como emisor (para los jueguecitos...), que no sé yo si Pulseaudio en Windows (por lo que vi hay una versión para W) tiene esta posibilidad.

Salud!
Casualmente, el domingo pasado me puse a lo mismo, pero en mi caso, para usar la maquina de emulacion retro y que me transmitiera el sonido a donde tengo conectado bocinas con mejor potencia.

El caso es que solo lo he probado con los juegos y si, se nota un pequeñisimo lag, cosa que me costara investigar el porque de esa causa.

El modulo que use para esto fue "load-module-tunnel-sink server=ip". Luego estuve mirando que hay otro modulo de este mismo, pero terminando con -new. Voy a seguir probando cuando tenga mas tiempo libre.

En cuanto a la musica, tambien le agregaba un poco de lag, aunque no tanto.

Todo esto, probado usando la conexion inalambrica. No lo he probado por cable.
1985a escribió:Casualmente, el domingo pasado me puse a lo mismo, pero en mi caso, para usar la maquina de emulacion retro y que me transmitiera el sonido a donde tengo conectado bocinas con mejor potencia.

El caso es que solo lo he probado con los juegos y si, se nota un pequeñisimo lag, cosa que me costara investigar el porque de esa causa.

El modulo que use para esto fue "load-module-sink server=ip". Luego estuve mirando que hay otro modulo de este mismo, pero terminando con -new. Voy a seguir probando cuando tenga mas tiempo libre.

En cuanto a la musica, tambien le agregaba un poco de lag, aunque no tanto.

Todo esto, probado usando la conexion inalambrica. No lo he probado por cable.


¿El load-module-sink lo usas para conectar el ordenador que emite sonido al que debe recibirlo, no? Creo que eso es lo que hace gráficamente paprefs (preferencias de pulseaudio) cuando le marcas la opción de "añadir tarjetas de sonido en red" y te conectas a ella desde Preferencias de Sonido. Igualmente lo llegué a probar por comando, y usé el new, pero viene siendo lo mismo que hacerlo gráficamente.

Seguro que el lag es por la conexión inalámbrica. Yo he probado todo por cable y casi no había, agudizando el oído se nota un muy ligero retardo (lo probé jugando Verdun en Ubuntu) aunque lo mismo es lo que tu oído piensa a sabiendas de que estás usando este sistema [fiu]

Creo que con JACK Audio Connection Kit también se puede hacer este invento, pero me pareció más lioso. Estuve leyendo las páginas de JACK pero no encontré una aclaración concreta de streaming, creo que hay que usar jack junto a netjack pero no lo tengo claro. He preguntado en Reddit también, a ver si alguien sabe algo
@noentiendero

Hola, disculpa que me estoy levantando ahora, vuelve a mirar otra vez mi mensaje anterior, el modulo en negrita.

Si, basicamente, queria transmitir el audio de esa computadora a otra que recibira. En este caso, el server, sera la computadora que reciba el audio.

Todavia no he probado el JACK. Lo que si he visto, es que con JACK, se pueden habilitar plugins de sonido. Eso quizas lo haga en algun tiempo mas adelante.
mmm.. pulseaudio tiene algun flag de ejecution para ejecutarlo en realtime y sin limite de cpu, pulseaudio --help.

Teneis mas info en http://raspberrypi.stackexchange.com/qu ... stuttering para configurar buffers, latencias...

De todas formas, sino también podeis usar alguna alternativa pensadas específicamente para realtime (udp, paquetes mas pequeños, compresores rápidos..)

http://www.pogo.org.uk/~mark/trx/
http://www.pogo.org.uk/~mark/trx/stream ... audio.html
nu_kru escribió:mmm.. pulseaudio tiene algun flag de ejecution para ejecutarlo en realtime y sin limite de cpu, pulseaudio --help.

Teneis mas info en http://raspberrypi.stackexchange.com/qu ... stuttering para configurar buffers, latencias...

De todas formas, sino también podeis usar alguna alternativa pensadas específicamente para realtime (udp, paquetes mas pequeños, compresores rápidos..)

http://www.pogo.org.uk/~mark/trx/
http://www.pogo.org.uk/~mark/trx/stream ... audio.html


Sí, activé esas opciones de realtime y mejora del nice, aunque no vi mucha diferencia. También toqué las opciones de los default-fragments, PUEDE que poniendo 2 y 2 algo mejorase, pero al final si reproduzco sonido desde dos fuentes al mismo tiempo puede ir bien o puede ir mal, es un poco aleatorio [fiu]

El trx lo vi antes del pulseaudio, pero parece bastante lioso de instalar y no hay mucha documentación (y la oficial no dice mucho). Ya había intentado ejecutarlo pero tiraba errores :(

También se me ocurrió una idea loca que quizás podría ayudarme a deshacerme, al menos, del problema ese de que los vídeos tengan lag por causa del sonido, aunque podría a su vez encontrarme con lag en el propio sonido. En el sistema fuente de sonido, pongo la tarjeta de sonido normal del ordenador como salida; a su vez, ¿activo? el loopback de esa tarjeta, que debería aparecer como una entrada de audio, y esa entrada de audio hago que salga por la propia salida del servidor remoto. Creo que podría funcionar, pero implicaría enlazar unas tarjetas con otras y no sé cómo buscarlo [tomaaa]

Edit: me comentaron por Reddit que igual el problema es que la RPI y similares integran todo en un SOC y no va del todo bien esto [reojillo] luego probaré tres ordenadores "normales", dos emisores y un receptor (con ordenadores sólo probé 1->1).

Edit2: no noté mucha mejoría usando ordenadores "normales", así que seguí con la Orangepi (la RPI1 me da más problemas). Lo del sonido entrecortado parece algo más random que otra cosa, sobre todo al reproducir dos fuentes al mismo tiempo, pero lo mismo buscando las opciones ideales se puede arreglar. De todas formas me planeo dejar de lado esta solución por hardware y buscar otra cosa, quizás compre un par de tarjetas de sonido USB decentes y haga la mezcla por software de esta manera. ratataaaa
5 respuestas