2012-09-02 16 views
36

सेट करने के लिए कैसे मैं एक आईओएस ऐप लिखने की कोशिश कर रहा हूं जो ध्वनि प्रभाव जोड़ता है। मैं ऑकोनवर्टर और रिमोटियो के बीच एक प्रभाव ऑडियो इकाई (पूर्व, विरूपण और reverb) डालने की कोशिश कर रहा हूँ। एयू ने कहा, स्थापित करने के बाद कोई आवाज नहीं है।kAudioUnitSubType_Distortion

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

यह प्रभाव के बिना एक ध्वनि पैदा करता है।

+0

क्या आप विरूपण इकाई के स्ट्रीम प्रारूप को सेट करते समय वापसी मूल्य की जांच कर रहे हैं? मैंने प्रभाव ऑडियो इकाइयों को बेहद पसंद किया है कि वे किस प्रारूप को स्वीकार करेंगे। –

+0

क्या प्रदान किया गया उत्तर आपकी मदद करता है? यही है अगर यह अभी भी एक मुद्दा है। अन्यथा नीचे समाधान प्रदान करें और इसे स्वीकार करें। धन्यवाद! – Josiah

उत्तर

1

मान लीजिए, मुझे आपकी समस्या के बारे में कुछ भी पता नहीं था, इसलिए मैंने आपके कोड को देखने और मैक डेवलपर के 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)); 

अधिकांश particulalry क्यों दो पंक्तियों यहाँ हैं। क्या आपको पहली पंक्ति नहीं चाहिए?

बस एक विचार।

यदि यह कोई मूल्य नहीं है, तो, आपने यह सुनिश्चित करने के लिए जांच की है कि आपका ऑडियो ग्राफ ठीक से जुड़ा हुआ है। और आप एक अलग प्रभाव का प्रयास कर सकते हैं और देख सकते हैं कि यह काम करता है या नहीं?

इस परियोजना पर अच्छी सफलता। चीयर्स!