啥也不说,直接上代码,复制即可
首先要引进系统包CoreGraphics.framework Foundation.framework UIKit.framework AVFoundation.framework(必须要引入)
h文件引入头文件#import
#import
#import
@interface ViewController : UIViewController//此处设置代理
@property(nonatomic,strong)UIButton *recoron;//录音button
@property(nonatomic,strong)UIButton *playButton;//播放button
//录音存储路径
@property(nonatomic,strong)NSURL *tmpFile;
//录音
@property(nonatomic,strong)AVAudioRecorder *recorder;
//播放
@property(nonatomic,strong)AVAudioPlayer *player;
//录音状态
@property(nonatomic,assign)BOOL isRecoding;
@end
m文件
写出两个button
self.playButton = [[UIButtonalloc] initWithFrame:CGRectMake(10, 50, 100, 30)];
self.playButton.backgroundColor = [UIColororangeColor];
[self.playButtonsetTitle:@"play"forState:(UIControlStateNormal)];
[self.playButtonsetTitleColor:[UIColorwhiteColor] forState:(UIControlStateNormal)];
[self.playButtonaddTarget:selfaction:@selector(playButtonAction:) forControlEvents:(UIControlEventTouchUpInside)];
[self.viewaddSubview:_playButton];
self.recoron = [[UIButtonalloc] initWithFrame:CGRectMake(130, 50, 100, 30)];
self.recoron.backgroundColor = [UIColorgrayColor];
[self.recoronsetTitle:@"start"forState:(UIControlStateNormal)];
[self.recoronsetTitleColor:[UIColorwhiteColor] forState:(UIControlStateNormal)];
[self.recoronaddTarget:selfaction:@selector(startButtonAction:) forControlEvents:(UIControlEventTouchUpInside)];
[self.viewaddSubview:_recoron];
下面方法写在viewDidLoad中
//刚打开的时候录音状态未不录音;
self.isRecoding = NO;
//播放按钮不能被点击
[self.playButton setEnabled:NO];
//播放按钮设置为半透明
self.playButton.titleLabel.alpha = 0.5;
//创建临时文件夹来存放录音文件
self.tmpFile = [NSURLfileURLWithPath:[NSTemporaryDirectory() stringByAppendingString:@"TmpFile"]];
//设置后台播放
AVAudioSession *session = [AVAudioSessionsharedInstance];
NSError *sessionError;
[session setCategory:AVAudioSessionCategoryPlayAndRecorderror:&sessionError];
//判断后台有没有播放
if(session == nil){
NSLog(@"Error creating sessing:%@", [sessionError description]);
}else{
[session setActive:YES error:nil];
}
两个button点击事件里面
播放button
-(void)playButtonAction:(UIButton *)sender
{
NSLog(@"play");
//判断是否正在播放,如果正在播放
if([self.player isPlaying]){
//暂停播放
[_player pause];
//按钮显示为播放
[self.playButtonsetTitle:@"播放"forState:(UIControlStateNormal)];
}else{
//开始播放
[_player play];
//按钮显示为暂停
[self.playButtonsetTitle:@"暂停"forState:(UIControlStateNormal)];
}
}
录音button
-(void)startButtonAction:(UIButton *)sender
{
NSLog(@"start");
//判断当录音状态为不录音的时候
if(!self.isRecoding){
//将录音状态变为录音
self.isRecoding = YES;
//将录音按钮变为停止
[self.recoronsetTitle:@"停止"forState:(UIControlStateNormal)];
//播放按钮不能被点击
[self.playButton setEnabled:NO];
self.playButton.titleLabel.alpha = 0.5;
//开始录音,将所获取到的录音存到文件里
self.recorder = [[AVAudioRecorderalloc] initWithURL:_tmpFilesettings:nilerror:nil];
//准备记录录音
[_recorderprepareToRecord];
//启动或者回复记录的录音文件
[_recorder record];
_player = nil;
}else{
//录音状态点击录音按钮,停止录音
self.isRecoding = NO;
[self.recoronsetTitle:@"录音"forState:(UIControlStateNormal)];
//录音停止的时候,播放按钮可以点击
[self.playButton setEnabled:YES];
[self.playButton.titleLabel setAlpha:1];
//停止录音
[_recorder stop];
_recorder = nil;
NSError *playError;
self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:_tmpFile error:&playError];
//当播放录音为空,打印错误信息
if(self.player == nil){
NSLog(@"Error crenting player: %@", [playError description]);
}
self.player.delegate = self;
}
}
点击事件写完后,最后必须调用这个事件
//播放结束后调用方法
-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
//按钮标题变为播放
[self.playButtonsetTitle:@"播放"forState:UIControlStateNormal];
}