使用MusicSequenceFileCreate()将MusicSequence保存到.mid文件



我目前正在开发一个应用程序,该应用程序需要根据用户输入创建MusicSequence,而我目前在MusicSequenceFileCreate()上遇到-1错误。MusicSequence引用中没有将-1列为错误-我是否使用了错误的格式来打印OSStatus?

非常感谢您的帮助!我在网上找不到太多关于将MusicSequence保存到.mid文件的参考。。。

我在最后得到了错误。

OSStatus status = 0;
MusicSequence newSeq;
status = NewMusicSequence(&newSeq);
if(status){
    printf("Error new sequence: %ldn", status);
    status = 0;
} else {
    MusicSequenceSetSequenceType(newSeq, kMusicSequenceType_Seconds);
}
MusicTrack tempoTrack;
status = MusicSequenceGetTempoTrack(newSeq, &tempoTrack);
if(status){
    printf("Error getting tempo track: %ldn", status);
    status = 0;
}
status = MusicTrackNewExtendedTempoEvent(tempoTrack, 0, 120);
if(status){
    printf("Error adding tempo to track: %ldn", status);
    status = 0;
}
MusicTrack thisTrack;
status = MusicSequenceNewTrack(newSeq, &thisTrack);
if(status){
    printf("Error adding main track: %ldn", status);
    status = 0;
}
for(int i = 0; i<convertThis.melodyPoints.count; i++) {
    MIDINoteMessage thisMessage;
    thisMessage.note = thisNote.midiNoteNumber;
    thisMessage.duration = thisNote.duration;
    thisMessage.velocity = 120;
    thisMessage.releaseVelocity = 0;
    thisMessage.channel = 1;
    status = MusicTrackNewMIDINoteEvent(thisTrack, thisNoteBegin, &thisMessage);
    if(status){
        printf("Error adding midi note: %ldn", status);
        status = 0;
    }
}
NSURL *thisurl = [NSURL URLWithString:[@"~/Documents" stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.mid", convertThis.title]]];
status = MusicSequenceFileCreate(newSeq, (__bridge CFURLRef) thisurl, kMusicSequenceFile_MIDIType, kMusicSequenceFileFlags_EraseFile, 0);
if(status != noErr){
    printf("Error on create: %ldn", status);
    status = 0;
}

访问像这样的文档目录

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                         NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

如果你想在其中创建一个文件夹来存储你的MIDI,你需要首先检查它是否有效,或者像这样创建它在iOS应用程序中的文档文件夹中创建一个

并将字符串添加到CFURLRef中,以便在MusicSequenceFileCreate中直接使用

NSString *midiPath = [documentsDirectory
                               stringByAppendingPathComponent:[NSString stringWithFormat:@"/MIDIs/%@.mid",convertThis.title]];
CFURLRef midiURL = (CFURLRef)[[NSURL alloc] initFileURLWithPath:midiPath];

然后只是

status = MusicSequenceFileCreate(newSeq, midiURL, kMusicSequenceFile_MIDIType, kMusicSequenceFileFlags_EraseFile, 0);

最新更新