前言:本篇介绍录音。

关于录音,这里提供更为详细的讲解网址:http://www.cnblogs.com/kenshincui/p/4186022.html#audioRecord  ,并且该博客有更完整的详述和代码实现哦。

内容大纲:

  1、录音应用场景。

  2、录音功能实现。

  3、概念补充。

  4、开发经验。

正文:

1、录音应用场景

  ① 语言聊天:在即时通讯APP中,例如即时通讯APP中,例如微信、QQ等等,都有语音发送功能。

  ②语音备忘录:录一段音频,来记录某件事情。

2、录音功能实现

  ①导入AVFoundation框架

    一些多媒体的处理,基本都使用这个框架。

  ②使用AVAudioRecorder进行录音

    <1>创建录音文件存放路径

    <2>设置录音附件设置项(#import <AVFoundation/AVAudioSettings.h>)

      2-1、 NSMutableDictionary *recordSettings = [[NSMutableDictionary alloc] init];

      2-2、设置编码格式:

         [recordSettings setValue :[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey: AVFormatIDKey];

      2-3、采样率:

         [recordSettings setValue :[NSNumber numberWithFloat:11025.0] forKey: AVSampleRateKey];

      2-4、通道数:

         [recordSettings setValue :[NSNumber numberWithInt:2] forKey: AVNumberOfChannelsKey];

      2-5、音频质量,采样质量:

         [recordSettings setValue:[NSNumber numberWithInt:AVAudioQualityMin] forKey:AVEncoderAudioQualityKey];

    <3>根据路径以及设置项,创建录音对象

      _audioRecorder = [[AVAudioRecorder alloc] initWithURL:url settings:recordSettings error:nil];

    <4>准备录音

      [self.audioRecorder prepareToRecord];

    <5>开始录音

      [self.audioRecorder record];

    <6>暂停录音

      [self.audioRecorder pause];

    <7>停止录音

      [self.audioRecorder stop];

  ③代码实现:

    <1>首先在storyboard上简单实现三个按钮监听:

      

    <2>实现的代码:

 #import "ViewController.h"
#import <AVFoundation/AVFoundation.h> @interface ViewController () /** 录音对象*/
@property(nonatomic ,strong) AVAudioRecorder *recorder; @end @implementation ViewController -(void)viewDidLoad{
[self createRecord];
} - (void)createRecord{
// 0.1 创建录音文件存放路径
NSString *path = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"test.caf"];
NSLog(@"%@", path);
NSURL *url = [NSURL URLWithString:path]; // 0.2 创建录音设置
NSMutableDictionary *recordSettings = [[NSMutableDictionary alloc] init];
// 设置编码格式
[recordSettings setValue :[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey: AVFormatIDKey];
// 采样率
[recordSettings setValue :[NSNumber numberWithFloat:11025.0] forKey: AVSampleRateKey];
// 通道数
[recordSettings setValue :[NSNumber numberWithInt:] forKey: AVNumberOfChannelsKey];
//音频质量,采样质量
[recordSettings setValue:[NSNumber numberWithInt:AVAudioQualityMin] forKey:AVEncoderAudioQualityKey]; // 1. 创建录音对象
self.recorder = [[AVAudioRecorder alloc] initWithURL:url settings:recordSettings error:nil]; // 2. 准备录音(系统会分配一些录音资源)
[self.recorder prepareToRecord];
} - (IBAction)beginRecord
{
NSLog(@"开始录音");
[self.recorder record]; // 直接录音, 需要手动停止
// [self.recorder recordForDuration:3]; // 从当前执行这行代码开始录音, 录音5秒
// [recorder recordAtTime:recorder.deviceCurrentTime + 2]; // 2s, 需要手动停止
// [self.recorder recordAtTime:self.recorder.deviceCurrentTime + 2 forDuration:3]; // 2s 3s
} - (IBAction)pauseRecord:(id)sender {
NSLog(@"暂停录音");
[self.recorder pause];
} - (IBAction)stopRecord {
NSLog(@"停止录音");
[self.recorder stop];
} @end

    在23~32行的代码,这个是对一个属性添加很多值,是可以抽离出来声明一个属性,然后加值的部分写在懒加载中。

    <3>通知录音之后,可以通过打印出来的路径,然后找到对应的录音文件,可以自己试听测试一下。

3、概念补充

  ①编码

    概念: 编码是信息从一种形式转换为另一种形式的过程。

    编码格式:

      > PCM : 脉冲编码调制,是一种非压缩音频数字化技术,是一种未压缩的原音重现, 数字模式下, 音频的初始信号是PCM

      > MP3

      > AAC: AAC其实是“高级音频编码(advanced audio coding)”的缩写,它是被设计用来取代MP3格式的。

      > HE-AAC: HE-AAC是AAC的一个超集,这个“HE”代表的是“High efficiency”。 HE-AAC是专门为低比特率所优化的一种音频编码格式

      > AMR: AMR全称是“Adaptive Multi-Rate”,它也是另一个专门为“说话(speech)”所优化的编码格式,也是适合低比特率环境下采用

      > ALAC: 它全称是“Apple Lossless”,这是一种没有任何质量损失的音频编码方式,也就是我们说的无损压缩

      > IMA4: 这是一个在16-bit音频文件下按照4:1的压缩比来进行压缩的格式。

  ②文件格式(不同的文件格式,可保存不同的编码格式编码的文件)

      >WAV

        特点: 音质最好的格式, 对应PCM编码。

        适用: 多媒体开发、保存音乐和音效素材。

      >MP3

        特点: 音质好,压缩比比较高,被大量软件和硬件支持。

        适用: 适合用于比较高要求的音乐欣赏。

      >caf

        特点: 适用于几乎iOS中所有的编码格式。

  ③参考资料地址:

    http://baike.baidu.com/link?url=z36Nw7UihAEnCC6BjCygft9rBpLr29Ru0of_9Blpl0aR6qzI1B9iWTD5h3uimPVix2SuuQYo7GVYOIsaaP2Eyq

4、开发经验

  caf 文件格式, 因为某些编码设置, 文件有可能会很大, 而且caf, 格式并不是很通用, 所以在开发过程中, 一般会进行压缩转码, MP3。

  相关学习资料:http://blog.csdn.net/ysy441088327/article/details/7392842

转载注明出处:http://www.cnblogs.com/goodboy-heyang/p/5374322.html ,尊重劳动成功。

IOS开发之音频--录音的更多相关文章

  1. iOS开发系列--音频播放、录音、视频播放、拍照、视频录制

    --iOS多媒体 概览 随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制, ...

  2. iOS开发系列--音频播放、录音、

    音频 在iOS中音频播放从形式上可以分为音效播放和音乐播放.前者主要指的是一些短音频播放,通常作为点缀音频,对于这类音频不需要进行进度.循环等控制.后者指的是一些较长的音频,通常是主音频,对于这些音频 ...

  3. iOS开发系列--音频播放(音效和音乐)播放本地的

    音频 在iOS中音频播放从形式上可以分为音效播放和音乐播放.前者主要指的是一些短音频播放,通常作为 点缀音频,对于这类音频不需要进行进度.循环等控制.后者指的是一些较长的音频,通常是主音频,对于这些音 ...

  4. iOS开发之音频口通信-通过方波来收发数据

    之前做过的项目有需要通过音频口通信用方波来收发数据,由于这方面的资料比较少,下面就介绍下其原理,希望能给大家帮助. 一. 音频通信简介大家应该都知道支付宝声波支付和拉卡拉吧,它们都是利用手机的音频口( ...

  5. iOS开发-解决AVAudioRecorder录音文件无法保存的问题

    我们在开发iOS客户端APP时,有时候会用到录音的功能,一般会使 AVAudioRecorder 这个类.如下面这样: @interface MyViewController : UIViewCont ...

  6. iOS开发之音频播放AVAudioPlayer 类的介绍

    主要提供以下了几种播放音频的方法: 1. System Sound Services System Sound Services是最底层也是最简单的声音播放服务,调用 AudioServicesPla ...

  7. iOS开发——WAVE音频文件解析

    WAV文件也分了好几类,相应的非数据信息存储在文件的头部,下面简单的提一下,然后在最后重点介绍44字节的那种,一般用的都是这个. 1.8KHz采样.16比特量化的线性PCM语音信号的WAVE文件头格式 ...

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

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

  9. iOS开发笔记10:圆点缩放动画、强制更新、远程推送加语音提醒及UIView截屏

    1.使用CAReplicatorLayer制作等待动画 CALayer+CABasicAnimation可以制作很多简单的动画效果,之前的博客中介绍的“两个动画”,一个是利用一张渐变色图片+CABas ...

随机推荐

  1. Dapper学习 - Dapper.Rainbow(三) - Read

    前面已经介绍了新增/修改/删除了, 接下来介绍一下Rainbow的Read方法. 一.Read -- Rainbow原生 1. 先看测试代码 var conStr = ConfigurationMan ...

  2. The Web server is configured to not list the contents of this directory.

    部署一个ASP.NET MVC网站至一个全新的服务器Windows Server 2008 R2, 数据为MS SQL Server 2014 64bit Expression版本. 运行时,它第一次 ...

  3. Entity Framework 实体框架的形成之旅--实体框架的开发的几个经验总结

    在前阵子,我对实体框架进行了一定的研究,然后把整个学习的过程开了一个系列,以逐步深入的方式解读实体框架的相关技术,期间每每碰到一些新的问题需要潜入研究.本文继续前面的主题介绍,着重从整体性的来总结一下 ...

  4. C语言的字符串分割

    说起来很有意思,自认为对C语言理解得还是比较深刻的.但居然到今天才知道有个strtok函数,试用了一下突然感慨以前做了多少重复劳动.每次需要解析配置文件,每次需要分割字符串,居然都是自己去分割字符串, ...

  5. ASP.NET中的随机密码生成

    第一种方法:用.NET中的 Sytem.Guid.NewGuid().ToString() 生成,实际上是对一个128bit数字的十六进制输出.生成的字符由0-9和a-z这几种字符组成,也可能会有“- ...

  6. FireMonkey 导出目前 Style 另存文件

    FireMonkey 能将目前使用的 Style 导出成文件,它提供二种文件格式,请看下列代码: *.style procedure TForm1.Button1Click(Sender: TObje ...

  7. PHP程序员7小时学会Kotlin系列

    这是我尝试给自己一个目标去学会一门新语言的方法.正在创作中,敬请期待! 提纲 第一小时 概念 第二小时 基础 第三小时 函数 第四小时 类与对象 第五小时 类与对象二 第六小时 DSL 第七小时 工程 ...

  8. 关于JAVA日志

    虽然工作有一年了,做了好几个项目,但是对于日志这一块还只局限于拷贝配置文件,对于实现细节和灵活使用都还不会,主要的原因还是以前一直没有重视,在经历了好几个项目以后越发的觉得日志的重要性了.所以这几天都 ...

  9. 第 30 章 使用 Emmet 插件

    学习要点: 1.安装方式 2.自定义!生成 3.快速生成   主讲教师:李炎恢 本章主要探讨了解一下 Sublime Text3 的一个 HTML5 代码提示插件:Emmet,这个插件比自带原生的要强 ...

  10. Hadoop笔记系列 一 用Hadoop进行分布式数据处理(1)

    学习资料参考地址: 1.http://blog.csdn.net/zhoudaxia/article/details/8801769 1.先说说什么是Hadoop? 个人理解:一个分布式文件存储系统+ ...