【发布时间】:2013-05-10 08:26:51
【问题描述】:
我需要在这种格式之间进行转换:
format.mSampleRate = 44100.0;
format.mFormatID = kAudioFormatLinearPCM;
format.mFormatFlags = kAudioFormatFlagsCanonical | kLinearPCMFormatFlagIsNonInterleaved;
format.mBytesPerPacket = sizeof(AudioUnitSampleType);
format.mFramesPerPacket = 1;
format.mBytesPerFrame = sizeof(AudioUnitSampleType);
format.mChannelsPerFrame = 2 ;
format.mBitsPerChannel = sizeof(AudioUnitSampleType)*8;
还有这种格式
format.mSampleRate = 44100.0;
format.mFormatID = kAudioFormatLinearPCM;
format.mFormatFlags = kAudioFormatFlagsAudioUnitCanonical;
format.mBytesPerPacket = sizeof(AudioUnitSampleType);
format.mFramesPerPacket = 1;
format.mBytesPerFrame = sizeof(AudioUnitSampleType);
format.mChannelsPerFrame = 2;
format.mBitsPerChannel = sizeof(AudioUnitSampleType)*8;
在音频渲染回调的范围内,其中有以下代码,buffer[] 是第二种格式,array[] 需要第一种格式。
for (k = 0; k < channels; k++){
buffer = (AudioUnitSampleType *) ioData->mBuffers[k].mData;
for(j=0; j < samples; j++){
array[j] = buffer[j];
}
}
我知道您可以使用 Apple 转换器单元,但在我的情况下我不能使用 Apple 转换器音频单元(这是有原因的)。
基本上两种格式之间的唯一区别是 format.mFormatFlags 的以下标志 (kAudioUnitSampleFractionBits
如何将 buffer[](包含第二种格式的数据)转换为 array[](包含第一种格式的数据),反之亦然?
谢谢。
【问题讨论】:
-
为什么不能使用苹果转换器?
-
我使用的音频引擎不支持音频渲染中的功能所需的格式(第一种格式)。简而言之,目前没有办法将转换器放入我想要使用的音频引擎中,而不需要破解它。在这个音频引擎之外,在我自己的 AUGraph 和项目中,使用转换器工作。
标签: ios macos core-audio