2017-10-12 8 views
0

Je lisais cet article: https://www.midikits.net/midi_analyser/running_status.htmComment différencier DeltaTime (VLQ) de l'état en cours Midi Spécification

enter image description here

Je lis un fichier MIDI, ici le dernier extrait en octets:

00 B2 07 64 00 0A 40 00 
5B 00 00 5D 00 00 FF 21 
01 00 83 5F 90 3C 00 01 
FF 2F 00 
au lieu

https://www.midi.org/downloads?task=callelement&format=raw&item_id=92&element=f85c494b-2b32-4109-b8c1-083cca2b7db6&method=download

page de lecture 91, Delta Time n'est pas envoyé apparemment, envoyer deux octets en rapport avec « Running Status »

enter image description here

Voici mon interprétation (je sais est mauvais en raison de je ne considérais comme Running Status)

00 B2 07 64 
    // track event size: '4', delta time: '0', event: 'status byte 'B2', 
    // data length: '2', data: '0764', description: 'Controller Change', 
    // channel: '2 - Midi Event Type' 
00 0A // track event size: '2', delta time: '0', event: ' - ' 
40 00 // track event size: '2', delta time: '64', event: ' - ' 
5B 00 // track event size: '2', delta time: '91', event: ' - ' 
00 5D // track event size: '2', delta time: '0', event: ' - ' 
00 00 // track event size: '2', delta time: '0', event: ' - ' 
FF 21 01 // track event size: '3', delta time: '16289', event: ' - ' 
00 83 5F 90 
    // delta time: '0', event: 'status byte '83', data length: '2', data: '5F90', 
    // description: 'Note Off', channel: '3 - Midi Event Type' 
3C 00 // track event size: '2', delta time: '60', event: ' - ' 
01 FF 2F 00 
    //track event size: '4', delta time: '1', event: 'type: '2F', 
    // data length: '0', data: '', description: 'End of Track - Meta Event Type' 

Comme vous pouvez le voir dans 00 0A ligne 00 est traité comme Delta Time, mais 0A n'est pas lié à un type d'événement. (Je pense que c'est un état en cours), la même situation se produit avec 3C 00 ligne.

Question:

Quelle est la moindre idée de faire la différence Quand exécution Etat et quand est delta time?

EDIT 1:

Dans mon exemple, peut être interprété comme Control Changes Messages:

0A 40 // 0A Pan 

Vérifiez l'exemple lié dans le lien Web.

Supposons que le même Delta Time00

00 // Delta Time 
    90 3C 7F // Note ON, Channel 0, Key 3C , Velocity 7F 
00 // Delta Time 
    90 40 7F // Note ON, Channel 0, Key 40 , Velocity 7F 
00 // Delta Time 
    90 43 7F // Note ON, Channel 0, Key 43 , Velocity 7F 

Avant exemple se transforme comme

00 // Delta Time 
    90 3C 7F // Note ON, Channel 0, Key 3C , Velocity 7F 
00 // Delta Time 
    40 7F // Note ON, Channel 0, Key 40 , Velocity 7F 
00 // Delta Time 
    43 7F // Note ON, Channel 0, Key 43 , Velocity 7F 

Mais, comme je ne pas confondre avec CONTROL CHANGE MESSAGES (DATA BYTES)

40 7F // 40 Damper Pedal on/off (Sustain) 

    43 7F // 43 Soft Pedal On/Off 

Répondre

1

A l'intérieur d'une piste, tous les événement est préfixé avec un temps delta valeur. La longueur de la valeur delta time est évidente: elle se termine par l'octet qui n'a pas le bit le plus significatif.

La longueur de l'événement MIDI lui-même est déterminée par l'octet d'état. Lors de l'utilisation de l'état de fonctionnement, l'octet d'état précédent est utilisé. Les octets d'état et les octets de données peuvent être différenciés par le bit le plus significatif. Lorsque vous avez lu un temps delta, et l'octet suivant n'a pas le MSB, vous avez le statut en cours d'exécution, et doit se lire comme le nombre d'octets de données selon les besoins de l'événement:

 
00    delta time 
    B2 07 64 control change: volume = 100 
00    delta time 
     0A 40 (running status) expression = 64 
00    delta time 
     5B 00 (running status) reverb = 0 
00    delta time 
     5D 00 (running status) chorus = 0 
00    delta time 
    FF 21 01 00 meta event: port number = 0 
83 5F   delta time 
    90 3C 00 note-off 
01    delta time 
    FF 2F 00 meta event: end of track 
+0

Merci, j'ai trouvé la interprétation pour Running Status ... https: //www.midi.org/specifications/item/table-3-control-change-messages-data-bytes-2 –

+0

L'état d'exécution peut être utilisé pour n'importe quel type d'événement; vous devez vous souvenir du dernier octet d'état actuel. –

+0

Mais, comment savoir quelle interprétation doit être appliquée lorsque vous lisez des octets à partir d'un fichier? a-t-il des messages de changement de contrôle ou d'état en cours de limitation? (pour ne pas avoir d'octets de données ambiguos) –