Binarios de la librería pyAudio / portAudio, ideal para tratar con audio en el sistema.

206 views
Skip to first unread message

DaVid

unread,
Jun 2, 2022, 9:28:40 PM6/2/22
to nvda-es
Hola a todos. Hace mucho he estado buscando esta librería, que
funcionase bien con python, y que soporte el modo loopback (para poder
grabar el sistema sin pérdidas). Como resulta casi imposible de
encontrar para la arquitectura que uno desee, he decidido compilarlas
para todas las arquitecturas de pyton que son más usadas actualmente.
Así de paso practicaba mis habilidades con github workflows, jeje.
Planeo en algún momento realizar un add-on que me interesa, con esta
librería. A futuro, incluso creo que podríamos implementar para que
NVDA trabaje con portAudio, dando posibilidad al usuario para que
utilice wasapi, un protocolo de audio disponible desde windows 7, que
que posee mayor eficiencia y permite ajustar latencias más bajas.
Yo por ejemplo, tengo problemas de latencia en una interfaz roland
ua55, culpa del driver pero que podría resolver si pudiera usar la
modalidad wasapi.
hace mucho, en algunas computadoras también sufrí de problemas de
latencia (creo que lo comentamos por aquí) y no sé si alguien siga
enfrentando una situación así que no es específica de NVDA, si no más
bien de los drivers de audio que tienen un buffer muy grande,
provocando mayor latencia.

Aquí se las dejo para quien quiera probar, como las he compilado en
github no he tenido tiempo de realizar muchas pruebas que digamos y ni
siquiera sé si esto podría funcionar en un complemento de NVDA, pero
por si alguien prueba antes que yo.
https://github.com/davidacm/pyaudio_portaudioBuilds/releases/tag/1.1.2

Saludos.

Mauricio Haro

unread,
Jun 2, 2022, 11:14:08 PM6/2/22
to nvd...@googlegroups.com, DaVid

Buenas, listeros.

WASAPI, sí, es el mejor sistema de audio que se tiene disponible si no se posee una Interfaz en Windows o si se tiene una de gama baja, como algunas Behringer; pero, si hablamos de Interfaces bien puestas con toda regla, estas vienen con el sistema de audio diseñado por Steinberg  llamado ASIO (Audio Stream Input Ouput) Esto para las personas que se dedican a la producción musical, o para quienes quieren trabajar con el audio lo más limpio y menos modificado posible, aunque, también dependerá de los conversores de la Interfaz, claro que siempre podrás adquirir unos conversores externos como los Prism Atlas por ejemplo, pero esto claro para Mastering. Volviendo al tema, no tengo ni idea de qué sistema de audio o Driver se usa de forma predeterminada en las tarjetas de sonido convencionales, o como se va administrando la cosa ahí. Claro, siempre se puede desactivar las mejoras de señal para tener la menor latencia posible con NVDA a la hora de trabajar, aunque no sé David, si te refieres a la hora de trabajar con NVDA o a la hora de grabar. Yo asumo que es para lo primero.

Ahora, como no conozco de Python no sé que acto tengan las librerías, porque muchas veces depende de las propias tarjetas de sonido que si vienen con su Software emulando mil efectos y más, como el Sonic Studio y Nahimic, aunque como dije, todo esto se soluciona desactivando las mejoras de señal; a menos que procesar, más rápido trabajará NVDA, básicamente estás con el Driver genérico de WIndows que ni idea, pero bueno.

En MacOs por supuesto no usan ASIO, ellos no lo necesitan, según tengo entendido y todo lo hacen con su Driver nativo, CoreAudio; diseñado por supuesto como no podría ser por la propia casa, Apple.

Adivinaron.

Ciertamente es un tema bastante interesante, yo estoy trabajando con una Apogee Duet y llevo ASIO a 128 (como unos 3MS más o menos) y NVDA va bastante bien.

Esto claro también depende de la Interfaz, porque en una Presonus ya crujía el audio con la misma computadora al hacer grabaciones y demás

Y no era el procesador, porque estoy con un AMD Ryzen 9 5900HX y con 16GB en RAM, estoy esperando que salga la serie 7000 para cambiarme, o eso creo. En fin, no me salgo de tema.

Mauricio Haro

unread,
Jun 2, 2022, 11:21:39 PM6/2/22
to nvd...@googlegroups.com, DaVid

Hablé mucho y no dije nada al final.

En un foro estuve leyendo que la latencia también depende de la administración de algunos Drivers en WIndows, el fabricante de la placa madre y en algunos casos la optimización de sus propios Drivers, no solo el audio en realidad. La solución es hacer un par de pruebas con LatencyMon

y ver que Drivers están causando problemas en nuestra PC

El 02/06/2022 a las 08:28 p. m., DaVid escribió:

DaVid

unread,
Jun 3, 2022, 12:58:23 AM6/3/22
to nvd...@googlegroups.com
Hola.

Portaudio es la misma librería que utiliza Audacity para gestionar
todo el tema de dispositivos de audio.

Y me refiero a la hora de trabajar con NVDA. Con las realtec no he
vuelto a tener problemas, pero extrañamente con esa roland me sucede,
aunque la latencia en asio es súper baja. De hecho es algo por lo que
me gusta las roland, son de las que mejor soportan los buffers
pequeños y las bajas latencias, aunque por supuesto no he probado
todas las marcas.
Es algo sobre lo que ya habíamos hablado por aquí. En windows 10, el
buffer lo define el driver del fabricante. Y para cambiarlo, hay que
usar el protocolo wasapi. Al modificar el buffer o la latencia, se
realiza para todo el sistema. Excepto en Asio, que Asio es una cosa
muy distinta y no tendría sentido implementar algo así para un lector
de pantallas. Hasta habíamos compartido una aplicación que modificaba
la latencia, cambiándola así para todo el sistema, pero había que
mantenerla siempre abierta.
Parece que al inicio, el driver de realtec venía de fábrica con una
latencia muy baja, cosa que ya resolvieron. Pero no solo realtec
existe.

En fin, implementar algo así para NVDA sería muy a futuro, por ahora
portAudio lo quiero para otra cosa pero ya les comentaré después, si
me resulta el invento. Aunque no sé cuando tenga tiempo para dedicarle
a eso.
Saludos.

El 2/6/22, Mauricio Haro <elcra...@gmail.com> escribió:
> Hablé mucho y no dije nada al final.
>
> En un foro estuve leyendo que la latencia también depende de la
> administración de algunos Drivers en WIndows, el fabricante de la placa
> madre y en algunos casos la optimización de sus propios Drivers, no solo
> el audio en realidad. La solución es hacer un par de pruebas con
> LatencyMon <https://www.resplendence.com/latencymon>

Héctor J. Benítez Corredera

unread,
Jun 3, 2022, 3:54:09 AM6/3/22
to nvd...@googlegroups.com

Buenas David.

 

Simplemente genial.

 

Hace mucho estuve buscando justamente esto que fuese compatible con wasapi e encontrado forks que no tenían dicha característica y otros que no cumplían con la versión de Python que necesitaba en definitiva siempre e tenido problemas con esta librería.

 

Mil gracias y guardado como paño en oro.

 

Saludos

José Manuel Delicado Alcolea

unread,
Jun 3, 2022, 4:07:24 AM6/3/22
to nvd...@googlegroups.com

Hola.

Yo compilé PortAudio en su día como parte de la construcción de la DLL de Teamtalk. Si se le meten los componentes adecuados, es capaz de soportar ASIO también. Ahora, me surge una duda: ¿qué sistema emplea NVDA para emitir audio? Porque si no es WASAPI, me imagino que DirectSound tampoco.

Un saludo.

--
Visita la web oficial de la comunidad de NVDA en español para acceder a recursos y descargas que desplegarán todo el potencial de tu lector de pantalla:
https://nvda.es
Visita la tienda de la web oficial de la comunidad para adquirir algunos productos, como materiales de formación o sintetizadores de voz, que mejorarán tu experiencia con NVDA: https://nvda.es/tienda/
Consulta las normas de esta lista siempre que quieras en la siguiente dirección:
https://nvda.es/documentacion/normas-de-convivencia-y-buen-comportamiento/normas-de-la-lista-de-correo-de-la-comunidad-de-nvda-en-espanol/
---
Has recibido este mensaje porque estás suscrito al grupo "NVDA en español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a nvda-es+u...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/nvda-es/17233961-fcec-fcfe-465e-1024ccd89d57%40gmail.com.
--

José Manuel Delicado Alcolea
Equipo de gestión web y desarrollo
Experto certificado en NVDA

Logotipo de la comunidad hispanohablante de NVDA
Asociación Comunidad Hispanohablante de NVDA
- Tel.: (+34) 910 05 33 25 ext. 2001
- jm.de...@nvda.es
- www.NVDA.es
- @nvda_es

***Este mensaje y sus adjuntos están dirigidos a su destinatario y pueden contener información exclusiva o confidencial. La utilización, copia o divulgación de los mismos por parte de alguien diferente a dicho destinatario no está permitida sin autorización. Si ha recibido este mensaje por error, le rogamos que lo comunique por esta misma vía y seguidamente lo destruya.***

Jonathan

unread,
Jun 3, 2022, 5:50:50 AM6/3/22
to nvd...@googlegroups.com

Si te refieres a emitir la voz del sintetizador, Para por ejemplo eSpeak ¿no usa Waveout? (las APIs de Windows)

DaVid

unread,
Jun 3, 2022, 12:57:09 PM6/3/22
to nvd...@googlegroups.com
Hola.

El asunto con asio es que dependemos de la tarjeta, casi ninguna
soporta asio. No es algo que yo aconseje usar en NVDA porque podría
bloquear otras aplicaciones asio.

El problema en sí no es tanto obtener el dll, yo lo había sacado
inicialmente de audacity para ver si podía hacer algo... si no el
compilado para python (.pyd) que es específico para cada arquitectura
y cada versión de python.
Seguro que con ctypes podríamos acceder a las funcionalidades de
portaudio, pero hacer todo ese trabajo conllevaría un esfuerzo enorme.
Ahí es donde se complican las cosas, porque dependemos de la voluntad
del que haya hecho el puente entre la dll y python, que anda medio
desaparecido, y los compilados que habían no traían el parámetro para
loopback, que nos permite grabar el sonido interno directamente. Para
compilar el .pyd se requiere también portaudio.lib, y ese sí que no lo
encontré por ningún lado. Por lo que primero tengo que hacer el
proceso de compilar la dll y el lib, y luego el whl con su respectivo
.pyd, que es el puente entre python y la librería.

Creo que NVDA usa MME. Lo que ha dicho Jonathan de waveOut no me suena
a que sea un protocolo pero sí que es un api, y no es claro que hay
por debajo, es un api bastante viejo por lo que supongo que por debajo
irá MME. De hecho se puede ver en una línea esto:
"winmm = windll.winmm".
Creo que ahí tenemos la referencia a MME.
No es lo ideal, pero ha funcionado. Aunque en mi opinión eso debería
cambiarse, y lo ideal sería a wasapi, ahora que ya no se utiliza
windows XP. Incluso dar al usuario la opción para elegir, (portaudio
lo permitiría).

Héctor, ojalá que te funcione muy bien! Yo en algunos días espero
tener tiempo para hacer pruebas.

He intentado actualizar a la última versión de portAudio, pero me han
cambiado las cosas los de portAudio, por lo que el .pyd no ha
compilado. y aunque tengo alguna idea de como resolverlo, no estoy
seguro si eso podría generar inconvenientes. Así que antes de hacer
algo, primero voy a tener que leer la documentación de portAudio para
no cargarme nada.

Quería usar la última versión de portaudio porque posee buenas mejoras
en wasapi, pero bueno. En otro momento será.

Saludos.

Javi Domínguez

unread,
Jun 5, 2022, 7:16:54 AM6/5/22
to nvd...@googlegroups.com
Hola.


Genial. Yo uso esa librería para las órdenes de voz en el complemento
CommandHelper y me costó bastante encontrar los binarios adecuados. Me
lo apunto porque seguro que algún día me vienen bien.


gracias.


Javi

DaVid

unread,
Jun 5, 2022, 1:00:53 PM6/5/22
to nvd...@googlegroups.com
Hola Javi, interesante dato. Creo que una diferencia de esta librería
respecto a las otras, es que viene con el soporte para loopback
activado, algo que nunca se implementó en el portaudio original. Al
parecer, ni siquiera en las versiones más recientes de portaudio.
Loopback nos permite grabar el sonido del sistema usando wasapi, sin
tener que activar dispositivos tales como la mezcla estéreo y demás
que suelen venir desactivados por defecto.
Los mismos de audacity, tuvieron que hacer un patch que implementara
esta funcionalidad. Pero el patch aplicado pareciera ser distinto a la
forma en que lo hizo la persona que sacó portaudio con loopback para
python.
yo he intentado hacer la implementación de loopback en la versión más
reciente de portaudio y que sea compatible con esta implementación de
python. Pero en el repositorio del autor original no hay nada que
indique qué cambios realizó, desde el commit inicial ya venía con los
cambios hechos y eso me dificulta las cosas.
Si alguien se atreve a implementar esto en el portaudio más reciente
que nos cuente, entre 6000 y un resto de líneas de código C que
contiene resulta un poco complicado.

Saludos.

El 5/6/22, Javi Domínguez <fja...@gmail.com> escribió:
Reply all
Reply to author
Forward
0 new messages