저는 오늘 sapp.org에서 midifile 라이브러리를 다운로드했습니다. 기타 pro 5에서 테스트 파일을 만들고 midi로 내 보낸 다음 C++로 열었습니다. 지금까지 그렇게 좋았습니다. 나는 모든 트랙을 읽을 수 있고 BPM은 정확하다.
이제 이벤트에서 이벤트로 이동하여 키와 이벤트 기간을 읽으려고합니다. 키 정보를 얻는 동안 지속 시간은 0을 반환합니다.midifile : getDurationInSeconds는 모든 이벤트에 대해 0입니다.
#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;
}
내 예를 들어, MIDI 파일이 여기에 있습니다 : : http://wikisend.com/download/186754/drumtest.mid
라이브러리는 여기에서 찾을 수 있습니다 : 다음과 같이
내 코드는 http://midifile.sapp.org/