代码之家  ›  专栏  ›  技术社区  ›  Bijoy Thangaraj

无法从MusicSequence生成MIDI文件

  •  0
  • Bijoy Thangaraj  · 技术社区  · 8 年前

    我正在尝试从一个简单的 MusicSequence . 这是我的代码:

    MusicSequence mySequence;
    MusicTrack myTrack;
    NewMusicSequence(&mySequence);
    MusicSequenceNewTrack(mySequence, &myTrack);
    
    MIDINoteMessage noteMessage;
    MusicTimeStamp timestamp = 0;
    noteMessage.channel = 0;
    noteMessage.note = 60;
    noteMessage.velocity = 90;
    noteMessage.releaseVelocity = 0;
    noteMessage.duration = 4;
    
    if (MusicTrackNewMIDINoteEvent(myTrack, timestamp, &noteMessage) != noErr) NSLog(@"ERROR creating the note");
    else NSLog(@"Note added");
    
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                        NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    
    NSString *midiPath = [documentsDirectory
                        stringByAppendingPathComponent:@"testfile.mid"];
    CFURLRef midiURL = (__bridge CFURLRef)([[NSURL alloc] initFileURLWithPath:midiPath]);
    
    OSStatus status = 0;
    
    status = MusicSequenceFileCreate(mySequence, midiURL, kMusicSequenceFile_MIDIType, kMusicSequenceFileFlags_EraseFile, 0);
    
    if(status != noErr){
        printf("Error on create: %d\n", (int)status);
        status = 0;
    }
    

    我的代码在时失败 MusicSequenceFileCreate .

    这是我得到的错误:

    线程1:exc_bad_access(code=exc_i386_gpflt)

    我怎样才能克服这个问题?

    1 回复  |  直到 8 年前
        1
  •  0
  •   Bijoy Thangaraj    8 年前

    这似乎是MIDI URL定义错误。我把那句话改成了这个,现在就行了。

    CFURLRef midiURL = (__bridge CFURLRef)([NSURL fileURLWithPath:midiPath]);