gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:14:40 25 4
gpt4 key购买 nike

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

非常感谢任何帮助!我没能在网上找到很多关于将 MusicSequence 保存到 .mid 文件的引用...

我在最后得到了错误。

OSStatus status = 0;

MusicSequence newSeq;
status = NewMusicSequence(&newSeq);
if(status){
printf("Error new sequence: %ld\n", status);
status = 0;
} else {
MusicSequenceSetSequenceType(newSeq, kMusicSequenceType_Seconds);
}

MusicTrack tempoTrack;
status = MusicSequenceGetTempoTrack(newSeq, &tempoTrack);
if(status){
printf("Error getting tempo track: %ld\n", status);
status = 0;
}
status = MusicTrackNewExtendedTempoEvent(tempoTrack, 0, 120);
if(status){
printf("Error adding tempo to track: %ld\n", status);
status = 0;
}

MusicTrack thisTrack;
status = MusicSequenceNewTrack(newSeq, &thisTrack);
if(status){
printf("Error adding main track: %ld\n", 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: %ld\n", 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: %ld\n", status);
status = 0;
}

最佳答案

像这样访问你的文档目录

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

如果您想在其中创建一个文件夹来存储您的 MIDI,您需要先检查它是否有效或像这样创建它 Create a folder inside documents folder in iOS apps

并将字符串添加到 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);

关于ios - 使用 MusicSequenceFileCreate() 将 MusicSequence 保存到 .mid 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11497670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com