J'ai téléchargé la bibliothèque midifile de sapp.org aujourd'hui. J'ai créé un fichier de test dans Guitar Pro 5, l'ai exporté en tant que midi et l'ai ouvert avec C++. Jusqu'ici, tout va bien. Je peux lire toutes les pistes et le BPM sont corrects.
Je veux maintenant aller d'un événement à l'autre et lire la clé et la durée de l'événement. Pendant que j'obtiens l'information clé correspondante, la durée retourne zéro.midifile: getDurationInSeconds est 0 pour tous les événements
Mon code est le suivant:
#include <iostream>
#include <string>
#include "../midi/include/Options.h"
#include "../midi/include/MidiFile.h"
int main(int argc, char** argv){
if(argc != 4){
std::cout << "Error: Invalid argument count. Use: ./drumgen srcmid outwav map" << std::endl;
exit(1);
}
MidiFile drumInput;
bool readFile = drumInput.read(argv[1]);
if(!readFile){
std::cout << "Error: File " << argv[1] << " not found." << std::endl;
exit(1);
}
int tracks = drumInput.getTrackCount();
std::cout << "Tracks: " << tracks << std::endl;
for(int i = 0; i < tracks; i++){
int eventCount = drumInput.getEventCount(i);
for(int j = 0; j < eventCount; j++){
MidiEvent ev = drumInput.getEvent(i, j);
int key = ev.getKeyNumber();
int dur = ev.getDurationInSeconds();
std::cout << key << " " << dur << ";";
}
std::cout << std::endl;
std::cout << "Eventcount: " << eventCount << std::endl;
}
return 0;
}
Mon exemple de fichier MIDI est ici: http://wikisend.com/download/186754/drumtest.mid
La bibliothèque se trouve ici: http://midifile.sapp.org/