博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IOS开发实现录音功能
阅读量:6177 次
发布时间:2019-06-21

本文共 2621 字,大约阅读时间需要 8 分钟。

导入框架:

1
#import <AVFoundation/AVFoundation.h>

声明全局变量:

1
2
3
4
5
@interface ViewController ()<AVAudioRecorderDelegate>
{
  
AVAudioRecorder *audioRecorder;
}
@end

在ViewDidLoad中:

1
2
3
4
5
6
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
 
button.frame = CGRectMake(100, 100, 100, 100);
 
[button setTitle:@
"TICK"
forState:UIControlStateNormal];
 
button.backgroundColor = [UIColor brownColor];
 
[button addTarget:self action:@selector(startAudioRecoder:) forControlEvents:UIControlEventTouchUpInside];
 
[self.view addSubview:button];

按钮的触发事件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
- (
void
)startAudioRecoder:(UIButton *)sender{
  
sender.selected = !sender.selected;
  
if
(sender.selected != YES) {
    
[audioRecorder stop];
    
return
;
  
}
   
  
//  URL是本地的URL AVAudioRecorder需要一个存储的路径
  
NSString *name = [NSString stringWithFormat:@
"%d.aiff"
,(
int
)[NSDate date].timeIntervalSince1970];
   
  
NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:name];
  
NSError *error;
  
//  录音机 初始化
  
audioRecorder = [[AVAudioRecorder alloc]initWithURL:[NSURL fileURLWithPath:path] settings:@{AVNumberOfChannelsKey:@2,AVSampleRateKey:@44100,AVLinearPCMBitDepthKey:@32,AVEncoderAudioQualityKey:@(AVAudioQualityMax),AVEncoderBitRateKey:@128000} error:&error];
  
[audioRecorder prepareToRecord];
  
[audioRecorder record];
  
audioRecorder.delegate = self;
  
/*
   
1.AVNumberOfChannelsKey 通道数 通常为双声道 值2
   
2.AVSampleRateKey 采样率 单位HZ 通常设置成44100 也就是44.1k
   
3.AVLinearPCMBitDepthKey 比特率 8 16 24 32
   
4.AVEncoderAudioQualityKey 声音质量
       
① AVAudioQualityMin  = 0, 最小的质量
       
② AVAudioQualityLow  = 0x20, 比较低的质量
       
③ AVAudioQualityMedium = 0x40, 中间的质量
       
④ AVAudioQualityHigh  = 0x60,高的质量
       
⑤ AVAudioQualityMax  = 0x7F 最好的质量
   
5.AVEncoderBitRateKey 音频编码的比特率 单位Kbps 传输的速率 一般设置128000 也就是128kbps
    
   
*/
   
   
   
  
NSLog(@
"%@"
,path);
 
}

代理方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
- (
void
)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(
BOOL
)flag{
  
NSLog(@
"录音结束"
);
//  文件操作的类
 
NSFileManager *manger = [NSFileManager defaultManager];
 
  
NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
//  获得当前文件的所有子文件subpathsAtPath
  
NSArray *pathlList = [manger subpathsAtPath:path];
 
//  需要只获得录音文件
  
NSMutableArray *audioPathList = [NSMutableArray array];
//  遍历所有这个文件夹下的子文件
  
for
(NSString *audioPath in pathlList) {
//    通过对比文件的延展名(扩展名 尾缀) 来区分是不是录音文件
    
if
([audioPath.pathExtension isEqualToString:@
"aiff"
]) {
//      把筛选出来的文件放到数组中
      
[audioPathList addObject:audioPath];
    
}
  
}
   
  
NSLog(@
"%@"
,audioPathList);
   
}

转载地址:http://wyzda.baihongyu.com/

你可能感兴趣的文章
Java集合框架面试问题集锦
查看>>
Java每天10道面试题,跟我走,offer有!(六)
查看>>
四种途径提高RabbitMQ传输数据的可靠性(二)
查看>>
c语言实现多态
查看>>
Linux 在 TOP 命令中切换内存的显示单位
查看>>
浏览器的加载与页面性能优化
查看>>
RabbitMQ学习总结(2)——安装、配置与监控
查看>>
Java基础学习总结(5)——多态
查看>>
shell: demo
查看>>
使用vc+如何添加特殊字符的控件(创世纪篇)
查看>>
Linux下的常用信号
查看>>
3.UIImageView+category
查看>>
2.UIView+category
查看>>
Android ImageLoader使用
查看>>
LDTP
查看>>
StringUtils工具类的常用方法
查看>>
linux下VNC安装与配置
查看>>
URL编码
查看>>
光模块及光纤知识(含分类,常用类型介绍)
查看>>
Apache 单IP多端口设置
查看>>