使用自定义渲染过程添加节点到 AUGraph

问题描述 投票:0回答:1

任何人都知道在 macOS 上的 AUGraph 现有过滤器节点之间添加具有自定义渲染功能的节点的神奇秘诀。无论我使用

AUGraphSetNodeInputCallback
AudioUnitSetProperty
设置自定义渲染回调,我的渲染回调都不会被调用。
kAudioUnitType_Effect
kAudioUnitSubType_AUFilter
是设置此类节点的正确参数吗?

OSStatus AudioEngineGraph::BuildCustomGraphNode (AudioEngineGraphInput& inInput, AUGraph inGraph, std::shared_ptr<AudioEngineGraphNode> inNode) {
    AudioComponentDescription outputcd = {0};
    OSStatus                  err;

    outputcd.componentType = kAudioUnitType_Effect;
    outputcd.componentSubType = kAudioUnitSubType_AUFilter;
    outputcd.componentManufacturer = kAudioUnitManufacturer_Apple;

    err = AUGraphAddNode(inGraph, &outputcd, &(inNode->mNode));
    checkErrAndReturn("AUGraphAddNode", err);
    err = AUGraphNodeInfo(inGraph, (inNode->mNode), NULL, &(inNode->mUnit));
    checkErrAndReturn("AUGraphNodeInfo", err);
}

// connect all the nodes in my graph, then set the render callback


    AURenderCallbackStruct callbackStruct;

    callbackStruct.inputProc = myRenderProc;
    callbackStruct.inputProcRefCon = &inInput;
    
    //checkErr(AudioUnitSetProperty(inNode->mUnit, kAudioUnitProperty_SetRenderCallback, kAudioUnitScope_Input, 0, &callbackStruct, sizeof(callbackStruct)));

    checkErr (AUGraphSetNodeInputCallback(inGraph, inNode->mNode, 0, &callbackStruct));
macos core-audio
1个回答
0
投票

您需要构建自己的 AUAudioUnit 的 Swift/Objective-C 子类,其中包含您的自定义过滤器代码。在 CoreAudio 中注册后,您可以使用自定义单元在 AudioGraph 中创建一个节点。为什么事情就不能简单一点呢?发现源代码很有帮助(但有点错误):https://github.com/GeorgeMcMullen/AudioUnitV3Example/blob/0ab6f2feb953d37e4e7b2359627b97858b317bc8/Filter/Shared/FilterDemo.mm

© www.soinside.com 2019 - 2024. All rights reserved.