gpt4 book ai didi

ios - 试图理解为什么 AudioBuffer 的 mDataByteSize 属性正在改变

转载 作者:行者123 更新时间:2023-11-28 17:51:59 24 4
gpt4 key购买 nike

我有以下代码用于将 WAV 文件的内容读入 SInt16 数组:

AudioBufferList *buffers;
UInt32 ablSize = offsetof(AudioBufferList, mBuffers) +
(sizeof(AudioBuffer) * 1);
buffers = malloc(ablSize);

buffers->mNumberBuffers = 1;
buffers->mBuffers[0].mNumberChannels = 1;
buffers->mBuffers[0].mDataByteSize = dataByteSize;

UInt32 dataSize = (UInt32)fileLengthFrames * sizeof(SInt16);

self.extractedSamples = malloc(dataSize);
self.extractedByteCount = dataByteSize;

UInt32 totalFramesRead = 0;
do {
UInt32 framesRead = (UInt32)fileLengthFrames - totalFramesRead;
buffers->mBuffers[0].mData = self.extractedSamples +
(totalFramesRead * sizeof(SInt16));
ExtAudioFileRead(eaf, &framesRead, buffers);
totalFramesRead += framesRead;

} while (totalFramesRead < fileLengthFrames);

free(buffers);

这对于持续时间小于 0.5 秒的文件来说效果很好。但对于我正在测试的较长文件,应用程序崩溃并在 do 循环内出现错误访问错误。对于这个文件,dataByteSize 是 60472,在循环开始时 buffer->mBuffers[0].mDataByteSize 也是 60472。但是当崩溃发生时,我看到buffer->mBuffers[0].mDataByteSize 已更改为 57300,这大概就是现在发生崩溃的原因。

有人知道这个值在循环中间是如何/为什么改变的吗?我的一种猜测是我没有正确保留 AudioBufferList 并且 mDataByteSize 的内存空间不知何故被覆盖了。

编辑:当此代码使用相同文件在模拟器上运行时,它工作正常。

最佳答案

在每次调用 ExtAudioFileRead 之前,应将 mDataByteSize 设置为 framesRead * sizeof(SInt16) * channelCount

关于ios - 试图理解为什么 AudioBuffer 的 mDataByteSize 属性正在改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30171498/

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