IOS音乐序列&;MusicPlayer外部midi时钟同步
我正在使用MusicPlayer播放MusicSequence中的音符:IOS音乐序列&;MusicPlayer外部midi时钟同步,ios,synchronization,clock,audio-player,coremidi,Ios,Synchronization,Clock,Audio Player,Coremidi,我正在使用MusicPlayer播放MusicSequence中的音符: NewMusicSequence(&sequence); MusicSequenceFileLoad(sequence, (__bridge CFURLRef) midiFileURL, 0, 0); // Set the endpoint of the sequence to be our virtual endpoint MusicSequenceSetMIDIEndpoint(sequence, virtu
NewMusicSequence(&sequence);
MusicSequenceFileLoad(sequence, (__bridge CFURLRef) midiFileURL, 0, 0);
// Set the endpoint of the sequence to be our virtual endpoint
MusicSequenceSetMIDIEndpoint(sequence, virtualEndpoint);
// Create a new music player
MusicPlayer p;
// Initialise the music player
NewMusicPlayer(&p);
// Load the sequence into the music player
MusicPlayerSetSequence(self.player, sequence);
// Called to do some MusicPlayer setup. This just
// reduces latency when MusicPlayerStart is called
MusicPlayerPreroll(self.player);
-(void)play {
MusicPlayerStart(self.player);
}
我想说,它工作得很好,但我不想使用内部时钟
如何使用外部midi时钟?或者我可以用时钟移动播放光标。您可以使用MusicSequenceSetMIDIEndpoint(序列,endpointRef) 然后创建一个midi时钟
CAClockRef mtcClockRef;
OSStatus err;
err = CAClockNew(0, &mtcClockRef);
if (err != noErr) {
NSLog(@"\t\terror %ld at CAClockNew()", err);
}
else {
CAClockTimebase timebase = kCAClockTimebase_HostTime;
UInt32 size = 0;
size = sizeof(timebase);
err = CAClockSetProperty(mtcClockRef, kCAClockProperty_InternalTimebase, size, &timebase);
if (err)
NSLog(@"Error setting clock timebase");
设置同步模式
UInt32 tSyncMode = kCAClockSyncMode_MIDIClockTransport;
size = sizeof(tSyncMode);
err = CAClockSetProperty(mtcClockRef, kCAClockProperty_SyncMode, size, &tSyncMode);
然后设置时钟以使用midi端点
err = CAClockSetProperty(mtcClockRef, kCAClockProperty_SyncSource, sizeof(endpointRef), endpointRef);
这里有一些参考代码->显然CAClock目前在iOS上不受支持(从8.3开始)