ios 调整麦克风音量_ios麦克风音量实时检测

- (void)viewDidLoad

{

[super viewDidLoad];

[self.view addSubview:self.labelVoice];

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker| AVAudioSessionCategoryOptionMixWithOthers |AVAudioSessionCategoryOptionAllowBluetooth error:nil];/*不需要保存录音文件*/NSURL*url = [NSURL fileURLWithPath:@"/dev/null"];

NSDictionary*settings =[NSDictionary dictionaryWithObjectsAndKeys:

[NSNumber numberWithFloat:44100.0], AVSampleRateKey,

[NSNumber numberWithInt: kAudioFormatAppleLossless], AVFormatIDKey,

[NSNumber numberWithInt:2], AVNumberOfChannelsKey,

[NSNumber numberWithInt: AVAudioQualityMax], AVEncoderAudioQualityKey,

nil];

NSError*error;

recorder= [[AVAudioRecorder alloc] initWithURL:url settings:settings error:&error];if(recorder)

{

[recorder prepareToRecord];

recorder.meteringEnabled=YES;

[recorder record];

levelTimer= [NSTimer scheduledTimerWithTimeInterval: 0.3target: self selector: @selector(levelTimerCallback:) userInfo: nil repeats: YES];

}else{

NSLog(@"%@", [error description]);

}

}/*该方法确实会随环境音量变化而变化,但具体分贝值是否准确暂时没有研究*/

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

[recorder updateMeters];float level; //The linear 0.0 .. 1.0 value we need.

float minDecibels = -60.0f; //use -80db Or use -60dB, which I measured in a silent room.

float decibels = [recorder averagePowerForChannel:0];if (decibels

{

level= 0.0f;

}else if (decibels >= 0.0f)

{

level= 1.0f;

}else{float root = 5.0f; //modified level from 2.0 to 5.0 is neast to real test

float minAmp = powf(10.0f, 0.05f *minDecibels);float inverseAmpRange = 1.0f / (1.0f -minAmp);float amp = powf(10.0f, 0.05f *decibels);float adjAmp = (amp - minAmp) *inverseAmpRange;

level= powf(adjAmp, 1.0f /root);

}/*level 范围[0 ~ 1], 转为[0 ~120] 之间*/dispatch_async(dispatch_get_main_queue(),^{

NSLog(@"voice updated :%f",level * 120);

self.layerVoice.frame= CGRectMake(0, 0, level * 120, 50);

});

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值