2010-04-21 2 views
0

이 코드는 짜증납니다. 나는 오디오를 녹음하는 동안 averagePowerForChannel 및 peakPowerForChannel를 얻기 위해 노력하고 있어요,하지만 때마다 나는 0.0 아래AVAudioRecorder의 채널에 대한 AveragePower 및 PeakPower 받기

로 얻고있다 기록 오디오 내 코드 :

NSMutableDictionary *recordSetting =[[NSDictionary alloc] initWithObjectsAndKeys:[NSNumber numberWithFloat: 22050.0], AVSampleRateKey, 
      [NSNumber numberWithInt: kAudioFormatLinearPCM], AVFormatIDKey, 
      [NSNumber numberWithInt: 1], AVNumberOfChannelsKey, 
      [NSNumber numberWithInt: AVAudioQualityMax], AVEncoderAudioQualityKey, 
      [NSNumber numberWithInt:32],AVLinearPCMBitDepthKey, 
      [NSNumber numberWithBool:NO],AVLinearPCMIsBigEndianKey, 
      [NSNumber numberWithBool:NO],AVLinearPCMIsFloatKey, 
      nil]; 

recorder1 = [[AVAudioRecorder alloc] initWithURL:[NSURL fileURLWithPath:audioFilePath] settings:recordSetting error:&err]; 
recorder1.meteringEnabled = YES; 
recorder1.delegate=self; 
[recorder1 prepareToRecord]; 
[recorder1 record]; 
levelTimer = [NSTimer scheduledTimerWithTimeInterval: 0.3f target: self selector: @selector(levelTimerCallback:) userInfo: nil repeats: YES]; 

- (void)levelTimerCallback:(NSTimer *)timer { 

[recorder1 updateMeters]; 

NSLog(@"Peak Power : %f , %f", [recorder1 peakPowerForChannel:0], [recorder1 peakPowerForChannel:1]); 
NSLog(@"Average Power : %f , %f", [recorder1 averagePowerForChannel:0], [recorder1 averagePowerForChannel:1]); 

} 

코드에서 오류가 무엇입니까? ??

답변

2

AVNumberOfChannelsKey를 2로 설정하면 ... 작동한다고 생각합니다.

4

prepareToRecord를 입력 한 후에 meteringEnabled 속성을 사용해야한다고 생각합니다. 그리고 채널의 수를 1로 지정하는 부분에 주석을 달아주세요. 기본값을 사용합시다. 희망이 도움이됩니다.

+0

고맙습니다! 나는 그것을 놓쳤다는 것을 믿을 수 없다. (그것이 'meteringEnabled'입니다. 채널 수와는 무관합니다.) – Kalle