我正在编写一个应用程序,它将从已解析的URL播放MIDI文件。目前,我的代码会下载该文件,然后使用 MusicPlayer 和 MusicSequence 播放该文件。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,
(unsigned long)NULL), ^(void) {
NSData *midData = [[NSData alloc] initWithContentsOfURL:playURL];
NSString *resourceDocPath = [[NSString alloc] initWithString:[[[[NSBundle mainBundle] resourcePath] stringByDeletingLastPathComponent] stringByAppendingPathComponent:@"Documents"]];
NSString *filePath = [resourceDocPath stringByAppendingPathComponent:@"part.mid"];
[midData writeToFile:filePath atomically:YES];
NSLog(@"Downloaded");
dispatch_async(dispatch_get_main_queue(), ^{
NSURL *url = [NSURL fileURLWithPath:filePath];
MusicSequence s;
NewMusicSequence(&s);
MusicSequenceFileLoad(s, (__bridge CFURLRef)(url), 0, 0);
NewMusicPlayer(&midPlayer);
MusicPlayerSetSequence(midPlayer, s);
MusicPlayerPreroll(midPlayer);
MusicPlayerStart(midPlayer);
MusicTrack t;
MusicTimeStamp len;
UInt32 sz = sizeof(MusicTimeStamp);
MusicSequenceGetIndTrack(s, 1, &t);
MusicTrackGetProperty(t, kSequenceTrackProperty_TrackLength, &len, &sz);
midPlaying = YES;
});
});
我正在寻找的是文件到达时的通知,类似于AVPlayer:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(itemDidFinishPlaying:) name:AVPlayerItemDidPlayToEndTimeNotification object:playerItem];
这可能吗?我一直在浏览Apple的文档,但找不到任何东西。
答案 0 :(得分:0)
我不记得有任何内置的方法可以做到这一点,但您可以通过自己轮询播放状态轻松实现它。 CADisplayLink是一个内置的计时器,如果您正在更新进度条或进行其他屏幕绘制(或者像我一样懒惰),您可能想要使用它。
答案 1 :(得分:-1)
面对同样的问题并四处搜寻,我认为没有办法做到这一点。