我正在研究應該做一些音頻信號處理的應用程序。我需要測量每個獲得的緩衝區中的音頻電平(通過回調函數)。我一直在網上搜索了一段時間,我發現有一個內置的屬性稱爲電流電平表:ios音頻隊列 - 如何測量緩衝區中的音頻電平?
AudioQueueGetProperty(recordState->queue,kAudioQueueProperty_CurrentLevelMeter,meters,&dlen);
該屬性獲得我的平均或峯值音頻電平,但它不同步當前的緩衝區。 我想通了,我需要計算從自己的緩衝數據的音頻電平,所以我有這樣的:
double calcAudioRMS (SInt16 * audioData, int numOfSamples)
{
double RMS, adPercent;
RMS = 0;
for (int i=0; i<numOfSamples; i++)
{
adPercent=audioData[i]/32768.0f;
RMS += adPercent*adPercent;
}
RMS = sqrt(RMS/numOfSamples);
return RMS;
}
該函數獲得(澆鑄成Sint16)的音頻數據和樣本數量在當前緩衝區。我得到的數字確實在0到1之間,但與我從內置音頻電平測量得到的數字相比,它們似乎相當隨機且低。
的記錄音頻格式是:
format->mSampleRate = 8000.0;
format->mFormatID = kAudioFormatLinearPCM;
format->mFramesPerPacket = 1;
format->mChannelsPerFrame = 1;
format->mBytesPerFrame = 2;
format->mBytesPerPacket = 2;
format->mBitsPerChannel = 16;
format->mReserved = 0;
format->mFormatFlags = kLinearPCMFormatFlagIsSignedInteger |kLinearPCMFormatFlagIsPacked;
我的問題是如何從緩衝區得到正確的價值觀?有沒有內置函數\屬性呢?或者我應該自己計算音頻電平,以及如何去做?
在此先感謝。
你可以共享源代碼嗎? – iosMentalist