Mas*_*ura 36 objective-c core-audio audiounit ios
我正在尝试编写一个可以添加声音效果的iOS应用.我试图在auconverter和remoteIO之间放置一个效果音频单元(例如,失真和混响).设置完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);
Run Code Online (Sandbox Code Playgroud)
在AUGraphConnectNodeInput
部分,如果没有
AUGraphConnectNodeInput(mAuGraph, converterNode, 0, effectNode, 0);
AUGraphConnectNodeInput(mAuGraph, effectNode, 0, remoteOutputNode, 0);
Run Code Online (Sandbox Code Playgroud)
但
AUGraphConnectNodeInput(mAuGraph, converterNode, 0, remoteOutputNode, 0);
Run Code Online (Sandbox Code Playgroud)
它会产生没有效果的声音.
诚然,我之前对你的问题一无所知,所以我稍微查看了你的代码,并查看了 Mac Developer 的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));
Run Code Online (Sandbox Code Playgroud)
最特别的是为什么这里有两行。你不应该只写第一行吗?
只是一个想法。
如果这没有任何价值,那么,您是否检查过以确保您的音频图均已正确连接。您还可以尝试不同的效果,看看是否有效?
这个项目取得了良好的成功。干杯!
归档时间: |
|
查看次数: |
1211 次 |
最近记录: |