Utilice (Python) Gstreamer para decodificar audio (a datos PCM)

Estoy escribiendo una aplicación que usa los enlaces de Python Gstreamer para reproducir audio, pero ahora estoy tratando de descodificar el audio, es decir, me gustaría leer los datos usando una decodebin y recibir un búfer PCM en bruto. Específicamente, quiero leer fragmentos del archivo de forma incremental en lugar de leer todo el archivo en la memoria.

Algunas preguntas específicas: ¿Cómo puedo lograr esto con Gstreamer? Con pygst específicamente? ¿Hay algún elemento particular de “sumidero” que deba usar para leer datos de la transmisión? ¿Hay alguna forma preferida de leer datos de un objeto Buffer pygst ? ¿Cómo hago para controlar la velocidad a la que consumo los datos (en lugar de simplemente ingresar un “bucle principal”)?

Para recuperar los datos en su aplicación, la forma recomendada es el enlace de aplicaciones .

Basado en un reproductor de audio simple como este (y reemplace el oggdemux / vorbisdec por decodebin y capsfilter con mayúsculas = “audio / x-raw-int”), cambie el enlace automático de voz al enlace de aplicación y conecte la señal “new-buffer” a un python función + establecer “emitir señales” en Verdadero. La función recibirá fragmentos decodificados de datos PCM / int. La velocidad de la deencoding dependerá de la velocidad a la que pueda decodificar y consumir. Dado que la nueva señal del búfer está en el contexto de subprocesos de Gstreamer, podría simplemente dormir / esperar en esa función para controlar o disminuir la velocidad de desencoding.