首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MIDI文件解析

MIDI文件解析
EN

Stack Overflow用户
提问于 2011-01-12 17:09:03
回答 2查看 3.1K关注 0票数 2

如何使用objective-C进行midi文件解析?

在Java语言中,为了解析MIDI文件,有一个名为javax.sound.midi的包;Objective-c中有什么东西吗?

如果你们中的任何一个人回复的话会很有帮助..

提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2012-08-30 09:43:40

您可以使用CoreMidi解析MIDI文件。一般的想法是从文件中获取MusicSequence:

代码语言:javascript
复制
MusicSequence s;
NewMusicSequence(&s);

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

NSURL * midiFileURL = [NSURL fileURLWithPath:midiFilePath];

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

然后获取曲目:

代码语言:javascript
复制
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);
    }
}
票数 8
EN

Stack Overflow用户

发布于 2011-05-23 03:58:44

如果你想使用自己的加载器,或者考虑使用NSXMLParser更容易加载的MusicXML,有很多网站描述了MIDI格式。我不太了解这种格式,也不知道你到底想要实现什么,所以这就是我所能推荐的。CoreMidi只处理midi设备的通信,不处理播放或文件解析(据我所知)。如果这是你想做的事情,你也需要编写自己的播放器,这将是真正的挑战。

祝好运。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4666935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档