gpt4 book ai didi

ios - AVAudioRecorder averagePowerForChannel 总是返回 -120.0

转载 作者:技术小花猫 更新时间:2023-10-29 10:59:41 28 4
gpt4 key购买 nike

我正在尝试使用 AVAudioRecorder 的 averagePowerForChannel 方法来监控 iPad/iPhone 应用程序麦克风的输入电平。我有一个回调,它在一个循环中轮询平均水平——在 iPhone 上它工作正常并返回合理的水平,但出于某种原因在 iPad 上它总是返回 -120.0。

这是我的一些设置代码:

- (void) setupMic {
if (micInput) {
[micInput release];
micInput = nil;
}
NSURL *newURL = [[NSURL alloc] initFileURLWithPath:@"/dev/null"];

NSMutableDictionary *recordSettings = [[NSMutableDictionary alloc] init];

[recordSettings setObject:[NSNumber numberWithInt:kAudioFormatAppleLossless] forKey: AVFormatIDKey];
[recordSettings setObject:[NSNumber numberWithFloat:22050.0] forKey: AVSampleRateKey];
// [recordSettings setObject:[NSNumber numberWithInt:2] forKey:AVNumberOfChannelsKey];
[recordSettings setObject:[NSNumber numberWithInt:12800] forKey:AVEncoderBitRateKey];
[recordSettings setObject:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey];
[recordSettings setObject:[NSNumber numberWithInt: AVAudioQualityLow] forKey: AVEncoderAudioQualityKey];

micInput = [[AVAudioRecorder alloc] initWithURL:newURL settings:recordSettings error:nil];
// [micInput setMeteringEnabled:YES];

[newURL release];
[recordSettings removeAllObjects];
[recordSettings release];
}

还有我的开始录音方法:

- (void) startRecording {
NSLog(@"startRecording!");
[micInput pause];
[micInput prepareToRecord];
micInput.meteringEnabled = YES;
[micInput record];
[micInput updateMeters];
levelTimer = [[NSTimer alloc] initWithFireDate:[NSDate dateWithTimeIntervalSinceNow:0.0] interval:0.03 target:self selector:@selector(levelTimerCallback:) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:levelTimer forMode:NSDefaultRunLoopMode];
}

还有一些 levelTimer 回调:

- (void)levelTimerCallback:(NSTimer *)timer {
[micInput updateMeters];
double avgPowerForChannel = pow(10, (0.05 * [micInput averagePowerForChannel:0]));
[micSprite receiveInput:avgPowerForChannel];

NSLog(@"Avg. Power: %f", [micInput averagePowerForChannel:0]);

...

}

在 iPhone 上,NSLog 语句将返回合理的值,而 iPad 将始终返回 -120.0。

注意:我在 cocos2d 应用程序中使用它。出于某种原因,如果我在 iPad 上重新启动当前场景,麦克风电平将返回正确的值。

有人有什么建议吗?我在这里很茫然。谢谢!

最佳答案

我遇到了同样的问题。我发现将类别设置为 AVAudioSessionCategoryPlayAndRecord 修复了它:

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

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

关于ios - AVAudioRecorder averagePowerForChannel 总是返回 -120.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5022514/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com