2015-10-14 32 views
0

我正在使用AudioUnit來將輸入從麥克風播放到耳機。 它工作得很好。現在我需要增加弱音量並減少強音。如何獲取AudioUnit的音量

我找到了一種方法來增加聲音:

static OSStatus performRender (void       *inRefCon, 
          AudioUnitRenderActionFlags *ioActionFlags, 
          const AudioTimeStamp   *inTimeStamp, 
          UInt32      inBusNumber, 
          UInt32      inNumberFrames, 
          AudioBufferList    *ioData) 

{ 
OSStatus err = noErr; 
if (*cd.audioChainIsBeingReconstructed == NO) 
{ 
    // we are calling AudioUnitRender on the input bus of AURemoteIO 
    // this will store the audio data captured by the microphone in ioData 
    err = AudioUnitRender(cd.rioUnit, ioActionFlags, inTimeStamp, 1, inNumberFrames, ioData); 

    // filter out the DC component of the signal 
    cd.dcRejectionFilter->ProcessInplace((Float32*) ioData->mBuffers[0].mData, inNumberFrames); 

    //Add Volume 
    float desiredGain = 2.0f; 
    for(UInt32 bufferIndex = 0; bufferIndex < ioData->mNumberBuffers; ++bufferIndex) { 
     float *rawBuffer = (float *)ioData->mBuffers[bufferIndex].mData; 
     vDSP_vsmul(rawBuffer, 1, &desiredGain, rawBuffer, 1, inNumberFrames); 
    } 


    // mute audio if needed 
    if (*cd.muteAudio) 
    { 
     for (UInt32 i=0; i<ioData->mNumberBuffers; ++i) 
      memset(ioData->mBuffers[i].mData, 0, ioData->mBuffers[i].mDataByteSize); 
    } 
} 

return err; 

}

我的問題是如何將我得到的是當前的音量,所以我會知道有多少獲得它,反之亦然

謝謝!

+0

你是這個意思嗎? http://stackoverflow.com/a/16405677/22147 –

+0

不...這是一般的音量。我正在談論具體的緩衝區容量。例如,如果我靜靜地說話或大聲說話。 – roiberg

+1

看看http://stackoverflow.com/q/2445756/22147 –

回答

0

獲取「音量」取決於AudioUnit的類型。一些音頻單元具有輸入電平,輸出電平和「全局」音量電平。

// MatrixMixer 
Float32 volume = 0; 
OSStatus result = AudioUnitGetParameter(mxmx_unit, kMatrixMixerParam_Volume, kAudioUnitScope_Global, 0, &volume); 

// MultiChannelMixer 
Float32 volume = 0; 
OSStatus result = AudioUnitGetParameter(mcmx_unit, kMultiChannelMixerParam_Volume, kAudioUnitScope_Global, 0, &volume);