Me gustaría redirigir la salida de audio de un programa a un archivo, en la línea de comando, como en
$ redirect-wrapper file.wav my-program
así que eso
- No escucho la salida del programa, es decir, la salida solo debe ir al archivo
- No grabo nada además del programa, es decir, solo este programa específico se redirige al archivo
- el resto del sistema de audio se deja completamente intacto, no se cambian las opciones de configuración de un lado a otro o algo así
¿Hay alguna forma de hacer esto? Esta pregunta relacionada no ayuda, necesito una solución de línea de comando, no "haga clic allí, luego allí". Esto probablemente también esté relacionado, pero también se basa en la aplicación gráfica pavucontrol. Encontré una alternativa de terminal a pavucontrol, pacmd.
Pero esto todavía solo hace posible el siguiente compromiso:
- Obtenga el sumidero predeterminado y guarde lo que era. ¿Cómo? Probablemente hurgando
pacmd list-sinks
- Establezca el sumidero predeterminado en el sumidero snd-aloop con
pacmd set-default-sink
. - Grabar desde ese fregadero.
- Aplicación de inicio
- Espere hasta que la aplicación haya abierto su entrada de receptor:
pacmd list-sink-inputs | grep name-of-my-program
si esto encuentra algo, la entrada está abierta. - Cambie el valor predeterminado de nuevo a lo que era
pacmd set-default-sink
. - Deja de grabar una vez que la aplicación se cierre.
Pero esto todavía cambia el sumidero predeterminado por un intervalo de tiempo de hasta un par de minutos (la entrada del sumidero generalmente no se abre hasta que el programa realmente está reproduciendo sonidos que no es necesario que sea justo después del inicio). Implementé este compromiso; Github .
Todavía estoy buscando respuestas no comprometedoras.
fuente
~/.asoundrc
. Tal vez puedas evitar esto de alguna manera.pacmd list
muestra qué fuentes y sumideros están conectados a programas particulares, por lo que puede haber una forma de cambiarlos. Intente preguntar en la lista de pulseaudio en lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss Los mantenedores / desarrolladores están allí y son bastante útiles.Respuestas:
Umm mirando la documentación de pulseaudio.
man pulseaudio
Tenemos las siguientes variables de entorno.
Con suerte, esto debería permitirle reemplazar el sumidero pulseaudio, y si esto no es suficiente, ejecute nuestro propio servidor pulseaudio de un solo uso.
En referencia a esta página ( /ubuntu/60837/record-a-programs-output-with-pulseaudio ), descubrimos el comando
parec
/pacat
(son alias) que pueden grabar y escribir en sumideros y corrientes.En conjunto, tenemos el siguiente contenedor (que en realidad no he ejecutado, aunque he logrado que este método funcione de manera ad-hoc)
fuente