2017-01-26 3 views
0

저는 오늘 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/

답변

0

미디 파일에서 이벤트가 없습니다 기간; 메모는 두 가지 이벤트로 구성되며 메모 및 메모가 제공됩니다.

메모의 길이를 확인하려면 해당 이벤트 쌍을 검색해야합니다.

명백히 Midifile은 어떤 이유로 자동으로이 작업을 수행하지 않지만 MidiFile::linkNotePairs()으로 전화해야합니다.