[iPhone] Audio Queue でマイクから録音する方法 でマイクからの音を録音する方法を書きました。その際に音のレベルを取得する方法です。

昨日のコードに追加していく形になります。

レベルメータを有効にする

AudioRecorder#record の最後に以下を追加

UInt32 enabledLevelMeter = true;
AudioQueueSetProperty(queue,kAudioQueueProperty_EnableLevelMetering,&enabledLevelMeter,sizeof(UInt32));

最高レベルと平均レベルを取得するメソッドを追加

AudioRecorder.m に以下のメソッドを追加

-(float) getPeakPower
{
  AudioQueueLevelMeterState levelMeter;
  UInt32 levelMeterSize = sizeof(AudioQueueLevelMeterState);
  AudioQueueGetProperty(queue,kAudioQueueProperty_CurrentLevelMeterDB,&levelMeter,&levelMeterSize);
  return levelMeter.mPeakPower;
}

-(float) getAveragePower
{
  AudioQueueLevelMeterState levelMeter;
  UInt32 levelMeterSize = sizeof(AudioQueueLevelMeterState);
  AudioQueueGetProperty(queue,kAudioQueueProperty_CurrentLevelMeterDB,&levelMeter,&levelMeterSize);
  return levelMeter.mAveragePower;
}

レベルを取得する

AudioInputCallback で以下のようにレベルを取得

float peak = [recorder getPeakPower];
float peak = [recorder getAveragePower];

関連する投稿