Анализ файла MIDI - PullRequest
       3

Анализ файла MIDI

1 голос
/ 12 января 2011

Как мы можем выполнить анализ MIDI-файлов с использованием target-C?

В Java для анализа MIDI-файлов существует пакет с именем javax.sound.midi;Есть ли что-то в Objective-c?

Будет очень полезно, если кто-нибудь из вас отправит ответ.

Заранее спасибо.

Ответы [ 2 ]

7 голосов
/ 30 августа 2012

Вы можете проанализировать MIDI-файл, используя CoreMidi. Общая идея заключается в том, что вы получаете MusicSequence из файла:

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 голосов
/ 22 мая 2011

Существует множество сайтов, описывающих формат MIDI, если вы хотите запустить собственный загрузчик, или рассмотрите MusicXML, который проще загружать с помощью NSXMLParser. Я не знаю много об этом формате, или что именно вы пытаетесь достичь, вот и все, что я могу порекомендовать. CoreMidi работает только с миди-устройствами, а не с воспроизведением или разбором файлов (насколько я знаю). Вам также нужно написать свой собственный плеер, если это то, о чем вы думаете, и это будет настоящим испытанием.

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...