关于 iPhone SDK 的 ExtAudioFileRead 和 AudioBuffer 的问题
我正在开发一个使用扩展音频文件服务的 iPhone 应用程序。我尝试使用 ExtAudioFileRead 读取音频文件,并将数据存储在 AudioBufferList 结构中。
AudioBufferList 定义为:
struct AudioBufferList {
UInt32 mNumberBuffers;
AudioBuffer mBuffers[1];
};
typedef struct AudioBufferList AudioBufferList;
AudioBuffer 定义为
struct AudioBuffer {
UInt32 mNumberChannels;
UInt32 mDataByteSize;
void* mData;
};
typedef struct AudioBuffer AudioBuffer;
我想操作 mData 但我想知道 void*意味着。为什么它是无效的*?如何确定 mData 中实际存储的数据类型?
I'm developing an iPhone app that uses the Extended Audio File Services. I try to use ExtAudioFileRead to read the audio file, and store the data in an AudioBufferList structure.
AudioBufferList is defined as:
struct AudioBufferList {
UInt32 mNumberBuffers;
AudioBuffer mBuffers[1];
};
typedef struct AudioBufferList AudioBufferList;
and AudioBuffer is defined as
struct AudioBuffer {
UInt32 mNumberChannels;
UInt32 mDataByteSize;
void* mData;
};
typedef struct AudioBuffer AudioBuffer;
I want to manipulate the mData but I wonder what does the void* mean. Why is it void*? How can I decide what data type is actually stored in mData?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
mData字段被标记为void,因为不同的音频格式有不同的存储要求。
基本上在C中,void指针可以指向任何东西。
所以你可以说
,然后当你想使用它时,将其转换为你想要的数据类型。
the mData field is marked as void because different audio formats have different storage requirements.
basically in C a void pointer can point to anything.
so you could say
and then when you want to use it cast it to the data type you want.
您可以确定 mData 数组中元素的大小(帧的大小),然后
您可以将其解释为具有相同大小的任何有符号类型(通常每帧 4 个字节,可以是 Sint32 或 Float32)。
You can determine size of element in mData array (size of frame) with
Then you can interpret it to any signed type with same size (for usual 4 bytes per frame it can be Sint32 or Float32).