简单录音功能实现可以录音和播放,根据声音大小显示相应的音量图片。
1.添加框架AVFoundation.framework与CoreAudio.framework
2.
创建两个按钮
startButton = [UIButton buttonWithType:UIButtonTypeCustom];
startButton.frame = CGRectMake(50, 300, 100, 50);
startButton.backgroundColor = [UIColor blackColor];
[startButton addTarget:self action:@selector(startStop) forControlEvents:UIControlEventTouchUpInside];
[startButton setTitle:@"开始录音" forState:UIControlStateNormal];
[self.view addSubview:startButton];
UIButton * playButton = [UIButton buttonWithType:UIButtonTypeCustom];
playButton.frame = CGRectMake(200, 300, 100, 50);
playButton.backgroundColor = [UIColor blackColor];
[playButton addTarget:self action:@selector(play) forControlEvents:UIControlEventTouchUpInside];
[playButton setTitle:@"开始播放" forState:UIControlStateNormal];
[self.view addSubview:playButton];
3. 创建一个url
recordedTempFile = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingString:@"RecordedFile"]];
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
[session setActive:YES error:nil];
4.创建一个imageview
self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(50, 50, 100, 100)];
[self.view addSubview:self.imageView];
具体代码如下:- (void)viewDidLoad
{
[super viewDidLoad];
[self creatButton];
startOrStopFlag = YES;
recordedTempFile = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingString:@"RecordedFile"]];
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
[session setActive:YES error:nil];
}
- (void)creatButton
{
startButton = [UIButton buttonWithType:UIButtonTypeCustom];
startButton.frame = CGRectMake(50, 300, 100, 50);
startButton.backgroundColor = [UIColor blackColor];
[startButton addTarget:self action:@selector(startStop) forControlEvents:UIControlEventTouchUpInside];
[startButton setTitle:@"开始录音" forState:UIControlStateNormal];
[self.view addSubview:startButton];
UIButton * playButton = [UIButton buttonWithType:UIButtonTypeCustom];
playButton.frame = CGRectMake(200, 300, 100, 50);
playButton.backgroundColor = [UIColor blackColor];
[playButton addTarget:self action:@selector(play) forControlEvents:UIControlEventTouchUpInside];
[playButton setTitle:@"开始播放" forState:UIControlStateNormal];
[self.view addSubview:playButton];
self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(50, 50, 100, 100)];
[self.view addSubview:self.imageView];
// UILabel * hzLabel = [[UILabel alloc] initWithFrame:CGRectMake(50, 50, 100, 50)];
// hzLabel.text = @"采样频率";
// [self.view addSubview:hzLabel];
//
// UILabel * voLabel = [[UILabel alloc] initWithFrame:CGRectMake(50, 150, 100, 50)];
// voLabel.text = @"音量";
// [self.view addSubview:voLabel];
//
// hzTextField = [[UITextField alloc] initWithFrame:CGRectMake(200, 50, 100, 50)];
// hzTextField.borderStyle = UITextBorderStyleRoundedRect;
// hzTextField.text = @"44100.0";
// [self.view addSubview:hzTextField];
//
// voTextField = [[UITextField alloc] initWithFrame:CGRectMake(200, 150, 100, 50)];
// voTextField.borderStyle = UITextBorderStyleRoundedRect;
// voTextField.text = @"2";
// [self.view addSubview:voTextField];
activity = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(100, 400, 50, 50)];
activity.backgroundColor = [UIColor redColor];
[self.view addSubview:activity];
}
- (void)dealloc
{
// NSFileManager * fm = [NSFileManager defaultManager];
// [fm removeItemAtPath:[recordedTempFile path] error:nil];
// recorder = nil;
}
- (void)startStop
{
if (startOrStopFlag) {
[startButton setTitle:@"暂停录音" forState:UIControlStateNormal];
recorder = [[AVAudioRecorder alloc] initWithURL:recordedTempFile settings:nil error:nil];
//开启音量检测
recorder.meteringEnabled = YES;
recorder.delegate = self;
//设置定时检测
timer = [NSTimer scheduledTimerWithTimeInterval:0 target:self selector:@selector(detectionVoice) userInfo:nil repeats:YES];
startOrStopFlag = NO;
[activity startAnimating];
[recorder prepareToRecord];
[recorder record];
}
else
{
startOrStopFlag = YES;
[activity stopAnimating];
[startButton setTitle:@"开始录音" forState:UIControlStateNormal];
[recorder stop];
player = [[AVAudioPlayer alloc] initWithContentsOfURL:recordedTempFile error:nil];
}
}
- (void)detectionVoice
{
[recorder updateMeters];
double lowPassResults = pow(10, (0.05 * [recorder peakPowerForChannel:0]));
if (0<lowPassResults<=0.06) {
[self.imageView setImage:[UIImage imageNamed:@"record_animate_01.png"]];
}else if (0.06<lowPassResults<=0.13) {
[self.imageView setImage:[UIImage imageNamed:@"record_animate_02.png"]];
}else if (0.13<lowPassResults<=0.20) {
[self.imageView setImage:[UIImage imageNamed:@"record_animate_03.png"]];
}else if (0.20<lowPassResults<=0.27) {
[self.imageView setImage:[UIImage imageNamed:@"record_animate_04.png"]];
}else if (0.27<lowPassResults<=0.34) {
[self.imageView setImage:[UIImage imageNamed:@"record_animate_05.png"]];
}else if (0.34<lowPassResults<=0.41) {
[self.imageView setImage:[UIImage imageNamed:@"record_animate_06.png"]];
}else if (0.41<lowPassResults<=0.48) {
[self.imageView setImage:[UIImage imageNamed:@"record_animate_07.png"]];
}else if (0.48<lowPassResults<=0.55) {
[self.imageView setImage:[UIImage imageNamed:@"record_animate_08.png"]];
}else if (0.55<lowPassResults<=0.62) {
[self.imageView setImage:[UIImage imageNamed:@"record_animate_09.png"]];
}else if (0.62<lowPassResults<=0.69) {
[self.imageView setImage:[UIImage imageNamed:@"record_animate_10.png"]];
}else if (0.69<lowPassResults<=0.76) {
[self.imageView setImage:[UIImage imageNamed:@"record_animate_11.png"]];
}else if (0.76<lowPassResults<=0.83) {
[self.imageView setImage:[UIImage imageNamed:@"record_animate_12.png"]];
}else if (0.83<lowPassResults<=0.9) {
[self.imageView setImage:[UIImage imageNamed:@"record_animate_13.png"]];
}else {
[self.imageView setImage:[UIImage imageNamed:@"record_animate_14.png"]];
}
}
- (void)play
{
[player prepareToPlay];
[player play];
}