OSX - 将midiReadProc结果传递给C中的主线程

时间:2016-01-30 18:38:58

标签: macos core-audio coremidi

我在OSX / Darwin中有以下程序结构:

生产者线程生成数据并将其提供给循环缓冲区。

消费者实时CoreAudio线程将数据从循环缓冲区渲染为DAC。

它们通过dispatch_semaphores进行协调。

生产者线程参数可以由GUI控制(GLUT,非Cocoa) 或者通过MIDI。

就控制GUI的生产者形式而言,事情很有效。

然而, midiReadProc() 回调"生活"在它自己的实时线程,从哪个生产者线程 既不应该控制也不应该通知,但MIDI数据应该以某种方式传递给主线程, 生产者线程应该从中排队和更新。

有没有办法在没有特定OSX的情况下这样做?

提前致谢。

2 个答案:

答案 0 :(得分:3)

执行此操作的一种方法可能是使用无锁圆形fifo来传入MIDI数据。然后,音频制作者线程可以在为实时消费者生成下一批数据之前轮询此fifo。

答案 1 :(得分:1)

我这样做的方法是使用环形缓冲区并将这些midi消息复制到回调中的环形缓冲区。然后在主线程上轮询环形缓冲区并处理数据。