• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

iphone - iOS,音频队列 : Buffer size is not contant

[复制链接]
菜鸟教程小白 发表于 2022-12-13 07:58:21 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我在我的应用程序中使用音频队列服务。在分配缓冲区时,我将缓冲区大小设置为 30000 个样本:

AudioQueueAllocateBuffer(mQueue, 30000, &mBuffers[i]);

但是回调的后续调用是使用以下inNumberPacketDescriptions进行的:

30000
30000
30000
26928
30000
30000

它们并不总是等于 30000。为什么?

记录格式配置(使用CAStreamBasicDescription):

mRecordFormat.mSampleRate = kSampleRate;    
mRecordFormat.mChannelsPerFrame = 1;
mRecordFormat.mFormatID = kAudioFormatLinearPCM;
mRecordFormat.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked;
mRecordFormat.mBitsPerChannel = 16;
mRecordFormat.mBytesPerPacket = mRecordFormat.mBytesPerFrame = (mRecordFormat.mBitsPerChannel / 8) * mRecordFormat.mChannelsPerFrame;
mRecordFormat.mFramesPerPacket = 1;

3 个缓冲区被使用。



Best Answer-推荐答案


编辑:我看到 iOS 在出现非二次方音频缓冲区时会自发地改变缓冲区大小。 (Another SO question 引用此)无论如何,

30000 是

(a) 巨大的缓冲区大小,以及

(b) 用于缓冲区的奇怪数字。通常它们是 2 的幂 - 即 *=2 来自 64,即 64、128、256、512、1024、2048、4096。我从未见过高于 4096 的,而且我做很多音频工作。

如果您有特殊原因需要使用异常大的缓冲区,则可以使用 nextPowerOfTwo 便利函数或自己硬编码数学。

关于iphone - iOS,音频队列 : Buffer size is not contant,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6318354/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap