일부 오디오 신호 처리를해야하는 앱을 만들고 있습니다. 콜백 함수를 통해 얻을 수있는 각각의 버퍼에서 오디오 레벨을 측정해야합니다. 나는 몇 시간 동안 웹 검색 있었고, 나는 빌드 -라는 속성 현재 수준의 측정이 있음을 발견ios audio queue - 버퍼의 오디오 레벨을 측정하는 방법은 무엇입니까?
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