导入框架:

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);
   
}

IOS开发实现录音功能的更多相关文章

  1. iOS开发之微信聊天工具栏的封装

    之前山寨了一个新浪微博(iOS开发之山寨版新浪微博小结),这几天就山寨个微信吧.之前已经把微信的视图结构简单的拖了一下(IOS开发之微信山寨版),今天就开始给微信加上具体的实现功能,那么就先从微信的聊 ...

  2. 李洪强iOS开发之-环信05_EaseUI 使用指南

    李洪强iOS开发之-环信05_EaseUI 使用指南 EaseUI 使用指南 简介 EaseUI 封装了 IM 功能常用的控件(如聊天会话.会话列表.联系人列表).旨在帮助开发者快速集成环信 SDK. ...

  3. iOS开发系列--Swift语言

    概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题.Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在 ...

  4. iOS开发系列--打造自己的“美图秀秀”

    --绘图与滤镜全面解析 概述 在iOS中可以很容易的开发出绚丽的界面效果,一方面得益于成功系统的设计,另一方面得益于它强大的开发框架.今天我们将围绕iOS中两大图形.图像绘图框架进行介绍:Quartz ...

  5. iOS开发之再探多线程编程:Grand Central Dispatch详解

    Swift3.0相关代码已在github上更新.之前关于iOS开发多线程的内容发布过一篇博客,其中介绍了NSThread.操作队列以及GCD,介绍的不够深入.今天就以GCD为主题来全面的总结一下GCD ...

  6. 总结iOS开发中的断点续传那些事儿

    前言 断点续传概述 断点续传就是从文件赏赐中断的地方重新开始下载或者上传数据,而不是从头文件开始.当下载大文件的时候,如果没有实现断点续传功能,那么每次出现异常或者用户主动的暂停,都会从头下载,这样很 ...

  7. iOS开发系列文章(持续更新……)

    iOS开发系列的文章,内容循序渐进,包含C语言.ObjC.iOS开发以及日后要写的游戏开发和Swift编程几部分内容.文章会持续更新,希望大家多多关注,如果文章对你有帮助请点赞支持,多谢! 为了方便大 ...

  8. iOS开发系列--App扩展开发

    概述 从iOS 8 开始Apple引入了扩展(Extension)用于增强系统应用服务和应用之间的交互.它的出现让自定义键盘.系统分享集成等这些依靠系统服务的开发变成了可能.WWDC 2016上众多更 ...

  9. iOS开发系列--Swift进阶

    概述 上一篇文章<iOS开发系列--Swift语言>中对Swift的语法特点以及它和C.ObjC等其他语言的用法区别进行了介绍.当然,这只是Swift的入门基础,但是仅仅了解这些对于使用S ...

随机推荐

  1. Page.ClientScript.RegisterStartupScript

    Page.ClientScript.RegisterStartupScript方法最初可用的选项之一就是使用一个可实现此功能的 .NET 类来注册脚本块. 第一个是 RegisterStartupSc ...

  2. sql导出查询数据

    from sysobjects where name ='proc_exporttb' and xtype ='P') drop proc proc_exporttb go create proc p ...

  3. windows使用技巧

    使用命令行工具(cmd)并总是要切换到同一个文件夹   ◆通常的办法 打开命令行工具 切换到指定盘符 切换到目录 Microsoft Windows [Version 10.0.14393] (c) ...

  4. Directadmin清空所有Tickets命令

    利用一条命令就快速实现了清空所有Tickets的方法,希望此例子对大家有帮助.     即可清空所有工单,包括系统提示 :> /usr/local/directadmin/data/admin/ ...

  5. SSH项目中,解决中文请求参数乱码,Filter过滤器不起作用的问题

    1.web.xml配置如下(必须放在Struts2配置之前) <!-- 字符编码过滤器配置--> <filter> <filter-name>CharEncodin ...

  6. 重新审视事件对象event

    前言:之前在学习事件对象event时,一是一直在chrome浏览器(作为主运行环境)下运行调试自个儿程序,二是可能当时对事件对象理解不透彻才导致现在对事件对象的用法陷入了一个大坑,遂以此篇博客记之. ...

  7. 数组的join()函数操作

    join()函数的功能为:把数组的所有元素放入一个字符串,元素通过指定的分隔符分隔. 设置这样的数组操作 var a = []; a.push(1);a.push(3.1415926);a.push( ...

  8. http: URL、请求方式

    URL:统一资源定位符,可以从互联网得到和访问资源,是标准资源的位置 结构包括协议.服务器名称(IP地址).端口(有的服务器需要).路径.文件名 协议:告诉浏览器如何处理打开的文件,常用的就是http ...

  9. hdu 2176 取(m)石子游戏

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2176 题意分析:给出M堆石子,两人交替取子,给出先手能否胜利. 不能输出No, 能则输出Yes并给出第 ...

  10. 同一个tomcat多个web应用共享session

    tomcat版本:apache-tomcat-6.0.29(次方tomcat6和tomcat7支持)   1.修改D:\apache-tomcat-6.0.29\conf\server.xml文件   ...