首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何设置kAudioUnitSubType_Distortion

如何设置kAudioUnitSubType_Distortion
EN

Stack Overflow用户
提问于 2012-09-02 15:01:07
回答 1查看 1.2K关注 0票数 36

我正在试着写一个添加声音效果的iOS应用程序。我试图在自动转换器和remoteIO之间放置一个特效音频单元(例如,失真和混响)。设置完AU后,就没有声音了。

代码语言:javascript
复制
    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部分中,如果不是

代码语言:javascript
复制
AUGraphConnectNodeInput(mAuGraph, converterNode, 0, effectNode, 0);
AUGraphConnectNodeInput(mAuGraph, effectNode, 0, remoteOutputNode, 0);

代码语言:javascript
复制
AUGraphConnectNodeInput(mAuGraph, converterNode, 0, remoteOutputNode, 0);

它会产生没有效果的声音。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-06 23:22:57

诚然,我之前对你的问题一无所知,所以我看了你的代码,以及Mac Developer's CoreAudioOverview.pdf,它引导我一路走来。我没有看到你的代码中有什么太隐秘的地方。它看起来相当紧凑,但我确实想知道这些行:

代码语言:javascript
复制
// set effect unit asbd
AudioUnitSetProperty(effectUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &audioFormat, sizeof(AudioStreamBasicDescription));
AudioUnitSetProperty(effectUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, 0, &audioFormat, sizeof(audioFormat));

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

这只是个想法。

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

在这个项目上取得了良好的成功。干杯!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12234023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档