随着社交应用的推广,录音功能的使用频率愈来愈高。
K歌、语音消息、录音笔等。
针对这个需求,iOS专门提供了AVAudioRecorder
类。
AVAudioRecorder类是专用录制音频的接口,包含在AVFoundation框架里。
可以录制任意时长音频
、能控制录音过程[暂停、继续]
、控制音量
。
属性声明 |
功能描述 |
@property(readonly, getter=isRecording) BOOL recording; |
获取录音器是否正在录音 |
@property(assign, nullable) id delegate; |
设置录音器的代理对象 |
@property(readonly) NSTimeInterval currentTime; |
获取当前已录取音频时间 |
@property(readonly) NSTimeInterval deviceCurrentTime NS_AVAILABLE_IOS(6_0); |
获取录音设备已运行的时间 |
方法声明 |
功能描述 |
- (nullable instancetype)initWithURL:(NSURL *)url settings:(NSDictionary *)settings error:(NSError **)outError; |
创建录音器 |
- (BOOL)record; |
开始录音 |
- (void)pause; |
暂停录音 |
- (void)stop; |
停止录音 |
- (BOOL)deleteRecording; |
删除录音文件 |
一、示例
#import
//创建录音器
AVAudioRecorder *recorder = [[AVAudioRecorder alloc]initWithURL:url settings:setting error:nil];
3个参数:url、setting、outError
url代表录音文件将要保存的位置,一般为沙盒中:
//准备存储录音文件的URL
NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
//将录音文件的名字连接都存储路径上
filePath = [filePath stringByAppendingPathComponent:@"test.caf"];
NSURL *url = [NSURL fileURLWithPath:filePath];
setting录制音频时设置的参数,字典类型:
//创建一个LPCM格式的音频文件,并封装在.caf文件中。
NSDictionary *setting = @{
AVFormatIDKey:[NSNumber numberWithInt:kAudioFormatLinearPCM],
AVSampleRateKey:[NSNumber numberWithFloat:44100.0],
AVNumberOfChannelsKey:[NSNumber numberWithInt:2]
};
outError记录了可能存在的错误,是NSError类型的参数
//准备录音
[self.recorder prepareToRecord];
//开始录音
[self.recorder record];
//暂停录音-先判断是否正在录音
if (self.recorder.isRecording) {
[self.recorder pause];
}
//继续录音
if (self.recorder !=nil && !self.recorder.isRecording) {
[self.recorder record];
}
//结束录音-系统会自动将录音文件保存在创建录音器时传入的URL中
[self.recorder stop];
NSLog(@"结束录音");
二、笔者的完整示例
#import "ViewController.h"
#import
@interface ViewController ()
/** recorder录音对象 */
@property(nonatomic, strong) AVAudioRecorder *recorder;
/** 开始录音Button */
@property(nonatomic, weak) UIButton *startBtn;
/** 暂停录音Button */
@property(nonatomic, weak) UIButton *pauseBtn;
/** 继续录音Button */
@property(nonatomic, weak) UIButton *recordBtn;
/** 结束录音Button */
@property(nonatomic, weak) UIButton *endBtn;
/** 按钮数据源*/
@property (nonatomic, strong) NSArray *listArr;
@end
@implementation ViewController
- (NSArray *)listArr{
if (!_listArr) {
_listArr = @[@"startBtn",@"pauseBtn",@"recordBtn",@"endBtn"];
}
return _listArr;
}
- (void)viewDidLoad {
[super viewDidLoad];
[self setupStartBtn:self.startBtn aTag:0];
[self setupStartBtn:self.pauseBtn aTag:1];
[self setupStartBtn:self.recordBtn aTag:2];
[self setupStartBtn:self.endBtn aTag:3];
[self setupRecorder];
}
- (void)setupStartBtn:(UIButton *)button aTag:(NSInteger)I{
CGFloat btnW = 100;
CGFloat btnX = 50;
CGFloat btnH = 40;
CGFloat btnY = 50;
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.tag = I;
[btn setBackgroundColor:[UIColor clearColor]];
[btn setTitle:self.listArr[i] forState:UIControlStateNormal];
btn.titleLabel.textColor = [UIColor greenColor];
btn.layer.borderColor = [UIColor orangeColor].CGColor;
btn.layer.borderWidth = 2;
btn.frame = CGRectMake(btnX, btnY+btnH*i, btnW, btnH);
[btn addTarget:self action:@selector(clickBtn:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn];
self.startBtn = btn;
}
- (void)clickBtn:(UIButton *)btn{
switch (btn.tag) {
case 0:
//准备录音
[self.recorder prepareToRecord];
//开始录音
[self.recorder record];
NSLog(@"开始录音");
break;
case 1:
//暂停录音
if (self.recorder.isRecording) {
[self.recorder pause];
}
NSLog(@"暂停录音");
break;
case 2:
//继续录音
if (self.recorder !=nil && !self.recorder.isRecording) {
[self.recorder record];
}
NSLog(@"继续录音");
break;
case 3:
NSLog(@"已录制%f",self.recorder.currentTime);
//结束录音
[self.recorder stop];
NSLog(@"结束录音");
break;
default:
break;
}
}
- (void)setupRecorder{
//准备存储录音文件的URL
NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
//将录音文件的名字连接都存储路径上
filePath = [filePath stringByAppendingPathComponent:@"test.caf"];
NSURL *url = [NSURL fileURLWithPath:filePath];
//创建一个LPCM格式的音频文件,并封装在.caf文件中。
NSDictionary *setting = @{
AVFormatIDKey:[NSNumber numberWithInt:kAudioFormatLinearPCM],
AVSampleRateKey:[NSNumber numberWithFloat:44100.0],
AVNumberOfChannelsKey:[NSNumber numberWithInt:2]
};
//创建录音器
AVAudioRecorder *recorder = [[AVAudioRecorder alloc]initWithURL:url settings:setting error:nil];
self.recorder = recorder;
}
三、检测
Window -> Devices and Simulator-> 选中你的手机,选中你的项目
-> 点击底下那个齿轮 -> Download Container
-> 选择下载后的路径 -> 下载后的文件显示包内容
-> AppData -> Documents ->这里有刚才录制的音频文件。
代码很丑,求放过.......