IOS开发之音频--录音

简介:

前言:本篇介绍录音。

 

关于录音,这里提供更为详细的讲解网址: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:2] 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

相关文章
|
8天前
|
Java Android开发 Swift
安卓与iOS开发对比:平台选择对项目成功的影响
【10月更文挑战第4天】在移动应用开发的世界中,选择合适的平台是至关重要的。本文将深入探讨安卓和iOS两大主流平台的开发环境、用户基础、市场份额和开发成本等方面的差异,并分析这些差异如何影响项目的最终成果。通过比较这两个平台的优势与挑战,开发者可以更好地决定哪个平台更适合他们的项目需求。
33 1
|
15天前
|
设计模式 安全 Swift
探索iOS开发:打造你的第一个天气应用
【9月更文挑战第36天】在这篇文章中,我们将一起踏上iOS开发的旅程,从零开始构建一个简单的天气应用。文章将通过通俗易懂的语言,引导你理解iOS开发的基本概念,掌握Swift语言的核心语法,并逐步实现一个具有实际功能的天气应用。我们将遵循“学中做,做中学”的原则,让理论知识和实践操作紧密结合,确保学习过程既高效又有趣。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你打开一扇通往iOS开发世界的大门。
|
16天前
|
搜索推荐 IDE API
打造个性化天气应用:iOS开发之旅
【9月更文挑战第35天】在这篇文章中,我们将一起踏上iOS开发的旅程,通过创建一个个性化的天气应用来探索Swift编程语言的魅力和iOS平台的强大功能。无论你是编程新手还是希望扩展你的技能集,这个项目都将为你提供实战经验,帮助你理解从构思到实现一个应用的全过程。让我们开始吧,构建你自己的天气应用,探索更多可能!
38 1
|
24天前
|
IDE Android开发 iOS开发
探索Android与iOS开发的差异:平台选择对项目成功的影响
【9月更文挑战第27天】在移动应用开发的世界中,Android和iOS是两个主要的操作系统平台。每个系统都有其独特的开发环境、工具和用户群体。本文将深入探讨这两个平台的关键差异点,并分析这些差异如何影响应用的性能、用户体验和最终的市场表现。通过对比分析,我们将揭示选择正确的开发平台对于确保项目成功的重要作用。
|
8天前
|
移动开发 前端开发 Swift
iOS 最好的应用程序开发编程语言竟然是这7种
iOS 最好的应用程序开发编程语言竟然是这7种
38 8
|
7天前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异:从代码到用户体验
【10月更文挑战第5天】在移动应用开发的广阔天地中,安卓和iOS两大平台各占半壁江山。它们在技术架构、开发环境及用户体验上有着根本的不同。本文通过比较这两种平台的开发过程,揭示背后的设计理念和技术选择如何影响最终产品。我们将深入探讨各自平台的代码示例,理解开发者面临的挑战,以及这些差异如何塑造用户的日常体验。
|
11天前
|
安全 Swift iOS开发
探索iOS开发中的Swift语言之美
在数字时代的浪潮中,移动应用已成为日常生活的延伸。本文将深入探讨iOS平台上的Swift编程语言,揭示其背后的设计哲学、语法特性以及如何利用Swift进行高效开发。我们将通过实际代码示例,展示Swift语言的强大功能和优雅简洁的编程风格,引导读者理解并运用Swift解决实际问题。
|
21天前
|
开发框架 移动开发 Android开发
安卓与iOS开发中的跨平台解决方案:Flutter入门
【9月更文挑战第30天】在移动应用开发的广阔舞台上,安卓和iOS两大操作系统各自占据半壁江山。开发者们常常面临着选择:是专注于单一平台深耕细作,还是寻找一种能够横跨两大系统的开发方案?Flutter,作为一种新兴的跨平台UI工具包,正以其现代、响应式的特点赢得开发者的青睐。本文将带你一探究竟,从Flutter的基础概念到实战应用,深入浅出地介绍这一技术的魅力所在。
58 7
|
24天前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台解决方案
【9月更文挑战第27天】在移动应用开发的广阔天地中,安卓和iOS两大操作系统如同双子星座般耀眼。开发者们在这两大平台上追逐着创新的梦想,却也面临着选择的难题。如何在保持高效的同时,实现跨平台的开发?本文将带你探索跨平台开发的魅力所在,揭示其背后的技术原理,并通过实际案例展示其应用场景。无论你是安卓的忠实拥趸,还是iOS的狂热粉丝,这篇文章都将为你打开一扇通往跨平台开发新世界的大门。
|
24天前
|
iOS开发 Python
6-8|如何使用Python语言开发IOS混淆工具
6-8|如何使用Python语言开发IOS混淆工具