36

効果音を追加する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);

エフェクトなしのサウンドを生成します。

4

1 に答える 1

1

確かに、私はあなたの問題について以前は何も知らなかったので、あなたのコードと、MacDeveloperの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));

ここに2行ある理由のほとんど。あなたは最初の行だけを持っているべきではありませんか?

ちょっとした考え。

それが価値がない場合は、オーディオグラフがすべて正しく接続されていることを確認してください。また、別の効果を試して、それが機能するかどうかを確認できますか?

このプロジェクトで大成功。乾杯!

于 2013-02-06T15:22:57.080 に答える