2009-07-28 5 views
0

AVAudioRecorder 인스턴스를 사용하여 사운드를 녹음하려고하는데 [녹음기 peakPowerForChannel : 0]을 호출하려고 할 때를 제외하고 전체 녹음 진행률이 정상적으로 실행됩니다. 반환 값은 항상 0입니다. 꽤 이상합니다.AVAudioRecorder의 iphone-peakPowerForChannel 함수가 작동하지 않습니다.

녹음 된 오디오 파일을 확인했지만 완전히 정상입니다. 그런 다음 AVAudioPlayer를 사용하여 재생하고 재생하는 동안 [player peakPowerForChannel : 0]을 호출하면 반환 값이 올바른 것처럼 보입니다.

올바른 값을 얻으려면 어떻게해야합니까? recoder.meteringEnabled = YES로 설정하고 [recorder peakPowerForChannel : 0]을 호출 할 때마다 [recorder updateMeters]를 호출했습니다. 다음과 같이 레코더의 초기는 : 당신이 중 하나를 당신이 중 하나 record 메시지 또는 prepareToRecord 메시지를 보낸 때까지 meteringEnabled 속성을 설정하기 위해 기다릴 필요가

NSMutableDictionary *recordSetting = [[NSMutableDictionary alloc] init]; 
//General Audio Format Settings 
[recordSetting setValue:[NSNumber numberWithInt: 'ima4'] forKey:AVFormatIDKey]; 
[recordSetting setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey]; 
[recordSetting setValue:[NSNumber numberWithInt: 2] forKey:AVNumberOfChannelsKey]; 
//Linear PCM Format Settings 
[recordSetting setValue:[NSNumber numberWithInt: 32] forKey:AVLinearPCMBitDepthKey]; 
[recordSetting setValue:[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsBigEndianKey]; 
[recordSetting setValue:[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsFloatKey]; 
//Encoder Settings 
[recordSetting setValue:[NSNumber numberWithInt:AVAudioQualityMedium] forKey:AVEncoderAudioQualityKey]; 
[recordSetting setValue:[NSNumber numberWithInt:96] forKey:AVEncoderBitRateKey]; 
[recordSetting setValue:[NSNumber numberWithInt:16] forKey:AVEncoderBitDepthHintKey]; 
//Sample Rate Conversion Settings 
[recordSetting setValue:[NSNumber numberWithInt:AVAudioQualityHigh] forKey:AVSampleRateConverterAudioQualityKey]; 
recorder = [[AVAudioRecorder alloc] initWithURL:url settings:recordSetting error:nil]; 
recorder.meteringEnabled = YES; 
+0

Unity와 협력하고 계십니까? –

답변

3

합니다.

[recorder prepareToRecord]; 

recorder.meteringEnabled = YES; 

전에 그것을 작동합니다 : 특정 경우

은 추가 할 수 있습니다.

+0

귀하의 의견을 보내 주셔서 감사합니다. 호출 순서를 변경하고 올바른 채널 (내 경우 채널 0)을 사용하는 것이 효과적이었습니다! – Prine

0

채널 1 또는 제 2의 피크 테스트하려고하지 0

0

는 0dB 이는 최대 파워를 나타내는 0을 반환 할 예정이다. 애플의 문서에서 :

반환 값
현재 피크 전력, 데시벨, 소리에 대한 기록된다. 0 dB의 반환 값은 풀 스케일 또는 최대 전력을 나타냅니다. -160 dB의 반환 값은 최소 전력을 나타냅니다 (즉, 거의 음소거). http://developer.apple.com/library/ios/#documentation/AVFoundation/Reference/AVAudioRecorder_ClassReference/Reference/Reference.html

당신은 averagePowerForChannel를 원하는 : 대신.

3

시도해보십시오. 그것은 나를 위해 작동합니다. 나는 당신이 겪고있는 문제는 당신이 (당신이 코드 부분은 괜찮습니다)

[recorder prepareToRecord]; 
recorder.meteringEnabled = YES; 
//Start the actual Recording 
[recorder record]; 

NSTimer *TimerUpdate = [NSTimer scheduledTimerWithTimeInterval:.1 
    target:self selector:@selector(timerTask) userInfo:nil repeats:YES]; 

그런 다음 피크 레벨을 얻기 위해이 작은 루틴을 정의 한 번 레코더를 설정 updateMeters

를 호출하지 않는 것이 생각 :

- (void) timerTask { 
    [recorder updateMeters]; 
    float level = [recorder peakPowerForChannel:0]; 
    NSLog(@"%f", level); 
} 
관련 문제