首页 > 解决方案 > HAL 插件缓冲区大小 kAudioDevicePropertyBufferFrameSize

问题描述

我正在开发一个 HAL 虚拟音频设备。

我在从虚拟音频设备到我的应用程序中获取正确的缓冲区大小时遇到​​问题...

我将如何将属性 kAudioDevicePropertyBufferFrameSize 或 kAudioDevicePropertyBufferFrameSizeRange 实现到我的虚拟 HAL 设备...

如果我想将它们实现到此处找到的苹果 nullaudio 示例,我该怎么办:https ://developer.apple.com/documentation/coreaudio/creating_an_audio_server_driver_plug-in

我尝试以与将 kAudioDevicePropertyNominalSampleRate 添加到 nullAudio.c 示例相同的方式将它们添加到我的设备中。但没有成功...

标签: macoscore-audio

解决方案


您必须kAudioDevicePropertyBufferFrameSize在客户端应用程序中进行设置(使用AudioObjectSetPropertyData)。

您无法kAudioDevicePropertyBufferFrameSize从 AudioServerPlugin 控制属性。它仅由客户端进程用于设置其 IO proc 接收的 IO 缓冲区的大小。

当多个客户端同时使用您的设备时,CoreAudio 让它们都使用不同的 IO 缓冲区大小(可能不是彼此的倍数/因子),因此您的插件必须处理各种大小的缓冲区。

资料来源:https ://lists.apple.com/archives/coreaudio-api/2013/Mar/msg00152.html

我不完全确定,但据我所知,您也无法kAudioDevicePropertyBufferFrameSizeRange从 AudioServerPlugin 进行控制。


推荐阅读