Skip to content

Commit 9b28711

Browse files
authored
Merge pull request #7 from Truba/feature/callback-instrument-update
CallbackInstrument - revert of a revert + fix
2 parents 26f2fcd + 447fbf5 commit 9b28711

File tree

1 file changed

+13
-8
lines changed

1 file changed

+13
-8
lines changed

Sources/CAudioKitEX/Nodes/CallbackInstrumentDSP.mm

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,26 @@
1313
// MARK: Member Functions
1414

1515
RingBuffer<AUMIDIEvent> midiBuffer;
16-
NSTimer* timer;
16+
dispatch_source_t timer;
1717

1818
CallbackInstrumentDSP() {
1919
// Hopefully this polling interval is ok.
20-
timer = [NSTimer timerWithTimeInterval:0.01
21-
repeats:true
22-
block:^(NSTimer * _Nonnull timer) {
20+
static dispatch_once_t onceToken;
21+
static dispatch_queue_t timerQueue;
22+
dispatch_once(&onceToken, ^{
23+
timerQueue = dispatch_queue_create("audio.kit.timer.queue", DISPATCH_QUEUE_CONCURRENT);
24+
});
25+
timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, timerQueue);
26+
dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 0.01 * NSEC_PER_SEC, 0);
27+
dispatch_source_set_event_handler(timer, ^{
2328
consumer();
24-
}];
25-
NSRunLoop *runner = [NSRunLoop currentRunLoop];
26-
[runner addTimer:timer forMode: NSDefaultRunLoopMode];
29+
});
30+
dispatch_resume(timer);
2731
}
2832

2933
~CallbackInstrumentDSP() {
30-
[timer invalidate];
34+
dispatch_source_cancel(timer);
35+
timer = nil;
3136
}
3237

3338
void process(FrameRange range) override {

0 commit comments

Comments
 (0)