es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Kivy ralentizando la reproducción de MIDI.

Estoy trabajando en un sintetizador de midi de código abierto y cada vez que reproduzco una canción que toca múltiples notas al mismo tiempo, la música se ralentiza.

Sé que tengo una implementación bastante defectuosa (líneas 140 y siguientes en el código) porque kivy se bloquea siempre que hay un bucle dentro de la función de actualización. Escribí una solución alternativa dividiendo el archivo midi en una lista que se vacía en cada actualización. Sospecho que el problema se debe a que kivy es lento o el time.sleep() afecta las pulsaciones de teclas múltiples porque es sincrónico.

¿Existe un hilo separado que pueda usar en Kivy que se ejecute “en segundo plano”? Esto podría solucionar el problema, pero no estoy seguro.

El código se puede encontrar aquí:
https://github.com/DeWolfRobin/Pythesia/blob/main/gui.py

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución a la Reproducción Lenta de Música en un Sintetizador MIDI de Código Abierto

    Si estás trabajando en un sintetizador MIDI de código abierto y experimentas una reproducción lenta de la música cada vez que una canción tiene varias notas al mismo tiempo, existen varios enfoques que puedes seguir para solucionar este problema.

    Una posible solución es examinar la implementación de tu código, específicamente las líneas 140 en adelante, ya que sospechas de una implementación defectuosa. Kivy tiende a detenerse cuando hay un bucle dentro de la función de actualización, lo cual podría ser la causa de la reproducción lenta de la música. Para solucionarlo, puedes escribir una solución alternativa dividiendo el archivo MIDI en una lista que se vacía en cada actualización.

    Sin embargo, debes tener en cuenta que el problema también podría ser causado por la lentitud de Kivy o por la función time.sleep() que interfiere con múltiples pulsaciones de teclas debido a su naturaleza sincrónica. Para resolver esto, es necesario utilizar un hilo separado en Kivy que se ejecute en segundo plano para manejar este problema.

    Para lograr esto, puedes utilizar la clase Clock proporcionada por Kivy, la cual puede programar eventos y devoluciones de llamada, ejecutarlos en un hilo separado y asegurarse de que todo se realice de manera eficiente. Puedes crear una nueva función que maneje la reproducción de música en este hilo separado, el cual se ejecutará de forma independiente al hilo principal, permitiéndote tener una reproducción de múltiples notas sin problemas de sincronización.

    Puedes encontrar un código de muestra sobre cómo utilizar la clase Clock en la documentación de Kivy aquí: https://kivy.org/doc/stable/api-kivy.clock.html. También puedes explorar otras funciones y clases proporcionadas por Kivy para manejar hilos y devoluciones de llamada de manera eficiente.

    Adicionalmente, puedes buscar ayuda en la comunidad de Kivy para resolver este problema o recibir más consejos sobre cómo optimizar tu código para mejorar el rendimiento.

    Para acceder al código que podría estar causando problemas, visita https://github.com/DeWolfRobin/Pythesia/blob/main/gui.py.

Comments are closed.