Salut Monon, siento ser siempre el gafe joder. Enhorabuena por el esfuerzo y trabajo que te estàs pegando.
Mira he bajado la versión última, con avlinux i al compilar me da el siguiente error:
igny@pcxavi:~/Downloads$ cd tapita-0.3.1-alpha6
igny@pcxavi:~/Downloads/tapita-0.3.1-alpha6$ cd ./src
igny@pcxavi:~/Downloads/tapita-0.3.1-alpha6/src$ make
gcc -g -Wall utils.o tapita.o -lm -ljack -lasound `pkg-config --libs --cflags gtk+-2.0` -o tapita
tapita.o: In function `main':
/home/igny/Downloads/tapita-0.3.1-alpha6/src/tapita.c:286: undefined reference to `gtk_combo_box_text_new'
tapita.o: In function `connect_port':
/home/igny/Downloads/tapita-0.3.1-alpha6/src/tapita.c:700: undefined reference to `GTK_COMBO_BOX_TEXT'
/home/igny/Downloads/tapita-0.3.1-alpha6/src/tapita.c:700: undefined reference to `gtk_combo_box_text_get_active_text'
collect2: ld returned 1 exit status
make: *** [tapita] Error 1
igny@pcxavi:~/Downloads/tapita-0.3.1-alpha6/src$ su
Password:
root@pcxavi:/home/igny/Downloads/tapita-0.3.1-alpha6/src# make install
gcc -g -Wall utils.o tapita.o -lm -ljack -lasound `pkg-config --libs --cflags gtk+-2.0` -o tapita
tapita.o: In function `main':
/home/igny/Downloads/tapita-0.3.1-alpha6/src/tapita.c:286: undefined reference to `gtk_combo_box_text_new'
tapita.o: In function `connect_port':
/home/igny/Downloads/tapita-0.3.1-alpha6/src/tapita.c:700: undefined reference to `GTK_COMBO_BOX_TEXT'
/home/igny/Downloads/tapita-0.3.1-alpha6/src/tapita.c:700: undefined reference to `gtk_combo_box_text_get_active_text'
collect2: ld returned 1 exit status
make: *** [tapita] Error 1
root@pcxavi:/home/igny/Downloads/tapita-0.3.1-alpha6/src#
Salut monon
#18
Bueno creo que ya está arreglado.
para la alpha 8 , que subiré al final del dia de hoy, he cambiado GtkComboBoxText por un ComboBox tradicional.
Supongo que así funcionará en todas las versiones de Gtk 2.
Ya me diras cosas Xavi: Si has podido compilar, si te responde todo bien ( jeje sobre todo la "barra de espacio"), y prueba tambien la entrada de jack a ver que tal...
#17
Luis te prometo que en los proximos dias intento usar el repositorio Git... de verdad de la buena.
Hey, monon, tranqui. A tu ritmo, y sólo si tú quieres, faltaría más.
Yo te lo recomiendo encarecidamente porque facilita muchísimo el desarrollo y la colaboración. Por ejemplo, puedes probar algo y si no funciona deshacerlo muy fácilmente. O si yo le echo un vistazo a tu código y tengo alguna sugerencia me cuesta menos mandarte un parche y a ti aplicarlo que andar copiando y pegando en el foro. Pero si ves que tienes otras prioridades no pasa nada.
Pero si es que tienes razón... las cosas hay que intentar hacerlas lo mejor posible (ya que no perfectas, y dentro de las capacidades y conocimientos) y si Git ayuda pues mejor.
Esto son simplemente ejercicios de apredizaje, partiendo de problemas reales que yo tengo.
Te habras fijado que mi estilo es muy BASICo.
Desde 1982 que no programaba (hasta que reempeze en 2009 con python) y solo hace falta un GOTO por ahí perdido.
Pero aún así quisiera hacerlo bien ( o no muy mal) y que sea util para mi y para vosotros ( un "vosotros" amplio).
Por fin he conseguido liberar los punteros generados desde double_to_char() sin que me proboque ningun problema.
Así que ese cambio tambien está incluido en "alpha 8". Y alguna cosa más.
Salud y gracias
1- Habia estado pensando en lo del servidor jack.
Que la aplicacion se lanzase igualmente pero con las opciones de jack inactivas y/o "hidden".
Por si alguien quisiera usar la aplicacion sin usar jack o sin tenerlo instalado.
2- ¿No nos iria eso "desviando" el tempo?
Quiero decir... si en 6000 ms. exactos he dado 12 taps el programa sabe que estamos a 120 BPM aunque alguno de los golpes estuviese desfasado , siempre que el ultimo haya sido justo a los 6000.
¿Que sucederia si ese pequeño "desfase" de los golpes lo voy intruduciendo en el calculo?
Ahora , por decirlo de algun modo ( y con taps suficientes 10, 15) un golpe un poco despistado o errado lo desprecia.
Voy a probarlo y te digo algo...
Bueno, el ejemplo que he puesto es muy simplificado, simplemente para ilustrar la idea. La ponderación puede ser distinta, más conservadora:
periodo_medio = 0.1 * ultimo_periodo + 0.9 * periodo_medio
o tener en cuenta más de un golpe reciente:
periodo_medio = 0.2 * ultimo_periodo + 0.1 * penultimo_periodo + 0.7 * periodo_medio
En cualquier caso la idea es ir diluyendo, más o menos rápidamente, la influencia del pasado. Lo bueno del algoritmo adaptativo es que puedes hacer accelerandos o ritardandos, el algoritmo actual es muy conservador.
Por cierto, por si a alguien le resulta curioso, esas fórmulas implementan un filtro paso bajo digital. Al mezclar la historia con el valor actual se suavizan las variaciones en éste. Cuanto más alto sea el coficiente de ponderación de la historia, más baja será la frecuencia de corte.
Lo que dice lgarrido es interesante, pero ¿se podria poner como opcional? dependiendo de el caso en que nos encontremos puede ser útil o no.
Supongamos que quiero averigur el tempo de un tema que me han pasado y que se sabe que está grabado con claqueta, seria preferible que no sea adaptativo.
El otro caso seria cuando el que tiene que grabar está practicando el tema y vas marcando para saber que tempo utiliza, el adaptativo seria mejor opción claro.
Saludos!