这是上一个问题的后续: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(使用前将#替换为@)