2014-09-26 60 views
3

我使用MusicPlayer彈奏音符這MusicSequenceIOS MusicSequence&MusicPlayer外部MIDI時鐘同步

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時鐘?或者,也許我可以以某種方式移動光標與時鐘。

回答

1

您可以使用MusicSequenceSetMIDIEndpoint(sequence,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); 

這裏有一定的參考代碼VVMIDINode - >https://github.com/mrRay/vvopensource/blob/master/VVMIDI/FrameworkSrc/VVMIDINode.h

+0

顯然CAClock目前不支持iOS(截至8.3) – 2015-05-23 00:51:25