小编tne*_*nev的帖子

处理音频单元渲染周期中不同数量的样本

这是在推出 iPhone 6s 和 6s+ 后出现在我的应用程序中的一个问题,我几乎肯定这是因为新型号的内置麦克风卡在 48kHz 的录制频率上(您可以在此处阅读更多相关信息))。澄清一下,这对于我测试过的以前的手机型号从来都不是问题。我将在下面详细介绍我的音频引擎实现以及不同点的不同结果,具体取决于手机型号。

所以这是发生了什么 - 当我的代码在以前的设备上运行时,我在 AVCaptureDevice 返回的每个 CMSampleBuffer 中获得一致数量的音频样本,通常是 1024 个样本。我的音频单元图的渲染回调提供了一个适合 1024 帧空间的缓冲区。一切都很好,听起来很棒。

然后 Apple 不得不去制造这个该死的 iPhone 6s(开玩笑,这很棒,这个错误刚刚出现在我的脑海中),现在我得到了一些非常不一致和令人困惑的结果。AVCaptureDevice 现在在捕获 940 或 941 个样本之间变化,并且渲染回调现在开始在第一次调用时为 940 或 941 个样本帧创建一个缓冲区,但随后立即开始增加它在后续调用中保留的空间,最多可达 1010、1012、或 1024 个样本帧,然后留在那里。它最终保留的空间因会话而异。老实说,我不知道这个渲染回调如何确定它为渲染准备了多少帧,但我猜这与渲染回调打开的音频单元的采样率有关。

无论设备是什么,CMSampleBuffer 的格式都以 44.1kHz 采样率出现,所以我猜在我什至在 6s 上从 AVCaptureDevice 接收 CMSampleBuffer 之前发生了某种隐式采样率转换。唯一的区别是 6s 的首选硬件采样率为 48kHz,而早期版本为 44.1kHz。

我已经读到,使用 6s 时,您必须准备好为返回的不同数量的样本腾出空间,但是我上面描述的那种行为正常吗?如果是,如何调整我的渲染周期来处理这个问题?

如果您想进一步研究,下面是处理音频缓冲区的代码:

音频样本缓冲区,即CMSampleBufferRefs,通过麦克风AVCaptureDevice进入并发送到我的音频处理函数,该函数对捕获的名为 audioBuffer 的 CMSampleBufferRef 执行以下操作

CMBlockBufferRef buffer = CMSampleBufferGetDataBuffer(audioBuffer);
        
CMItemCount numSamplesInBuffer = CMSampleBufferGetNumSamples(audioBuffer);
AudioBufferList audioBufferList;
        
CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer(audioBuffer,
                                                            NULL,
                                                            &audioBufferList,
                                                            sizeof(audioBufferList),
                                                            NULL, …
Run Code Online (Sandbox Code Playgroud)

iphone audio core-audio ios

4
推荐指数
1
解决办法
1184
查看次数

什么是Swift中的"标记协议"?

我正在搜索一些Swift开源代码,现在看到"标记协议"一词弹出两次.从上下文我推断它是一个出于代码可读性原因而存在的协议,而不是实际上强制执行规则.任何人都可以确切地解释什么是"标记协议"以及为什么使用它?

terminology protocols swift

2
推荐指数
1
解决办法
504
查看次数

iOS视频处理的最佳实践

我一直在研究使用最新技术在iOS上进行视频处理的最佳方法,并得到了一些不同的结果.似乎有办法用Core Image,OpenGL和一些开源框架来做到这一点.我想避开开源选项,以便我可以了解幕后发生的事情,所以问题是:

iOS上预先录制的视频处理(滤镜,亮度,对比度等)的最佳选择是什么?

我知道Core Image有很多很棒的内置过滤器,并且有一个相对简单的API,但我没有找到任何有关如何将视频分解为图像然后重新编码的资源.对此主题的任何帮助都非常有用,谢谢.

video video-processing core-image ios opengl-es-2.0

1
推荐指数
1
解决办法
1963
查看次数