P.D.: Sabed que el PLAY tiene un lado oscuro ¿¡qué es eso de que no se distingan las corcheas de las negras en cuanto le pones un tempo rápido!? ¿qué es eso de que se descordinen los canales cuando pongo tempos "raros" como 140 o 160?
Esto es un problema no del BASIC, sino de la musica cuando se toca por interrupciones. Si tu defines una negra como el tiempo de 11 interrupciones, ¿entonces la corchea que será, 5,5 interrupciones o 6 interrupciones?, en ambos casos se producira un descuadre que sera mayor en cuanto avance la canción.
Este mismo problema le paso el otro dia a Maki en mi casa con el driver de micro cabbin, y la unica manera de solucionarlo es pensar cual sera la minima nota que vas a tocar y en funcion de eso calcular el tempo. Es decir si vas a tocar semicorchea el tiempo tiene que ser tal que el numero de interrupciones de la negra sea divisible por 4. Nosotros solucionamos eso el otro dia usando un tempo de 144 en lugar de 140 (creo que estos son los valores exactos que tuvimos que usar), aunque por supuesto eso depende de cada driver y/o de la frecuencia a la que vaya el ordenador (50/60 Hz).
El driver de microcabbin lo que hace para esto es decir que cada interrupción vale como 4 unidades de tiempo, y en cada interrupción se consumen 4 unidades, pero permite por ejemplo decir que una interrupción tiene por ejemplo 6 unidades, con lo que se conseguiria algo como:
- Interrupción 1: consume 4 unidades, quedan 2 para la siguiente.
- Interrupción 2: consume 8 unidades (las dos de antes + las cuatro suyas)
- Interrupción 3: consume 4 unidades, quedan 2 para la siguiente.
- Interrupción 4: consume 8 unidades (las dos de antes + las cuatro suyas)
por lo que en 4 interrupciones ha tocado 6 notas diferentes, o dicho de otra manera en cada interrupción toca 1'5 unidades de tiempo. Por supesto que esto es una aproximación, pero evita el problema de la desincronización de tiempo debido al truncamiento de decimales.