2011-01-12 30 views
1

objective-Cを使用してMIDIファイル解析を行うにはどうすればよいですか?MIDIファイルの解析

JavaのMIDIファイルの解析には、javax.sound.midiというパッケージがあります。 Objective-cには何かありますか?あなたの誰もが返事を送信する場合

は大きな助けになるだろう。..事前に

感謝。

答えて

0

独自のローダーを使用する場合は、MIDIフォーマットを記述するサイトがたくさんあります。NSXMLParserでロードしやすいMusicXMLを検討してください。私はこのフォーマットについてはあまりよく分かりませんが、達成しようとしているのはまさに私が推薦できるものです。 CoreMidiは、私が知る限り、再生やファイルの解析ではなく、MIDIデバイスとの通信しか処理しません。また、あなたがやっていることと本当の挑戦になることを考えているなら、あなた自身のプレーヤーを書く必要があります。

幸運。

7

CoreMidiを使用してMIDIファイルを解析できます。

MusicSequence s; 
NewMusicSequence(&s); 

NSString *midiFilePath = [[NSBundle mainBundle] 
          pathForResource:path 
          ofType:@"mid"]; 

NSURL * midiFileURL = [NSURL fileURLWithPath:midiFilePath]; 

MusicSequenceFileLoad(s, (CFURLRef)midiFileURL, 0, 0); 

は、その後のトラックを取得:

MusicTrack track = NULL; 

UInt32 tracks; 
MusicSequenceGetTrackCount(s, &tracks); 

for (NSInteger i=0; i<tracks; i++) { 
    MusicSequenceGetIndTrack(s, i, &track); 

    // Create an interator 
    MusicEventIterator iterator = NULL; 
    NewMusicEventIterator(track, &iterator); 
    MusicTimeStamp timestamp = 0; 
    MusicEventType eventType = 0; 

    const void *eventData = NULL; 
    UInt32 eventDataSize = 0; 

    Boolean hasNext = YES; 

    // A variable to store note messages 
    MIDINoteMessage * midiNoteMessage; 

    // Iterate over events 
    while (hasNext) { 

     // See if there are any more events 
     MusicEventIteratorHasNextEvent(iterator, &hasNext); 

     // Copy the event data into the variables we prepaired earlier 
     MusicEventIteratorGetEventInfo(iterator, &timestamp, &eventType, &eventData, &eventDataSize); 

     // Process Midi Note messages 
     if(eventType==kMusicEventType_MIDINoteMessage) { 
      // Cast the midi event data as a midi note message 
      midiNoteMessage = (MIDINoteMessage*) eventData; 

     } 

     // Load the next event 
     MusicEventIteratorNextEvent(iterator); 
    } 
} 
+0

ベン・スマイリーは今日私に約10時間を保存した一般的な考え方は、ファイルからMusicSequenceを得るということです。優れた答え。 – Charlesism