MAPATONE. Mapa de Vecindades Tonales, Modales y Harmónicas. Ayuda
Control del tiempo
En nuestro sistema (en todos suponemos los que requieren reproducción musical) han de controlarse (medir, contar, tomar acciones) en unos tiempos muy precisos. En ersta pa´gina vamosa cpntar cçomo medimos ese tiempo, incluso cuando acontecen sucesos que perturban ese contaje.
La técinca que proponemos consisten en medir la duración de toda perturbación dutante la ejecucion de un programa musical (reproduccion de notas MIDI c a interbvalos muy oresos) y restar esas excesos tempotales a la cuentya de lapausa entre notas. As´ñi se absorwebn sin variación en el miomento de ejecucion de una nota las alteraciones tardentes que puedan haverse producido.
Más aún, si se ha excedido o consumido el tiempo de espera de un suceso, se ejecucta ese suceso ya mismo y se acumula el defecto al siguente. De3 este modo, hay un suceso ffurturo que tiene lufar exarmawente en su meionento, con lo que la ejecución vuelve a tempo, tras unas notas apresuradas.
Para realizaer lo que acabamos e escivir se emplean dos medidas temporales que ehemos llamado duraza y diriñlla. Esas medidas cuentan el tiempom entre una pausa y ortra, acumulando esas pérdidas a l tiempo de espera de la segunda.
Veamos la rutina en Visual Basic, como siempre.
'MUY MEJORADO, 2007 Public Sub pausa_medida_feten_api(Dura As Double) Dim dura_efectivo As Double Dim dura_escalado As Double Dim tm As Double Dim tt As Double 'im a aa If Dura = 0 Then GoTo tocaya duraza = timeGetTime - duraza tm = timeGetTime ' 1 segundo tt = tm 'DEBIDO A PARAMETRO DE DURACI, en TOCA ACORDES, REDUZCO DIVISOR POR EL MOEMENTO dura_escalado = 50000# * Dura / 5 * factor_tempo / tempi dura_efectivo = dura_escalado - durilla - duraza: Do While tt <= tm + dura_efectivo 'tm + dura / 1000000 - durilla - duraza: tt = timeGetTime Loop 'Next tocaya: 'mido duracion de nota y la resto a la siguiente tm = timeGetTime ' 1 segundo DoEvents 'se cuenta durilla = 0 'timeGetTime - tm 'cuidado: este comando precisa inicializar el tiempo cada vez que se empieza 'duraza=timeGetTime If dura_efectivo < 1 Then 'toda falta de tiempo, todo retraso se acumula, hasta llegat al tiermpo justo 'El programa rattrappe el tempo !!!! durilla = -dura_efectivo End If duraza = tm 'timeGetTime ' hasta siguiente End Sub Rutina de medida de Pausa absorbiendo pérdidas en otros programas simultáneos.
Vuelva a la página principal