Tapita un contador de BPM

  • 2
monon
#16 por monon el 30/06/2013
Disculpadme pero ha sido culpa de Luis que he estado encriptado varios dias y finalmente resolviendo la implementacion de MIDI en Tapita.
Gracias Luis ("el Tutor")

En breve estará lista la siguiente version y os la anunciaré debidamente.
Subir
OFERTASVer todas
  • -40%
    Roland SPD-20 Pro BK Octapad
    398 €
    Ver oferta
  • -11%
    Focusrite Scarlett 8i6 3rd Gen
    177 €
    Ver oferta
  • -13%
    Roland Juno-D6
    839 €
    Ver oferta
vagar
#17 por vagar el 30/06/2013
Jajaj, lo siento, espero por lo menos que haya sido un cifrado de pocos bits. :silbar:

Esperamos tu anuncio :comer:
Subir
El Fili
#18 por El Fili el 01/07/2013
Genial hilo :)
Develop for Gnu/Linux is better :)
Subir
monon
#19 por monon el 15/07/2013
Hola de nuevo.
Cumpliendo con la deuda prometida os dejo el enlace para descargar la nueva version de tapita 2.0
En el "readme" encontrareis toda la info necesaria para compilar el programa e informacion sobre su uso.

De todos modos ahi va una breve explicación.
Ahora el programa trae un botón para resetear manualmente y un boton de activacion para que lo haga automaticamente tras 5 segundos sin recibir evento alguno.
Desde el teclado alfanumerico se sigue usando "espacio" para hacer "tapping".
Para "tapear" desde un teclado MIDI solo hay que hacer la conexion ( p.e. desde qjackctl) y la primera tecla pulsada será la que se usará para contar los pulsos, hasta ser resetaeada de nuevo, tanto manual como automaticamente (El programa da info sobre la tecla activa).
¿Alguna duda más? Espero que os sea util y de vuestro agrado.
No creo que haya criticas jejeje, pero en caso de haberlas... ya sabeis que solo teneis que comentarmelo y haré lo posible.
Subir
Pablo_F
#20 por Pablo_F el 16/07/2013
Gracias Monon! La referencia visual es muy buena idea. Así se ve claramente si la canción cambia de tempo o se mantiene más o menos constante. También te ayuda a decidirte por un tempo entero cuando ves que estás entre dos valores (por no poner decimales).

Bob Esponja va a 143 bpm y se mantiene así todo el rato, pero ya te contaré más de esto, jajaja.
Subir
monon
#21 por monon el 16/07/2013
Gracias a ti Pablo.
Subir
catorze
#22 por catorze el 17/07/2013
Para mi es una herramienta que utilizaré infinidad de veces, muchísimas gracias monon, funciona genial!!
Subir
monon
#23 por monon el 18/07/2013
Gracies Cato.
Eso es lo único que espero, que sea útil.
Subir
vagar
#24 por vagar el 18/07/2013
Funciona perfectamente, ¡grandísimo trabajo! :birras:

Está fenómeno lo de usar gdk_input_add. Como no trabajo apenas con GTK no conocía esta función de conveniencia para hacer polling de un descriptor de archivos en el bucle de eventos. ¿Dónde lo has visto? Parece que está obsoleta desde GTK 2.14 (2008) así que a lo mejor puedes pensar en sustituirla por g_io_add_watch.

Pasos siguientes para convertirlo en un proyecto listo para incorporarse a una distribución:

- Limpiar al salir: todo lo que se abre hay que cerrarlo, todo lo que se crea hay que destruirlo, si no se pueden producir memory leaks. Esto tiene su complejidad y es la parte más chunga de programar en C/C++. En librerías como GTK parte de la gestión de memoria se realiza automáticamente por cuenta de referencias o por árbol de objetos (relaciones padre-hijo), así que hay que conocer bien el modelo GTK en este caso.

- Utilizar un sistema de gestión de código fuente (subversion, git, mercurial...) para llevar cuenta de las versiones, los cambios, colaborar con parches, etc.

- Utilizar un sistema de compilación automatizada (autotools, cmake, waf) para facilitar la detección de dependencias, el transporte a distintas distribuciones y plataformas, etc.
Subir
1
monon
#25 por monon el 19/07/2013
lgarrido escribió:
no conocía esta función de conveniencia para hacer polling de un descriptor de archivos en el bucle de eventos. ¿Dónde lo has visto?

Lo encontré aquí

Como voy ni siquiera a mantener el proyecto o añadirle nuevas funcionalidades si no puedo siquiera aprovechar los consejos que me das :-(

Si que es verdad que el consumo de memoria va aumentando, pero... ¿Que debo hacer? ¿un free()? ¿Donde? ¿Estamos solos en la galaxia?
Nada, lo dicho, lo mio es el macramé. ( aquí viene otro llanto para el que no existe emoticón).
Subir
monon
#26 por monon el 19/07/2013
Te agradezco de todos modos el apoyo y las palabras de aliento.;-)
Salud
Subir
vagar
#27 por vagar el 19/07/2013
#25 Nadie nace sabiendo, me temo. Pero con voluntad y apoyo de la comunidad poquito a poquito se va avanzando.

Si tú pides memoria con new, malloc, etc. normalmente también eres responsable de liberarla con free.

En el caso en que usas alloca se reserva memoria en la pila de la función padre (en este caso main()), así que no necesitas liberarla. Cuando termina main() esta memoria se libera automáticamente. Es una función conveniente, pero limitada en el tamaño que puede reservar. Equivale a declarar la variable al principio de la función.

Normalmente las librerías traen mecanismos implícitos o explícitos para liberar la memoria. que reservan.

Por ejemplo, si usas snd_seq_open deberías al salir llamar a snd_seq_close al salir del programa (ya sea salida controlada o por algún error, conviene reconducir todos los puntos de salida del programa a uno sólo donde se limpia todo).

En GTK bastante de la gestión de memoria está muy automatizada. Cuando añades un widget a una ventana ésta se convierte en su padre y se hace responsable de destruirlo cuando la ventana sea destruida. Las ventanas top level se destruyen solas (y a todos sus hijos) cuando se pulsa el botón de cerrar. Así que creo que por ahí no tienes que hacer nada.

En double_to_char haces malloc y luego le pasas el string a gtk_label_new. Si no me equivoco ahí tienes una fuga, gtk_label_new hace una copia de tu string así que después tienes que liberarlo porque lo has generado dinámicamente.

Alguien escribió:
etiq3desv = gtk_label_new (double_to_char((int)DESV, 0));


sería

Alguien escribió:
char *s = double_to_char((int)DESV, 0); /* double_to_char devuelve memoria reservada con malloc */
etiq3desv = gtk_label_new (s);
free(s);


Digamos que por cada open tiene que haber un close, y por cada malloc/new un free a no ser que ese free esté implícito en algún otro sitio, como pasa con los widgets gtk.
Subir
monon
#28 por monon el 21/07/2013
Gracias Luis. Ahora vamos a ver como me enfrento a ello.
Subir
vagar
#29 por vagar el 21/07/2013
Ánimo. Aquí estamos para echar una manita si hace falta.

Para analizar el uso de memoria de la aplicación se suele utilizar la herramienta valgrind. Es complicadilla, pero los resúmenes que da al final te dan una pista sobre si has conseguido tapar los agujeros o sobre si has hecho alguno nuevo.
Subir
Hilos similares
Nuevo post

Regístrate o para poder postear en este hilo