AVAudioRecorder中的iphone-peakPowerForChannel函数不起作用 [英] iphone-peakPowerForChannel function in AVAudioRecorder doesn't work

查看:48
本文介绍了AVAudioRecorder中的iphone-peakPowerForChannel函数不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试使用AVAudioRecorder实例记录声音,整个记录进度运行良好,除了当我调用[recorder peakPowerForChannel:0]尝试获取音量时,返回值始终为0,这很奇怪.

I am trying to use an AVAudioRecorder instance to record sound, the whole recording progress runs well, except that when I call [recorder peakPowerForChannel:0] trying to get the volume, the return value is always 0, that's pretty odd..

我已经检查了录制的音频文件,完全没问题.然后,我使用AVAudioPlayer播放它,并且在播放过程中,我调用了[player peakPowerForChannel:0],返回值似乎是正确且有意义的.

I have checked the recorded audio file, it's totally fine. Then I use AVAudioPlayer to play it, and during playing, i call [player peakPowerForChannel:0], the return value seems to be right and make sense.

如何获得正确的价值?我已经设置为:recoder.meteringEnabled = YES,并且每次我调用[recorder peakPowerForChannel:0]时都调用[recorder updateMeters].记录器的初始名称如下:

How can I get the right value ? I have set that: recoder.meteringEnabled = YES, and called [recorder updateMeters] every time I call [recorder peakPowerForChannel:0]. The initial of recorder is as follows:

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;

推荐答案

您必须等待设置 meteringEnabled 属性,直到您发送了 record 消息为止或 prepareToRecord 消息.

You have to wait to set the meteringEnabled property until either you've either sent the record message or the prepareToRecord message.

在您的特定情况下,添加:

In your specific case, add:

[recorder prepareToRecord];

之前

recorder.meteringEnabled = YES;

它应该可以工作.

这篇关于AVAudioRecorder中的iphone-peakPowerForChannel函数不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆