【发布时间】:2016-04-11 10:47:08
【问题描述】:
这是对上一个问题的跟进: OSX CoreAudio: Getting inNumberFrames in advance - on initialization?
我正在试图弄清楚 AudioUnit API 可能设置 inNumberFrames 或 preffered IO 缓冲区持续时间 的输入回调OSX 中的单个 HAL 音频组件实例(不是插件!)。 虽然我知道有一个关于如何在 iOS 中通过 AVAudioSession API 实现这一点的综合文档,但我既无法弄清楚也找不到关于在OSX,无论哪个 API。 网络上充斥着专家但相互矛盾的陈述,从“有一个音频单元 API 可以请求采样率和首选的缓冲持续时间......”,到“你绝对可以得到帧数,但仅适用于当前回调调用..."。
有没有办法至少获得(并适应)系统提供的 inNumberFrames 或 音频缓冲区长度,用于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);
提前感谢您为我指明正确的方向!
【问题讨论】:
标签: macos core-audio audiounit