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