gpt4 book ai didi

objective-c - 如何设置 kAudioUnitSubType_Distortion

转载 作者:IT老高 更新时间:2023-10-28 11:49:45 25 4
gpt4 key购买 nike

我正在尝试编写一个添加音效的 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);

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));

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

只是一个想法。

如果这没有任何值(value),那么,您是否检查过以确保您的音频图都已正确连接。你也可以尝试不同的效果,看看是否有效?

这个项目取得了很好的成功。干杯!

关于objective-c - 如何设置 kAudioUnitSubType_Distortion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12234023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com