【发布时间】:2012-01-13 20:59:02
【问题描述】:
如果我使用以下客户端数据格式打开具有扩展音频文件服务的音频文件...
AudioStreamBasicDescription audioFormat;
memset(&audioFormat, 0, sizeof(audioFormat));
audioFormat.mSampleRate = 44100.0;
audioFormat.mFormatID = kAudioFormatLinearPCM;
audioFormat.mFormatFlags = kAudioFormatFlagIsBigEndian |
kAudioFormatFlagIsSignedInteger |
kAudioFormatFlagIsPacked;
audioFormat.mBytesPerPacket = 4;
audioFormat.mFramesPerPacket = 1;
audioFormat.mChannelsPerFrame = 2;
audioFormat.mBytesPerFrame = 4;
audioFormat.mBitsPerChannel = 16;
然后像这样配置一个 AudioBufferList....
AudioBufferList bufferList;
bufferList.mNumberBuffers = 1;
bufferList.mBuffers[0].mDataByteSize = bufferSize;
bufferList.mBuffers[0].mNumberChannels = audioFormat.mChannelsPerFrame;
bufferList.mBuffers[0].mData = buffer; //malloc(sizeof(UInt8) * 1024 * audioFormat.mBytesPerPacket)
那么,mData 中的数据是如何排列的呢?如果我像这样遍历数据
for (int i = 0; i < frameCount; i++) {
UInt8 somePieceOfAudioData = buffer[i];
}
那么 somePieceOfAudioData 是什么。
是样本还是帧(左右声道一起)?如果它是一个样本,那么它是哪个频道的样本?例如,如果它是来自右通道的样本,那么 buffer[i + 1] 是否会成为左通道的样本?
任何想法,链接?谢谢!
【问题讨论】:
-
“缓冲区可以表示两种不同类型的音频...单个、单声道、非交错的音频通道 [或] 具有任意数量通道的交错音频 — 由 mNumberChannels 字段指定”。我想现在的问题是我怎么知道哪个是哪个,我应该使用多个音频缓冲区吗?例如bufferList.mNumberBuffers = audioFormat.mChannelsPerFrame
标签: objective-c ios core-audio