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

心灵树

在花了很多时间遍历广泛的Core Audio文档迷宫之后,我仍然不确定应该使用C API的哪一部分来在OS X中创建基本的音频样本I / O流。

当我说“ I / O流”时,是指为特定音频设备生成的低延迟流(具有诸如采样率,通道数,位深等参数)并接收/请求交错音频样本的缓冲区由设备播放。

如果有人可以指出我需要的标头和相关功能(甚至是一个示例),我将非常感激:)谢谢!

PS:通常,我会使用PortAudio来实现此目的,但是在这种情况下,我有兴趣直接访问Core Audio框架,以便帮助朋友创建纯Rust便携式音频平台。另外,我已将此问题发布到Apple开发人员论坛,但尚未收到答复,因此我想在这里尝试。如果有更合适的交易所/论坛要问,请告诉我。

摊位

完成此操作的最简单方法是使用实​​例化输出音频单元AudioComponentInstanceNew创建实例后,安装将提供音频数据(实时)的渲染回调。Apple有两个可能有用的技术说明:TN2097TN2091这样做的代码涉及到一些样板,最终变得有点长。这是如何为默认输出设备创建输出音频单元的示例:

AudioComponent comp;
AudioComponentDescription desc;
AudioComponentInstance auHAL;

//There are several different types of Audio Units.
//Some audio units serve as Outputs, Mixers, or DSP
//units. See AUComponent.h for listing
desc.componentType = kAudioUnitType_Output;

//Every Component has a subType, which will give a clearer picture
//of what this components function will be.
desc.componentSubType = kAudioUnitSubType_HALOutput;

 //all Audio Units in AUComponent.h must use
 //"kAudioUnitManufacturer_Apple" as the Manufacturer
desc.componentManufacturer = kAudioUnitManufacturer_Apple;
desc.componentFlags = 0;
desc.componentFlagsMask = 0;

//Finds a component that meets the desc spec's
comp = AudioComponentFindNext(NULL, &desc);
if (comp == NULL) exit (-1);

 //gains access to the services provided by the component
AudioComponentInstanceNew(comp, &auHAL);

有第三方库可用来简化该过程。似乎最受欢迎的一种是Novocaine,尽管我个人还没有使用过它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

单击使用Web Audio Api播放的流中的声音

如何在OS X上正确创建C ++目标文件(.o)?

全局C ++ I / O对象是否等效或使用CI / O流?

<audio>如何防止流文件缓存?

如何在z / OS上的C ++中使用C套接字API

使用Web Audio API创建完整音轨的波形

I / O流标志如何工作?

使用I / O流的分段错误

如何使用distutils和/或setuptools在Mac OS X上创建.dylib C扩展?

Web Audio API流:为什么dataArray不更改?

任何人都可以帮助我将 C/C++ 程序的 I/O 重定向到文件而不使用 Repl.it 上的文件流

使用Android Youtube API播放实时流

如何获取 <audio> 标签以关闭其与流的连接?

如何使用终端在Mac OS X上运行C程序?

如何通过 Apple AirPlay 使用 Azure 媒体服务实时流

简单的代码即可使用WebAudio API计算Live Mic Audio的频率

使用Web Audio API缓冲音频

使用 Web Audio API 限制播放速率

如何在 Java 中关闭嵌套的 I/O 流

如何知道哪些程序支持流I / O

net.corda.core.flows.UnexpectedFlowEndException-C = GB,L =伦敦,O = NodeA上的交易对手流有内部错误并已终止

如何在 C 中为简单的 XOR 密码创建密钥流生成器?

如何使用Web Audio API发出吉他,钢琴等声音

如何使用Web Audio Api选择目标输出设备

在OS X / Mac上使用Windows蓝牙API?

Web Audio API:有效地播放PCM流

如何在Windows上使用Python创建OS X应用

Web Audio API中的简单传递AudioNode?

如何在Mac OS X 10.9上安装ZeroMQ以在C / C ++程序中使用