2009-07-25 13 views
8

Quelle est la meilleure façon de lire un fichier MIDI (chronologiquement) avec plusieurs pistes? (Java)Lecture de fichiers MIDI

Note: Je ne veux pas lire le fichier MIDI, il suffit de lire les messages.

Idées Couple:

Est-il sûr de supposer qu'il n'y a pas de note des événements plus courts que la note 1/64e? Ou devrais-je visiter toutes les pistes et ne passer à la suivante tique après toutes les autres tiques pistes

  • On suppose qu'il n'y a pas événement midi plus courte qu'une note 1/64e, et déplacer la position actuelle tick comptage par ce delta fixe.
  • Visitez toutes les pistes et les progrès à la prochaine première tique
+1

Il n'est pas prudent de supposer 1/64e notes, 1/128 existe aussi par exemple. Cependant, il est prudent de supposer que les données sont stockées dans un seul octet. (Vous pouvez évaluer ceux avec la classe MidiMessage). –

+0

@yxk J'aime aussi créer des partitions à partir du fichier Midi. Avez-vous et guidez-moi pour démarrer? – Kalpesh

+0

Anvil Studio dispose d'une option de 60 $ qui permet d'imprimer des partitions à partir de fichiers midi. En outre, quelqu'un sait-il toutes les options java open source lisant un fichier MIDI? –

Répondre

0

En Java, vous pouvez lire un fichier MIDI avec:

try { 
     Sequencer sequencer = MidiSystem.getSequencer(); 
     sequencer.setSequence(MidiSystem.getSequence(yourMidiFile)); 
     sequencer.open(); 
     sequencer.start(); 
     while(true) { 
      if(sequencer.isRunning()) { 
       try { 
        Thread.sleep(1000); // Check every second 
       } catch(InterruptedException ignore) { 
        break; 
       } 
      } else { 
       break; 
      } 
     } 

} catch(Exception e) { 
     System.out.println(e.toString()); 
} finally { 
    // Close resources 
    sequencer.stop(); 
    sequencer.close(); 
} 

Ce code doit lire des fichiers MIDI (même s'il y a plusieurs pistes)

+0

Je ne veux pas nécessairement jouer la séquence, juste obtenir les messages d'événement dans les pistes – yxk

+0

@srand Je suppose que c'est juste un exemple, vous pouvez utiliser les classes MidiSystem, Sequence et Track pour lire les MidiEvents stockés dans le fichier. –

+0

@Jasper Ouais, c'est ce que je fais actuellement, mais c'est une lecture sérielle/séquentielle du fichier midi (et non chronologique). – yxk

3

JFugue peut lire un fichier MIDI et trier les messages dans l'ordre chronologique. Les résultats peuvent être lus comme JFugue MusicStrings (par exemple, C-sharp, 5e octave, note entière = "C# 5w"), ou vous pouvez écrire votre propre ParserListener et l'attacher au MidiParser pour que vous puissiez sortir votre propre texte.