macos - HAL 插件缓冲区大小 kAudioDevicePropertyBufferFrameSize
问题描述
我正在开发一个 HAL 虚拟音频设备。
我在从虚拟音频设备到我的应用程序中获取正确的缓冲区大小时遇到问题...
我将如何将属性 kAudioDevicePropertyBufferFrameSize 或 kAudioDevicePropertyBufferFrameSizeRange 实现到我的虚拟 HAL 设备...
如果我想将它们实现到此处找到的苹果 nullaudio 示例,我该怎么办:https ://developer.apple.com/documentation/coreaudio/creating_an_audio_server_driver_plug-in
我尝试以与将 kAudioDevicePropertyNominalSampleRate 添加到 nullAudio.c 示例相同的方式将它们添加到我的设备中。但没有成功...
解决方案
您必须kAudioDevicePropertyBufferFrameSize
在客户端应用程序中进行设置(使用AudioObjectSetPropertyData
)。
您无法kAudioDevicePropertyBufferFrameSize
从 AudioServerPlugin 控制属性。它仅由客户端进程用于设置其 IO proc 接收的 IO 缓冲区的大小。
当多个客户端同时使用您的设备时,CoreAudio 让它们都使用不同的 IO 缓冲区大小(可能不是彼此的倍数/因子),因此您的插件必须处理各种大小的缓冲区。
资料来源:https ://lists.apple.com/archives/coreaudio-api/2013/Mar/msg00152.html
我不完全确定,但据我所知,您也无法kAudioDevicePropertyBufferFrameSizeRange
从 AudioServerPlugin 进行控制。
推荐阅读
- python - 在 Selenium 版本 3.7.0 无头驱动程序 phantomjs 版本 2.1 上启用 Cookie
- java - 如何修复询问用户是否要重新运行的程序?
- javascript - React JS 应用程序中的推荐糖果集成
- visual-studio - C++ 的 GetScreenSize 函数;“没有合适的用户定义转换”(Winforms)
- javascript - 如何根据从下拉列表中选择的值在显示和隐藏元素之间切换?
- go - 你如何将一个非常大的 (>max(int64)) 纳秒 unix 时间戳转换为 time.Time
- python - 计算行中每个纬度和经度之间的距离
- ansible - 异步模块不适用于 become/become_user | Ansible
- ms-access - 访问,如果 *any* 模块上存在 *any* 错误,则报告公式上的 #Name 错误
- c++ - 构建 qt static 5.14.2 并使 qmysql 工作的正确方法