如何使用objective-C进行midi文件解析?
在Java语言中,为了解析MIDI文件,有一个名为javax.sound.midi的包;Objective-c中有什么东西吗?
如果你们中的任何一个人回复的话会很有帮助..
提前谢谢。
发布于 2012-08-30 09:43:40
您可以使用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);
}
}发布于 2011-05-23 03:58:44
如果你想使用自己的加载器,或者考虑使用NSXMLParser更容易加载的MusicXML,有很多网站描述了MIDI格式。我不太了解这种格式,也不知道你到底想要实现什么,所以这就是我所能推荐的。CoreMidi只处理midi设备的通信,不处理播放或文件解析(据我所知)。如果这是你想做的事情,你也需要编写自己的播放器,这将是真正的挑战。
祝好运。
https://stackoverflow.com/questions/4666935
复制相似问题