gpt4 book ai didi

c++ - 覆盖 AudioBufferList.mBuffers[0].mData?

转载 作者:行者123 更新时间:2023-11-27 23:53:20 24 4
gpt4 key购买 nike

我有一个带有渲染回调的 RemoteIO 音频单元。我已经有一个渲染音频缓冲区,出于性能原因,我想避免使用 memcpy

OSStatus FMixerPlatformAudioUnit::AudioRenderCallback(void* RefCon, AudioUnitRenderActionFlags* ActionFlags,
const AudioTimeStamp* TimeStamp, UInt32 BusNumber,
UInt32 NumFrames, AudioBufferList* IOData)
{
IOData->mBuffers[0].mData = RenderedBufferPtr;
RefreshRenderedBufferPtr();
}

这有效而且听起来不错。但是,我担心通过覆盖 IOData->mBuffers[0].mData,我可能会离开 mData 指向悬空的原始缓冲区,因此可能导致内存泄漏。在 InputCallback 过程中重写 IOData->mBuffers[0].mData 是否有问题?

最佳答案

在任何当前的 Apple arm64 CPU 上,每个样本的 memcpy 时间大约比采样率周期快 10,000 倍,因此不太可能是音频单元回调率的可测量百分比。因此交换缓冲区的执行速度不会明显加快。

但更大的问题是 NumFrames 不能保证在 iOS 中的每个连续音频单元回调之间保持相同,因此仅交换缓冲区指针与复制请求的样本或音频帧的确切数量不同。根据 iOS 设备上的其他事件(省电模式、通知、电话、按键等),您的音频会出现故障

此外,如果你没有分配它,你就不知道你换出的 IOData 缓冲区的内存分配大小,如果音频单元采用不同的大小,这可能是内存损坏的另一个可能来源。

关于c++ - 覆盖 AudioBufferList.mBuffers[0].mData?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44578439/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com