AVAudioRecorder如何在iPhone上获取麦克风级别?

3

我正在开发一个用于iPhone 6+的音频录制应用程序。
问题1:(AVAudioRecorder)在模拟器中音频录制工作正常,但在设备上不起作用。

音频设置:

[settings setValue:[NSNumber numberWithInteger:kAudioFormatAppleIMA4] forKey:AVFormatIDKey];

[settings setValue:[NSNumber numberWithFloat:44100.0f] forKey:AVSampleRateKey];

[settings setValue:[NSNumber numberWithInteger:1] forKey:AVNumberOfChannelsKey];

[settings setValue:[NSNumber numberWithInteger:AVAudioQualityLow] forKey:AVEncoderAudioQualityKey];

问题2:我的iPad中麦克风以前运行良好。但当我使用这段代码时,它就不能正常工作了。
 [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
 [audioSession setActive:YES error:&err];

iPad中麦克风无法正常工作?如何重置或增加iPad/iPhone上的麦克风音量?


我遇到了完全相同的问题。一旦解决了,我会确保发布答案。 - Beau Nouvelle
我的回答有帮到你吗? - Beau Nouvelle
谢谢你的回答 :-) - Kasirajan M
1个回答

1
在我的- (void)setUpAudio方法中,我创建了一个字典来保存AVAudioRecorder的设置。(这样更加清晰)你上面的代码几乎正确,但还不够。请参见下面的代码。
// empty URL
NSURL *url = [NSURL fileURLWithPath:@"/dev/null"];

// define settings for AVAudioRecorder
NSDictionary *settings = [NSDictionary dictionaryWithObjectsAndKeys:
                          [NSNumber numberWithFloat: 44100.0],                      AVSampleRateKey,
                          [NSNumber numberWithInt: kAudioFormatAppleLossless],      AVFormatIDKey,
                          [NSNumber numberWithInt:1],                               AVNumberOfChannelsKey,
                          [NSNumber numberWithInt:AVAudioQualityMax],               AVEncoderAudioQualityKey,
                          nil];

NSError *error;

// init and apply settings
 recorder = [[AVAudioRecorder alloc] initWithURL:url settings:settings error:&error];

// This here is what you are missing, without it the mic input will work in the simulator, 
// but not on a device.
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord
                    error:nil];

if (recorder) {
    [recorder prepareToRecord];
    recorder.meteringEnabled = YES;
    NSTimer *levelTimer = [NSTimer scheduledTimerWithTimeInterval:0.03 target:self selector:@selector(levelTimerCallback:) userInfo:nil repeats:YES];
    [recorder record];
} else {
    NSLog([error description]);
}

然后在更新方法中,您可以像这样跟踪麦克风输入级别。
- (void)levelTimerCallback:(NSTimer *)timer {
    [recorder updateMeters];
    NSLog(@"Average input: %f Peak input: %f", [recorder averagePowerForChannel:0], [recorder peakPowerForChannel:0]);

} 

任何问题或我可以改进我的答案,请告诉我。我在这里还是很新的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接