这个问题与插件无关,而与独立应用程序设计有关,并且与我之前问过的几个问题有关。

我必须编写一个多线程音频合成函数,该函数的数据处理量远远超过CoreAudio渲染线程所能容纳的数量:实时成千上万个独立的幅度和相位插值采样准确的正弦波振荡器。 借助所有可用的优化功能,这需要比任何单个处理器内核都承受更多的CPU能力。

我正在竭尽全力地学习它,但这似乎是一堵墙,而不是曲线。 使用者线程可能是一个接受AudioBufferList iodata等的简单CA实时优先级呈现回调,但是… 使用者线程应该是什么? 如果选择另一个AudioComponent,则没有比将其全部放在输出线程上更好的了-它只会变得更加复杂并引入额外的延迟。

如果将n个并行AudioComponents放入一个 ,以提供一个环形缓冲区,该环形缓冲区提供给使用者线程,那么如何保证它不会出现在同一个线程中,保持同步并精确采样呢?

如果编写具有连接输出的n个传统POSIX线程,如何实现CoreAudio拉模型与这样的推模型实时共存?

有没有这样的免费示例代码? 是否有编写此类代码的参考书,教科书或教程? 我尚未找到任何公开可用的信息。 这让我有点奇怪,以前没有问过这样的问题吗?

提前致谢!

#1楼 票数:1 已采纳

我的策略是让一个或多个单独的线程实时生成LPCM音频,并将其写入适当大小的环形缓冲区。 核心音频线程将从此环形缓冲区读取。

如果阅读器(核心音频线程)请求的音频多于可用音频,则您将退出( 缓冲区欠载 ),因为阅读器无法等待。 这表明您需要更大的缓冲区,或者您的音频生成算法不是实时的并且需要优化。

如果写程序在写完后尝试写入环形缓冲区,则最早的音频将被覆盖,并且您还会遇到另一个故障,这次是通过溢出。 在这种情况下,您的音频生成代码运行得太快,需要学习如何等待。 在这里,通过条件变量来增加写等待性是很方便的。

我知道两个很酷的环形缓冲区实现,它们使用虚拟内存技巧来有效地实现模块化内存访问:

如果您正在寻找更轻便的东西,可以使用面向类Unix系统的CBuffer和适用于Windows的Magic Ring Buffer

然而! 您不必使用棘手的MMU环形缓冲区,可以根据需要使用普通的旧便携式C版本。

  ask by user3078414 translate from so

未解决问题?本站智能推荐:

1回复

音频样本制作者多线程OSX

该问题是先前问题( 带有OSX AudioComponent使用者线程的音频生产者线程和C中的回调 )的后续问题,其中包括一个测试示例,该示例可以正常工作并按预期运行,但不能完全回答该问题。 我已对问题做了实质性的表述 ,并对示例进行了重新编码,以使其仅包含纯C代码。 (我发现在前面的示例中
1回复

AVCaptureOutput通过TPCircularBuffer到音频单元回调

我正在构建AUGraph,并尝试通过AVCaptureAudioDataOutput委托方法从输入设备获取音频。 AVCaptureSession的使用是此处解释的问题的结果 。 我成功地通过CARingbuffer通过这种方法构建了一个音频播放,如《 学习核心音频 》一书中所述。 但
2回复

如何使用Apple的Core Audio C API在OS X上创建简单的实时I / O流?

经过一段时间遍历广泛的Core Audio文档迷宫之后,我仍然不确定在OS X中创建基本音频样本I / O流时应该使用哪个C API部分。 当我说“I / O流”时,我的意思是为特定音频设备生成的低延迟流(具有诸如采样率,通道数,位深度等的参数)和接收/请求交错音频样本的缓冲区由设备播放。
1回复

如何从外部音频接口访问带有核心音频的单个通道

我正在学习CoreAudio,并且只浏览了Apple文档中的一些示例,并弄清楚了如何进行设置以及不进行设置。 到目前为止,我已经能够连接到默认的已连接音频输入设备,并将其输出到默认的输出设备。 我连接了一个2通道接口,并且能够输出它的输入并输出它。 但是,我正在搜索他们的API参考和示
1回复

核心音频环形缓冲区数据显示为空白

我正在编写“学习核心音频:Mac 和 iOS 音频编程实践指南”一书中的演示。 第 8 章展示了如何设置一个简单的 AudioUnit 图以从 AUHAL 输入单元播放到输出单元。 这种设置实际上并没有连接音频单元; 相反,两个单元都使用回调并通过 CARingBuffer 实例传递音频数据。 我正
1回复

学习核心音频第8章示例未运行

我只是在加快核心音频的速度,并且正在浏览Adamson和Avila撰写的“学习核心音频”中的所有示例。 第一个不起作用的示例(使用示例代码和网站上的项目)在第8章中。它根本不起作用。 有时但并非每次运行程序时,我也会在最后一行收到错误 CH08_AUGraphInput(97
2回复

使用Core Audio实时生成正弦音

我想使用苹果核心音频框架创建一个实时正弦发生器。 我想做低水平的事情,以便我可以学习和理解基本知识。 我知道使用PortAudio或Jack可能会更容易,并且我会在某些时候使用它们,但是我想先使其工作,这样我才能自信地了解基本原理。 我现在在这个主题上搜索了几天,但是似乎没有人使用
1回复

使用Core Audio从默认线路输出声音设备中提取浮动

我需要使用Core Audio从声音输出设备中提取浮动信息的帮助/指导。 我已经阅读了有关从AIFF提取花车的类似文章。 我的最终目标是: iTunes正在播放歌曲 使用Core Audio的C / C ++程序从声音设备中提取浮点值(实时) 使用生成的浮点矢量对浮