Capturando la salida de audio del sistema Mac OS X con Python

He estado intentando “secuestrar” el audio del sistema Mac OS X usando PyAudio y guardarlo en un wav en python. Es decir, no quiero grabar desde un dispositivo de entrada como un micrófono. Quiero capturar la salida de sonido de cualquiera o todas las aplicaciones.

He seguido los tutoriales en el sitio de PyAudio, pero estos no parecen cubrir mi caso de uso y cuando bash leer el flujo de salida, como es de esperar, obtengo la excepción paCanNotReadFromAnOutputOnlyStream. ¡Lo suficientemente justo! ¿Hay alguna forma de hacer lo que estoy proponiendo con PyAudio u otra biblioteca FOSS Python?

Descubrí que un proyecto de código abierto llamado SoundFlower me llevó rápidamente al lugar donde necesitaba estar.

  1. Instalé el paquete SoundFlower de Google Code.
  2. Preferencias del sistema abierto -> Sonido
  3. Elegí Soundflower como mi dispositivo de salida
  4. Elegí Soundflower como mi dispositivo de entrada

Entonces pude grabar el audio del sistema desde el dispositivo predeterminado usando PyAudio. Sin embargo, no hay sonido de los altavoces / auriculares en esta situación. Me pregunto si podría usar Jack OS X para dirigir el audio de SoundFlower a la salida de audio del sistema.

Si está dispuesto a instalar un componente adicional, puede probar Jack OS X para canalizar la entrada de la aplicación de origen a PyAudio.

En PyAudio, tendrá que usar el dispositivo virtual “Jack Router” que aparecerá como un dispositivo de entrada de audio.