我们如何使用objective-C来进行midi文件解析?MIDI文件解析
在用于MIDI文件解析的Java中,有一个名为javax.sound.midi的包; Objective-c中有什么吗?
会有很大的帮助,如果你们任何人发送答复..提前
感谢。
我们如何使用objective-C来进行midi文件解析?MIDI文件解析
在用于MIDI文件解析的Java中,有一个名为javax.sound.midi的包; Objective-c中有什么吗?
会有很大的帮助,如果你们任何人发送答复..提前
感谢。
如果您要滚动自己的加载程序,或者考虑使用NSXMLParser更容易加载的MusicXML,有很多站点描述MIDI格式。我对这种格式不太了解,或者你想要达到什么目标,所以我可以推荐。 CoreMidi只处理midi设备的通信,而不是回放或文件解析(据我所知)。如果这就是你想要做的,那么你也需要写自己的球员,这将是真正的挑战。
祝你好运。
您可以使用CoreMidi解析MIDI文件。总的想法是,你从文件中得到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, ×tamp, &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);
}
}
本笑脸今天救了我大约10小时。优秀的答案。 – Charlesism 2017-09-24 01:41:13