【问题标题】:MusicPlayer Delegate, Music Player Did End Playing File Notification or WarningMusicPlayer Delegate,音乐播放器结束播放文件通知或警告
【发布时间】:2013-12-30 17:47:55
【问题描述】:

我正在编写一个应用程序,它将从解析的 URL 播放 MIDI 文件。目前,我的代码下载文件,然后使用 MusicPlayerMusicSequence 播放它。

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 的文档,但找不到任何东西。

文档:MusicSequence ReferenceMusicPlayer Reference

【问题讨论】:

    标签: ios objective-c xcode midi coremidi


    【解决方案1】:

    我不记得曾经见过任何内置的方法来做到这一点,但您可以通过自己轮询播放状态轻松实现它。 CADisplayLink 是一个内置计时器,如果您正在更新进度条或进行其他屏幕绘图(或者只是像我一样懒惰),您可能想要使用它。

    【讨论】:

    • 很遗憾,轮询也不起作用。一旦你调用了 MusicPlayerStart(),MusicPlayerIsPlaying() 将返回 true,直到你调用 MusicPlayerStop(),无论是否还有事件要播放。
    【解决方案2】:

    遇到同样的问题并四处搜索,我认为没有办法做到这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-13
      • 2012-06-19
      • 1970-01-01
      • 2014-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多