Vamos a ver:
1) Tengo que pediros que en lo posible, eviteis mandarme mensajes privados. Muchas veces me mandáis mensajes preguntado cosas que se han contestado en éste mismo hilo y para lo unico que sirve, es para bloquearme mi cuenta y que luego los tenga que borrar sin contestar: teneis que entender que por regla general, yo tengo poco tiempo para pasar por los foros y que no puedo perder el tiempo en contestar lo ya contestado o en resolver problemas que vosotros mismos os creais, (y lo pongo en grande) POR NO LEER LAS INSTRUCCIONES QUE SE ADJUNTAN CON EL PROGRAMA.
Por ejemplo, lo de poner las canciones en guitarfun/songs, está en el PDF desde la primera release y ha sido contestado aquí, un trillón de veces. Y no: no voy a hacer que mire si los ficheros están en apps/guitarfun/songs o similares, simplemente, porque el canal homebrew busque ahí el programa, por el mismo motivo que mi programa se llama guitarfun.dol y no boot.dol, porque el programa es independiente del cargador.
En todo caso, siempre es mejor que expongais las dudas o sugerencias en éste hilo, puesto que si yo no respondo, otra persona puede hacerlo en mi lugar y si respondo, la misma respuesta sirve para otras personas. Vía MP, es posible que os lea, pero en ese momento esté ocupado para contestar (o no me apetezca, porque de la casualidad que entre en el foro para ver si hay alguna noticia, a punto de ir a sobar , lea el MP y lo deje para "mañana" y luego me olvide de él
) y al final no conteste o lo haga varias semanas después
2) Por otro lado, estoy trabajando en el programa a ratos, optimizando código, arreglando pequeños bugs, separando código, lo de la separación de las notas que comentaba el otro día, ya ha sido implementado, le he añadido para que importe desde el sistema la correción de pantalla y estudiando algunas posibilidades, como el soporte de varios idiomas.
El tema del juego en red está parado: se que el inicio del juego se puede desfasar por unos segundos, si el paquete de sincronización se demora lo suficiente, pero es algo que no puedo evitar facilmente, salvo que anclara el tiempo de uno de los jugadores a la respuesta del otro (lo cual tiene muchos inconvenientes). En todo caso, debido a que no parece preocuparos mucho, o bien porque no coincidís con nadie o porque os basta con el modo para un jugador (o el juego a dobles desde la misma consola), pues creo que no merece la pena preocuparse por ello.
Una cosa que me gustaría implementar, es una forma de conectar al server, obtener su lista de canciones y poder importar esas canciones al programa de forma directa, pero creo que voy a optar por economizar esfuerzos y o bien lo dejo para mas adelante, o no se hará nunca: a veces meter muchas opciones no es lo mas aconsejable, pues la esencia del juego es lo verdaderamente importante.
3) A vueltas con el tema de las canciones que se desfasan, lo que puedo decir es que me he bajado un programa que "convierte" las canciones de Frets on Fire, al formato de Guitar Zero. Guitar Zero se diferencia en que en vez de tener un fichero song.ini y el midi, tiene un fichero de texto, song.dat donde vienen reflejado el tiempo de las notas, etc.
Pues bien, he exportado un par de canciones de las que apaña la peña, que yo considero chapuceras y que en el programa se traduce en algunos ligeros desfases, habilitando en mi programa la posibilidad de sacar todas las notas a un fichero, mostrando el tiempo, la duración y el traste. Esto en un extracto del final de uno de estos temas "Wonderful tonight (Live) - by T3pl3s" :
Guitar Zero[NOTE]
<DIFFICULTY>:3
<TIME>:319.666656
<CLICKTIME>:230160
<DURATION>:3.666667
<CLICKDURATION>:2640
<TRACK>:1
[/NOTE]
[NOTE]
<DIFFICULTY>:3
<TIME>:319.666656
<CLICKTIME>:230160
<DURATION>:3.666667
<CLICKDURATION>:2640
<TRACK>:2
[/NOTE]
[NOTE]
<DIFFICULTY>:3
<TIME>:319.666656
<CLICKTIME>:230160
<DURATION>:3.666667
<CLICKDURATION>:2640
<TRACK>:4
[/NOTE]
GuitarfunNote 1) 319666 / 3667
Note 2) 319666 / 3667
Note 4) 319666 / 3667
Como se puede apreciar, TRACK coincide con Note en el listado de guitarfun, TIME con la primera cifra, y DURATION con la segunda.
La unica diferencia es que la lista de Guitar Zero representa el tiempo general y lo muestra en segundos con precisión hasta el microsegundo, mientras que mi lista se exporta en milisegundos aunque el timer general tiene una precisión mucho mayor (y por eso no hay un desvio apreciable.
Mi programa de todas formas, redondea el tiempo de la nota a 100ms. Es decir, 319666 se traduce como 319600, aunque con la nueva modificacion, se muestra en 319650.
Desde el punto de vista de juego, incluso aunque el desfase fuera de 99 ms, eso no es una desventaja. al reves, eso haría que la nota se mostrara ANTES de oirla y el programa te permite tocarla antes, durante o después, asociando la pulsación a la nota mas próxima.
Sin embargo, casi siempre que una nota se muestra mal, se muestra DESPUES y con una distancia de unos 200 ms y teneis que reconocer que es bastante curioso, que hay canciones que van perfectamente en el sonido, siempre, y que aparentemente, no tienen ninguna diferencia real con las otras: si fuera que mi programa gestionara mal el tiempo del audio, el fallo estaría presente siempre.
Por tanto, yo creo que el problema se puede deber a las siguientes causas:
1) Fallo al crear la canción en el ajuste de los tiempos
2) FoF tiene un fallo de precisión y dado que las canciones se crean pensando en ese programa, se adaptan a el y se muestra el defecto en el mío. Por otro lado, mi programa usa siempre la misma base de tiempos, mientras que FoF la usa variable (es la razón que hace que algunas canciones en FoF, se vean lentas las notas y en otras se acelere, o que haya canciones que tienen un ritmo y en ciertas fases, se acelere la cancion). Eso hace que visualmente, algunas notas en FoF se aprecien muy cerca y dentro del area de percusión y sin embargo en mi programa, la pueda mostrar mas lejos. En resumen. en FoF s edisimulan los fallos y en el mio se muestran tal cual.
3) Tal vez haya un problema con la descompresión de Ogg: el bitrate variable es posible que genere samples de más o de menos, o incluso haya errores en la codificación y eso genere pequeñas diferencias que se reflejan a lo largo de la canción
Lo que está claro es que si hay un fallo en el programa, se puede corregir, pero si el fallo no es de programa, pues lo que hay que hacer es atacar la raiz del problema y dejarse de soluciones sin sentido.
Mi programa tiene un defecto que consiste en que guarda las notas en tramos de 100 ms y eso explica un ligero desfase visual
pero el desfase es negativo. Es decir, si una nota está a 133 ms, se mostrará en 100 ms y no en 200 ms, por lo que la nota debería llegar ANTES que el sonido y tu la puedes tocar, antes, durantes y despues.
Eso en la practica, supone una ventaja, pero el problema en las canciones, es que hay notas que aparecen DESPUES (pero no todas)
Para que entendais el mecanismo del juego, cuando tu pulsas un traste y golpeas, se trata de asignar ese golpeo a la primera nota "virgen" que aparezca y si la nota está ligeramente pasada, pues no va a suponer un problema. Por mucho que alguien toque de oido, lo que está claro es que las notas están agrupadas y con que la primera la toques bien, las restantes van a respetar la distancia y el programa va a tratar de asignar las entradas entre las notas que van apareciendo.
Vamos, que no es ningún problema el hecho de utilizar una tabla que encasilla las notas en trozos de 100ms y de hecho, la correccion de 50 ms que he introducido ahora, lo que hace es ALEJAR la nota y no supone mayor problema.
El problema es que hay canciones que llegan a mostrar un desfase en notas superior a 500ms pero en muchas otras, va en fase. Y cuando listo el MIDI me da que las notas están correctamente interpretadas (comparado con el generador de guitar Zero). Si pongo un desfase manual para corregir el fallo de la canción, cambiamos el desfase de 4 notas, por el desfase de 500. ¿Debo añadir una opción para trasladar los fallos de una canción mal hecha, desde unas notas a otras? Porque solo si todas las notas estuvieran desfasadas el mismo tiempo, daría resultado una posible corrección de tiempo (y ya os podéis figurar que yo mismo, he probado a meter esos desfases a mano con resultado insatisfactorio)
Si el fallo estuviera en el interprete MIDI, las notas deberían desfasarse todas a partir de ese punto (y no pasa). Y si el fallo está en el manejo de audio, deberían fallar todas las canciones. Si eso no es así, poco puedo hacer yo.