2013-05-21 109 views
2

我想在IOS上的核心音频中实现低通滤波器,但是当我使用下面的代码时,会产生一个错误,指出“操作无法完成”,这是非常不利于解决问题的。而且我可以看到这个操作是非法的。IOS音频单元

任何人都可以帮助我吗?或者把我介绍给一个有关核心音频的体面文档的地方,因为苹果文档确实非常无益。

result = AUGraphNodeInfo(processingGraph, lowpassNode, NULL, &lowpassUnit); 
if(result != noErr) 
{ 
    [self printErrorMessage: @"AUGraphNodeInfo" withStatus: result]; 
    return; 
} 

int byteSize = sizeof(AudioUnitSampleType); 
AudioStreamBasicDescription streamFormat; 
streamFormat.mFormatID   = kAudioFormatLinearPCM; 
streamFormat.mFormatFlags  = kAudioFormatFlagsAudioUnitCanonical; 
streamFormat.mBytesPerPacket = byteSize; 
streamFormat.mFramesPerPacket = 1; 
streamFormat.mBytesPerFrame  = byteSize; 
streamFormat.mChannelsPerFrame = 1; 
streamFormat.mBitsPerChannel = 8 * byteSize; 
streamFormat.mSampleRate  = graphSampleRate; 

NSLog (@"Setting stream format for lowpass unit input bus"); 
result = AudioUnitSetProperty(lowpassUnit, 
           kAudioUnitProperty_StreamFormat, 
           kAudioUnitScope_Input, 
           0, 
           &streamFormat, 
           sizeof (AudioStreamBasicDescription)); 
if (noErr != result) 
{ 
    NSLog(@"%@", [NSError errorWithDomain:NSOSStatusErrorDomain code:result userInfo:nil]); 
    return; 
} 
+0

可能有这么多事情在这里可能会出错。 'result'中的错误代码应该给你一个线索.. – Mar0ux

+0

-10868,我真的不知道我在哪里可以可靠地找到这些代码或它们的意思,当NSLog打印只是说“操作无法完成”,如果有更多信息可以找到,请分享我如何找到这些信息。我甚至找不到在线的代码。 – aerlfredith

+1

这是kAudioUnitErr_FormatNotSupported。我看到有这方面的一些问题 - 检查出来。 – Mar0ux

回答

-2

这是不是一个真正的直接回答你的问题,但你应该真的使用Novocaine。在iOS中手动设置AudioUnits只是一个挫败的练习,除非您使用AU图表做了非常特殊的事情,否则不应该直接执行此操作。对于将Lopass滤波器应用于给定信号这样简单的事情,这个框架确实更可靠。

+0

如果这是不是答案,请添加评论。 –