import "AudioRecoderViewController.h"
@interface AudioRecoderViewController ()
@end
@implementation AudioRecoderViewController
@synthesize recoder,player;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
//视图资源的加载
-(void)loadView{
//定义UIView
UIView *view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];
view.backgroundColor = [UIColor orangeColor];
self.view = view;
//状态显示label的初始化
label = [[UILabel alloc] initWithFrame:CGRectMake(90, 40, 160, 40)];
//设置label状态显示 显示为正在录制
label.textColor = [UIColor greenColor];
label.text = @"等待录制";
label.textAlignment = NSTextAlignmentCenter;
[self.view addSubview:label];
//定义按钮
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame = CGRectMake(90, 100, 160, 40);
[button setTitle:@"开始录制" forState:UIControlStateNormal];
[button addTarget:self action:@selector(startRecoder) forControlEvents:UIControlEventTouchUpInside];
//添加显示
[self.view addSubview:button];
//定义按钮
UIButton *btn2 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
btn2.frame = CGRectMake(90, 160, 160, 40);
[btn2 setTitle:@"停止录制" forState:UIControlStateNormal];
[btn2 addTarget:self action:@selector(stopRecoder) forControlEvents:UIControlEventTouchUpInside];
//添加显示
[self.view addSubview:btn2];
//定义按钮
UIButton *btn3 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
btn3.frame = CGRectMake(90, 220, 160, 40);
[btn3 setTitle:@"播放录制" forState:UIControlStateNormal];
[btn3 addTarget:self action:@selector(startRecoderPlay) forControlEvents:UIControlEventTouchUpInside];
//添加显示
[self.view addSubview:btn3];
}
//开始录制的方法
-(void)startRecoder{
//设置label状态显示 显示为正在录制
label.textColor = [UIColor redColor];
label.text = @"录制中...";
label.textAlignment = NSTextAlignmentCenter;
//判断当前的录制状态和播放状态
if (recoder.isRecording) {
[recoder stop];
}
if (player.isPlaying) {
[player stop];
}
NSError *err = nil;
//设定录制信息
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryRecord error:&err];
[[AVAudioSession sharedInstance] setActive:YES error:&err];
//设置采样的详细数据
NSMutableDictionary *settings = [NSMutableDictionary dictionary];
[settings setValue:[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey];
[settings setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey]; //采样率
[settings setValue:[NSNumber numberWithInt:1]
forKey:AVNumberOfChannelsKey];//通道的数目
[settings setValue:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey];//采样位数 默认 16
[settings setValue:[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsBigEndianKey];//大端还是小端 是内存的组织方式
[settings setValue:[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsFloatKey];//采样信号是整数还是浮点数
//定义路径,设定要保存的位置 /BDEIDJDFDSF-SDfDS4232/document
NSString *dir = [NSHomeDirectory() stringByAppendingPathComponent:@"documents"];
//设定路径
NSString *savePath = [NSString stringWithFormat:@"%@/testAudio.aif",dir];
NSLog(@"savaPath:%@",savePath);
//定义URL
NSURL *fileUrl = [NSURL fileURLWithPath:savePath];
if (err) {
NSLog(@"录制之前配置出错了!");
return;
}
//初始化了录制的类
recoder = [[AVAudioRecorder alloc] initWithURL:fileUrl settings:settings error:&err];
//开始录制
[recoder record];
}
//停止录制的方法
-(void)stopRecoder{
//设置label状态显示 显示为正在录制
label.textColor = [UIColor greenColor];
label.text = @"已停止...";
label.textAlignment = NSTextAlignmentCenter;
//正在录制的时候,要停止录制,正在播放的时候,要停止播放
if (recoder.isRecording) {
[recoder stop];
}
if(player.isPlaying){
[player stop];
}
}
//开始播放
-(void)startRecoderPlay{
//设置label状态显示 显示为正在录制
label.textColor = [UIColor purpleColor];
label.text = @"正在播放...";
label.textAlignment = NSTextAlignmentCenter;
NSError *err = nil;
//获得录制的文件的路径
//定义路径,设定要保存的位置 /BDEIDJDFDSF-SDfDS4232/document
NSString *dir = [NSHomeDirectory() stringByAppendingPathComponent:@"documents"];
//设定路径
NSString *savePath = [NSString stringWithFormat:@"%@/testAudio.aif",dir];
//定义URL
NSURL *fileUrl = [NSURL fileURLWithPath:savePath];
//设定后台播放
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&err];
//设定为激活状态
[[AVAudioSession sharedInstance] setActive:YES error:&err];
//使用播放器进行播放
player = [[AVAudioPlayer alloc] initWithContentsOfURL:fileUrl error:&err];
[player play];
}
- (void)dealloc
{
[recoder release];
[player release];
[label release];
[super dealloc];
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}