iOS5效果单元应使用哪种流格式

时间:2012-01-29 20:35:33

标签: ios signal-processing core-audio audiounit

我正在尝试使用低通滤波器AU。在将流格式设置为过滤器单元时,我不断收到kAudioUnitErr_FormatNotSupported(-10868)错误,但如果我只使用远程IO单元则没有错误。

我正在使用的流格式是(已更新):

myASBD.mSampleRate = hardwareSampleRate;
myASBD.mFormatID = kAudioFormatLinearPCM;      
myASBD.mFormatFlags = kAudioFormatFlagIsSignedInteger;
myASBD.mBitsPerChannel = 8 * sizeof(float);
myASBD.mFramesPerPacket = 1;                                          
myASBD.mChannelsPerFrame = 1;           
myASBD.mBytesPerPacket = sizeof(float) * myASBD.mFramesPerPacket;                                                                            
myASBD.mBytesPerFrame = sizeof(float) * myASBD.mChannelsPerFrame;  

我正在设置这样的过滤器流:

 // Sets input stream type to ASBD
 setupErr = AudioUnitSetProperty(filterUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &myASBD, sizeof(myASBD));
 NSLog(@"Filter in: %i", setupErr);

 //NSAssert(setupErr == noErr, @"No ASBD on Finput");


//Sets output stream type to ASBD
setupErr = AudioUnitSetProperty(filterUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, 0, &myASBD, sizeof(myASBD));
NSLog(@"Filter out: %i", setupErr);
NSAssert(setupErr == noErr, @"No ASBD on Foutput");

3 个答案:

答案 0 :(得分:3)

iOS过滤器音频单元的规范格式是8.24定点(线性PCM),每通道32位,而不是16位。

答案 1 :(得分:2)

使用混响单元的格式是什么?我正在尝试记录缓冲区的奇怪错误....关于这个主题的任何新闻?

答案 2 :(得分:0)

尝试使用规范格式。

size_t bytesPerSample = sizeof (AudioUnitSampleType); //Default is 4 bytes
myASBD.mSampleRate        = hardwareSampleRate;
myASBD.mFormatID          = kAudioFormatLinearPCM;
myASBD.mFormatFlags       = kAudioFormatFlagsAudioUnitCanonical; //Canonical AU format
myASBD.mBytesPerPacket    = bytesPerSample;
myASBD.mFramesPerPacket   = 1;
myASBD.mBytesPerFrame     = bytesPerSample;
myASBD.mChannelsPerFrame  = 2;  //Stereo
myASBD.mBitsPerChannel    = 8 * bytesPerSample;  //32bit integer

您需要确保所有AudioUnits ASBD均匀配置。

如果您正在进行繁重的音频处理,浮动(在iOS5中支持)也不是一个坏主意。

size_t bytesPerSample     = sizeof (float); //float is 4 bytes
myASBD.mSampleRate        = hardwareSampleRate;
myASBD.mFormatID          = kAudioFormatLinearPCM;
myASBD.mFormatFlags       = kAudioFormatFlagIsFloat;
myASBD.mBytesPerPacket    = bytesPerSample;
myASBD.mFramesPerPacket   = 1;
myASBD.mBytesPerFrame     = bytesPerSample;
myASBD.mChannelsPerFrame  = 2;
myASBD.mBitsPerChannel    = 8 * bytesPerSample;  //32bit float