为什么averagePowerForChannel总是返回-160?

时间:2014-07-28 09:12:40

标签: ios avfoundation

我有这些代码,两个方法调用都是SUCCESS。

AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory: AVAudioSessionCategoryPlayAndRecord error: NULL];
[audioSession setActive: YES error: NULL];

这些代码开始录制:

[self.recorder prepareToRecord];
[self.recorder recordForDuration: 60];

我有一个更新米的计时器功能

- (void)updateMeters
{
    [self.recorder updateMeters];
    float peakPower = [self.recorder averagePowerForChannel: 0];
    double ALPHA = 0.05;
    double peakPowerForChannel = pow(10, (ALPHA * peakPower));
    self.recordView.progress = peakPowerForChannel;

    NSLog(@"%f", peakPower);
}

但我不知道为什么peakPower总是160.我有另一个演示(来自网络)可以很好地工作,但我找不到它们之间的任何区别。

3 个答案:

答案 0 :(得分:2)

试着设置:

   recorder.meteringEnabled = YES;

答案 1 :(得分:1)

将类别设置为AVAudioSessionCategoryPlayAndRecord并检查

NSError *error;
[[AVAudioSession sharedInstance] 
    setCategory:AVAudioSessionCategoryPlayAndRecord error:&error];

if (error) {
    NSLog(@"Error description: %@", [error description]);
}

答案 2 :(得分:1)

奇怪的是[audioSession setCategory: AVAudioSessionCategoryPlayAndRecord error: &err][[AVAudioRecorder alloc] initWithURL: [NSURL fileURLWithPath: self.recordPath] settings: recordSetting error: NULL]必须在同一个函数中......这是这个问题的答案。