如何从音频缓冲区读取数据';iOS中的mData字段?

如何从音频缓冲区读取数据';iOS中的mData字段?,ios,file-io,audio,Ios,File Io,Audio,我的音频缓冲区中有某些数据(来自录音)。在我将这个缓冲区写入文件之前,我想对PCM样本做些什么。如何像使用fread一样读取AudioBuffer的mData字段? 我可以在.mm或.m文件中使用fread吗?AudioBuffer结构将其数据保存在内存中,而不是文件中。因此,fread不相关。 mBuffer只是指向数据开头的指针,您可以使用结构的其他两个字段来正确读取数据。发件人: mDataByteSize告诉您缓冲区包含多少字节(这样您就不会通过缓冲区的末尾访问内存),而mNumberC

我的音频缓冲区中有某些数据(来自录音)。在我将这个缓冲区写入文件之前,我想对PCM样本做些什么。如何像使用fread一样读取AudioBuffer的mData字段?
我可以在.mm或.m文件中使用fread吗?

AudioBuffer结构将其数据保存在内存中,而不是文件中。因此,
fread
不相关。
mBuffer
只是指向数据开头的指针,您可以使用结构的其他两个字段来正确读取数据。发件人:

mDataByteSize
告诉您缓冲区包含多少字节(这样您就不会通过缓冲区的末尾访问内存),而
mNumberChannels
告诉您如何对数据重新排序,例如,如果缓冲区包含两个通道,则数据是交错的,即采样1,3,5,。。。来自通道1和2,4,6,。。。第二频道


请记住,您还负责将数据转换为正确的类型。

是的,没错。fread不能被使用。我分配的地址如下:AudBuf.mBuffers[0].mData=inBuffer->mAudioData;其中AudioBfferList AudBuf;和AudioQueueBufferRef inBuffer;这些是声明。然后我做的是short intptr=(short int)AudBuf.mBuffers[0].mData;然后我做*ptr访问音频样本,然后做ptr++访问后续样本,但在日志中我可以看到*ptr的值始终为0。如果您只是通过
AudioQueueBufferRef inBuffer
声明缓冲区,则没有人用样本填充它;你不能指望样品来自任何地方。例如,您可以为缓冲区分配内存,并将其发送到
AudioUnitRender
,以使用来自硬件的样本填充它。这些样本已填充到缓冲区中。我提到,只是为了传达inBuffer的数据类型:)很抱歉造成混淆。
struct AudioBuffer {
   UInt32 mNumberChannels;
   UInt32 mDataByteSize;
   void   *mData;
};