2012-09-02 9 views
36

Ich versuche eine iOS App zu schreiben, die Soundeffekte hinzufügt. Ich versuche eine Audioeinheit (zB Verzerrer und Reverb) zwischen AuConverter und RemoteIO zu schalten. Nach dem Einrichten der AU gibt es keinen Ton.So stellen Sie kAudioUnitSubType_Distortion ein

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

in AUGraphConnectNodeInput Abschnitt, wenn nicht

AUGraphConnectNodeInput(mAuGraph, converterNode, 0, effectNode, 0); 
AUGraphConnectNodeInput(mAuGraph, effectNode, 0, remoteOutputNode, 0); 

aber

AUGraphConnectNodeInput(mAuGraph, converterNode, 0, remoteOutputNode, 0); 

es ein Geräusch erzeugt, ohne Effekte.

+0

Überprüfen Sie den Rückgabewert, wenn Sie das Stream-Format der Verzerrungseinheit einstellen? Ich habe herausgefunden, dass Effekt-Audiogeräte äußerst wählerisch sind, welche Formate sie akzeptieren. –

+0

Hilft Ihnen die angegebene Antwort? Das ist, wenn das immer noch ein Problem ist. Ansonsten stellen Sie die Lösung selbst zur Verfügung und akzeptieren Sie sie. Vielen Dank! – Josiah

Antwort

1

Zugegeben, ich wusste vorher nichts über Ihr Problem, also habe ich ein wenig Ihren Code angeschaut und bei Mac Developer CoreAudioOverview.pdf, der mich überallhin geführt hat. Ich habe in deinem Code nichts zu hinterhältig gesehen. Es sieht ziemlich eng, aber ich habe Wunder über diese Zeilen:

// set effect unit asbd 
AudioUnitSetProperty(effectUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &audioFormat, sizeof(AudioStreamBasicDescription)); 
AudioUnitSetProperty(effectUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, 0, &audioFormat, sizeof(audioFormat)); 

meisten particulalry warum gibt es zwei Linien hier. Solltest du nicht nur die erste Zeile haben?

Nur ein Gedanke.

Wenn das keinen Wert hat, dann haben Sie überprüft, ob Ihre Audiodatei korrekt angeschlossen ist. Und können Sie auch einen anderen Effekt ausprobieren und sehen, ob das funktioniert?

Guter Erfolg bei diesem Projekt. PROST!