如何设置kAudioUnitSubType_Distortion

我正在尝试编写一个添加声音效果的iOS应用程序。 我试图在auconverter和remoteIO之间放置一个效果audio单元(例如,失真和混响)。 build立了所谓的AU之后,就没有声音了。

NewAUGraph(&mAuGraph); AUGraphOpen(mAuGraph); AUNode remoteOutputNode, converterNode, effectNode; AudioUnit remoteIOAudioUnit, converterUnit, effectUnit; AudioComponentDescription cd; cd.componentManufacturer = kAudioUnitManufacturer_Apple; cd.componentFlags = cd.componentFlagsMask = 0; // remote io cd.componentType = kAudioUnitType_Output; cd.componentSubType = kAudioUnitSubType_RemoteIO; AUGraphAddNode(mAuGraph, &cd, &remoteOutputNode); // converter cd.componentType = kAudioUnitType_FormatConverter; cd.componentSubType = kAudioUnitSubType_AUConverter; AUGraphAddNode(mAuGraph, &cd, &converterNode); // ipodeq cd.componentType = kAudioUnitType_Effect; cd.componentSubType = kAudioUnitSubType_Distortion; AUGraphAddNode(mAuGraph, &cd, &effectNode); //callback AURenderCallbackStruct callbackStruct; callbackStruct.inputProc = renderCallback; callbackStruct.inputProcRefCon = &audioDataInfo; AUGraphSetNodeInputCallback(mAuGraph, converterNode, 0, &callbackStruct); // set audio unit asbd AudioStreamBasicDescription audioFormat = AUCanonicalASBD(44100.0, audioDataInfo.inputFormat.mChannelsPerFrame); AUGraphNodeInfo(mAuGraph, converterNode, NULL, &converterUnit); AudioUnitSetProperty(converterUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &audioDataInfo.inputFormat, sizeof(AudioStreamBasicDescription)); AudioUnitSetProperty(converterUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, 0, &audioFormat, sizeof(AudioStreamBasicDescription)); // get effect unit AUGraphNodeInfo(mAuGraph, effectNode, NULL, &effectUnit); // set effect unit asbd AudioUnitSetProperty(effectUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &audioFormat, sizeof(AudioStreamBasicDescription)); AudioUnitSetProperty(effectUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, 0, &audioFormat, sizeof(audioFormat)); // set remoteio unit asbd AUGraphNodeInfo(mAuGraph, remoteOutputNode, 0, &remoteIOAudioUnit); AudioUnitSetProperty(remoteIOAudioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &audioFormat, sizeof(AudioStreamBasicDescription)); AUGraphConnectNodeInput(mAuGraph, converterNode, 0, effectNode, 0); AUGraphConnectNodeInput(mAuGraph, effectNode, 0, remoteOutputNode, 0); AUGraphInitialize(mAuGraph); 

AUGraphConnectNodeInput节中,如果没有

 AUGraphConnectNodeInput(mAuGraph, converterNode, 0, effectNode, 0); AUGraphConnectNodeInput(mAuGraph, effectNode, 0, remoteOutputNode, 0); 

 AUGraphConnectNodeInput(mAuGraph, converterNode, 0, remoteOutputNode, 0); 

它会产生无声的声音。

不可否认的是,我之前对这个问题一无所知,所以我只是看了一下你的代码,在Mac开发者的CoreAudioOverview.pdf中 ,这让我到处都是。 我没有看到你的代码中有太多鬼鬼祟祟的事情。 它看起来相当紧凑,但是我对这些线路有所怀疑:

 // set effect unit asbd AudioUnitSetProperty(effectUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &audioFormat, sizeof(AudioStreamBasicDescription)); AudioUnitSetProperty(effectUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, 0, &audioFormat, sizeof(audioFormat)); 

最特别的是为什么这里有两行。 你不应该只有第一行吗?

只是一个想法。

如果那是没有价值的,那么,你有没有检查过,以确保你的audiographics连接正确。 你也可以尝试不同的效果,看看是否有用?

在这个项目上取得成功。 干杯!