OSX:用于设置 IO 缓冲区长度的 CoreAudio API?

2023-12-01

这是上一个问题的后续:OSX CoreAudio:提前获取数字帧 - 初始化时?

我试图找出可能设置的 AudioUnit API 是什么帧数 or 首选 IO 缓冲区持续时间单个的输入回调HAL音频组件实例OSX(不是插件!)。 虽然我知道有一个关于如何在 iOS 中实现这一点的综合文档,通过AVA音频会话API,我既无法弄清楚也找不到有关在 OSX 中设置这些值的文档,无论是哪个 API。 网络上充满了专家但相互矛盾的陈述,从“有一个音频单元 API 可以请求采样率和首选缓冲持续时间...", to "你绝对可以获得帧数,但仅限于当前的回调调用......".

有没有办法至少获得(并适应)帧数 or the 音频缓冲区长度系统提供的 OSX 中输入选择的采样率?例如,对于 44.1k 及其倍数(这似乎部分有效),以及 48k 及其倍数(这似乎根本不起作用,我不知道允许调整缓冲区的 hack 在哪里这些值的长度)?这是控制台打印输出:

Available 7 Sample Rates
Available Sample Rate value : 8000.000000
Available Sample Rate value : 16000.000000
Available Sample Rate value : 32000.000000
Available Sample Rate value : 44100.000000
Available Sample Rate value : 48000.000000
Available Sample Rate value : 88200.000000
Available Sample Rate value : 96000.000000

.mSampleRate          =   48000.00
.mFormatID            = 1819304813
.mBytesPerPacket      = 8
.mFramesPerPacket     = 1
.mBytesPerFrame       = 8
.mChannelsPerFrame    = 2
.mBitsPerChannel      = 32
.mFormatFlags         = 9
_mFormatHumanReadable = kAudioFormatFlagIsFloat 
    kAudioFormatFlagIsPacked 
    kLinearPCMFormatFlagIsFloat 
    kLinearPCMFormatFlagIsPacked 
    kLinearPCMFormatFlagsSampleFractionShift 
    kAppleLosslessFormatFlag_16BitSourceData 
    kAppleLosslessFormatFlag_24BitSourceData 

expectedInNumberFrames = 512

Couldn't render in current context (Error -10863)

从系统读取预期的 inNumberFrames:

UInt32 expectedInNumberFrames = 0;
UInt32 propSize = sizeof(UInt32);
AudioUnitGetProperty(gInputUnitComponentInstance,
                     kAudioDevicePropertyBufferFrameSize,
                     kAudioUnitScope_Global,
                     0,
                     &expectedInNumberFrames,
                     &propSize);

预先感谢您为我指明了正确的方向!


请参阅此 Apple 技术说明:https://developer.apple.com/library/mac/technotes/tn2321/_index.html#//apple_ref/doc/uid/DTS40013499-CH1-THE_I_O_BUFFER_SIZE

请参阅本技术说明中的 OS X 示例代码,了解 GetIOBufferFrameSizeRange()、GetCurrentIOBufferFrameSize() 和 SetCurrentIOBufferFrameSize()。

请注意,有一个 API 属性返回允许的范围,并且属性设置器上返回错误。另请注意,各种 Mac 省电模式可能会在应用程序运行时更改缓冲区大小,因此实际缓冲区大小(inNumberFrames)可能不会保持不变,甚至在音频单元开始运行之前才知道。

如果您得到不寻常的缓冲区大小(不是 2 的幂),则可能是特定 Apple 产品型号上的实际音频硬件具有固定或有限的音频采样率范围,因此操作系统软件正在用于重新采样,从而如果应用程序请求电路板上实际编解码器芯片不支持的采样率,则根据该硬件调整发送到音频单元回调的缓冲区大小。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OSX:用于设置 IO 缓冲区长度的 CoreAudio API? 的相关文章

随机推荐

  • 谷歌地图多个信息窗口不起作用

    我尝试使用 javascript 将多个标记和信息窗口添加到谷歌地图 下面是代码
  • 在ansible中用多个值替换多个模式

    我在用regex replace在ansible中过滤 我可以让它工作 但它真的很麻烦 这就是我正在做的 set fact variable value regex replace 84 89 regex replace 76 78 reg
  • Javascript 对项目进行排序,排除某些特定项目

    我正在尝试对一些项目进行排序 对地图进行排序 我可以成功对其进行排序 但我想根据其属性排除一些项目 现在我根据属性 价格这样排序 return product attr active f sort function pA pB return
  • yii 模型搜索,带有时间戳的日期范围

    任何人都可以发布如何使用日期选择器过滤网格视图时间戳 Y m d h m s 列 我的模型如下 public function search criteria new CDbCriteria criteria gt condition ti
  • rmarkdown 中的变量作为标题

    In short 如何在 rmarkdown 中的块内打印 html header 使用变量在代码块内创建标头 In long 假设我的数据集中有许多变量 名称也存储在向量 Vars 中 并且每组 3 个变量属于同一主题 我可以创建一个循环
  • 在 XSLT 中使用 HTML 实体(例如 )

    在 XSLT 中包含 html 实体的最佳方式是什么
  • 求和值时返回 NaN 的对象

    我承认我在 JavaScript 和 JSON 方面很弱 我花了很多时间试图弄清楚为什么我的对象中的数字相加时会返回 NaN 考虑到这一点 下面是我的 JSON 存储到一个变量中 var data acc ext id null cat c
  • 'mov cx, [bp+6]' 使用什么寻址模式?

    mov cx bp 6 使用什么寻址模式 处理器是intel 8086 我正在学习Douglas V Hall 的 微处理器和接口 我知道它的内存寻址模式 但不确定它是基于寻址模式还是索引寻址模式 bp 6 是基于寻址模式 来自原始 808
  • laravel 4 关系 - 如何显示用户投票记录的前 5 名排名

    我正在创建一个新闻源系统 正如你很容易猜到的那样 这超出了我的能力范围 请善待我 让我走上正轨 或者提供一些我可以继续做的事情 我有数百个事件 模型名称为 Event1 表 事件 我还有一个数据透视表 用户可以在其中分配任何事件的重要性 值
  • 绑定到画布

    我的类中有一个 canvas 属性 我想知道是否可以将其绑定到 xaml 中的画布 数据绑定在画布中如何工作
  • 从http get请求中读取非英文字符

    我在从 http get 请求获取希伯来字符时遇到问题 我得到像这样的正方形字符 而不是希伯来字符 英文字符没问题 这是我的功能 public String executeHttpGet String urlString throws Ex
  • 为什么我的收集器方法不能并行处理数据?

    然而 假设此归约中使用的结果容器是一个并发可修改的集合 例如 ConcurrentHashMap 在这种情况下 累加器的并行调用实际上可以将它们的结果同时存入同一个共享结果容器中 从而消除了组合器合并不同结果容器的需要 这可能会提高并行执行
  • Visual Studio 正则表达式使用宏删除 VB.NET 代码中的所有注释和空行

    我试图在宏的帮助下删除文件中的所有注释和空行 现在我想出了这个解决方案 它删除了注释 下面描述了一些错误 但无法删除之间的空白行 Sub CleanCode Dim regexComment As String REM d D r n
  • 尝试安装 Matlab 编译器运行时时出现 JRE 错误

    我再一次花了很多时间试图让一些东西发挥作用 但没有成功 我想在未安装 MATLAB 的 Ubuntu 13 04 上安装 MATLAB 编译器运行时 这就是我所做的 我下载了64位Linux版本R2012b 8 0 http www mat
  • 如何在 SharpDevelop 4.2 中启动国际化的 WPF 项目?

    我想创建一个软件 用户可以在多种语言之间进行选择 首先 我想学习如何处理国际化 因为我以前从未这样做过 作为 IDE 我使用 SharpDevelop 或 develop 但你可以拼写它 我想使用 C 和 WPF 因为我目前也在学习 XAM
  • 一个对象上的垃圾回收,C#

    我需要处置一个对象 以便它可以释放它拥有的所有内容 但它没有实现 IDisposable 所以我无法在 using 块中使用它 我怎样才能让垃圾收集器收集它 您可以使用 GC Collect 强制进行收集 使用此功能时要非常小心 因为完整的
  • 我应该使用 EAV 模型吗?

    我正在为电子商务应用程序设计数据库 域 但我很难弄清楚如何存储产品 该网站将销售各种产品 钢笔 丁字裤 纹身 雨伞 应有尽有 这些产品中的每一个都会共享一些共同的属性 高度 宽度 长度 重量等 但有些产品有特殊的数据 例如 钢笔有不同的墨水
  • Visual Studio 2015 OpenSSL

    我试图 include
  • Cytoscape.js 的可扩展性

    我有一个 11MB JSON 图形文件 包含大约 45K 条边和 73K 节点withoutx y 位置 我想使用 BFS 布局显示该图 我正在使用 Promise Deferred 来加载文件 我无法让 Cytoscape 在 chrom
  • OSX:用于设置 IO 缓冲区长度的 CoreAudio API?

    这是上一个问题的后续 OSX CoreAudio 提前获取数字帧 初始化时 我试图找出可能设置的 AudioUnit API 是什么帧数 or 首选 IO 缓冲区持续时间单个的输入回调HAL音频组件实例OSX 不是插件 虽然我知道有一个关于