Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让AudioToolbox MusicTrack在iOS 9.0中循环?_Ios_Loops_Ios9_Audiotoolbox - Fatal编程技术网

如何让AudioToolbox MusicTrack在iOS 9.0中循环?

如何让AudioToolbox MusicTrack在iOS 9.0中循环?,ios,loops,ios9,audiotoolbox,Ios,Loops,Ios9,Audiotoolbox,此代码在iOS 8.4中循环MusicTrack时运行良好,但在使用MusicLayerSetSequence设置序列时,将在iOS 9.0下停止应用程序 var loopInfo = MusicTrackLoopInfo(loopDuration: 1.0,numberOfLoops: 0) MusicTrackSetProperty(track, UInt32(kSequenceTrackProperty_LoopInfo), &loopInfo, UInt3

此代码在iOS 8.4中循环MusicTrack时运行良好,但在使用MusicLayerSetSequence设置序列时,将在iOS 9.0下停止应用程序

var loopInfo = MusicTrackLoopInfo(loopDuration: 1.0,numberOfLoops: 0)
            MusicTrackSetProperty(track, UInt32(kSequenceTrackProperty_LoopInfo), &loopInfo, UInt32(sizeofValue(loopInfo)))

在iOS 9中,还有其他方法可以让曲目循环吗?

其他人也有类似的问题:当前解决方案的总体思路是在播放标记到达曲目末尾后将其设置回0

例如,在启动音乐播放器时使用以下方法:

MusicTrack track = NULL;
MusicTimeStamp trackLen = 0;
UInt32 trackLenLen = sizeof(trackLen);
//Get main track
MusicSequenceGetIndTrack(musicSequence, 0, &track);
//Get length of track
MusicTrackGetProperty(track, kSequenceTrackProperty_TrackLength, &trackLen, &trackLenLen);
//Create UserData for User Event with any data
static MusicEventUserData userData = {1, 0x09};
//Put new user event at the end of the track
MusicTrackNewUserEvent(track, trackLen, &userData);
//Set a callback for when User Events occur
MusicSequenceSetUserCallback(musicSequence, sequenceUserCallback, musicPlayer);
然后你可以有一个回调函数:

static void sequenceUserCallback(void *inClientData,
                             MusicSequence             inSequence,
                             MusicTrack                inTrack,
                             MusicTimeStamp            inEventTime,
                             const MusicEventUserData *inEventData,
                             MusicTimeStamp            inStartSliceBeat,
                             MusicTimeStamp            inEndSliceBeat)
{
    [[NSOperationQueue mainQueue] addOperationWithBlock:^ {
        MusicPlayerSetTime((MusicPlayer) inClientData, 0.0);
    }];
}

这将使播放机返回到零。

谢谢,我也在关注这条线索。不过,你建议的变通办法对我没有帮助。我在我的应用程序中使用循环来计时节拍器-因此没有循环就没有计时。我现在正在寻找一个工作循环,因此如果我发现一些有用的东西,我会发布它,我们会看看它是否对你也有帮助。我已经添加了对我有用的东西,如果它对你也有用,请告诉我。