Ada*_*uer 5 objective-c core-audio ios
如果我打开带有扩展音频文件服务的音频文件,请使用以下客户端数据格式...
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;
Run Code Online (Sandbox Code Playgroud)
并配置一个像这样的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)
Run Code Online (Sandbox Code Playgroud)
那么,如何在mData中排列数据?如果我像这样迭代数据
for (int i = 0; i < frameCount; i++) {
UInt8 somePieceOfAudioData = buffer[i];
}
Run Code Online (Sandbox Code Playgroud)
什么是somePieceOfAudioData.
它是一个样本还是一个框架(左右通道在一起)?如果它是一个样本,那么它是一个样本的样本?例如,如果它是来自右声道的样本,缓冲区[i + 1]是左声道的样本吗?
任何想法,链接?谢谢!
除非kAudioFormatFlagIsNonInterleaved设置了音频数据,否则预期音频数据将被交错.我发现对于Core Audio问题,文档的最佳来源通常是标题. CoreAudioTypes.h包含以下注释:
通常,在使用ASBD时,这些字段描述了由此描述表示的缓冲区中的样本数据的完整布局 - 通常这些缓冲区由AudioBufferList中包含的AudioBuffer表示.
但是,当ASBD具有kAudioFormatFlagIsNonInterleaved标志时,AudioBufferList具有不同的结构和语义.在这种情况下,ASBD字段将描述列表中包含的一个AudioBuffers的格式,并且列表中的每个AudioBuffer被确定为具有单个(单声道)音频数据通道.然后,ASBD的mChannelsPerFrame将指示AudioBufferList中包含的AudioBuffers的总数 - 其中每个缓冲区包含一个通道.这主要用于此列表的AudioUnit(和AudioConverter)表示 - 并且不会在此结构的AudioHardware用法中找到.
在您的特定情况下,缓冲区将包含从左声道开始的交错短路.
| 归档时间: |
|
| 查看次数: |
6657 次 |
| 最近记录: |