【问题标题】:IOS MusicSequence & MusicPlayer external midi clock syncIOS MusicSequence & MusicPlayer 外部 MIDI 时钟同步
【发布时间】:2014-11-22 00:15:08
【问题描述】:

我正在使用 MusicPlayer 在 MusicSequence 中播放音符:

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 时钟?
或者也许我可以用时钟移动播放光标。

【问题讨论】:

    标签: ios synchronization clock audio-player coremidi


    【解决方案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

    【讨论】:

    • 显然 CAClock 目前在 iOS 上不支持(从 8.3 开始)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多