• 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>实现的代码:

     1 #import "ViewController.h"
     2 #import <AVFoundation/AVFoundation.h>
     3 
     4 @interface ViewController ()
     5 
     6 /** 录音对象*/
     7 @property(nonatomic ,strong) AVAudioRecorder *recorder;
     8 
     9 @end
    10 
    11 @implementation ViewController
    12 
    13 -(void)viewDidLoad{
    14     [self createRecord];
    15 }
    16 
    17 - (void)createRecord{
    18     // 0.1 创建录音文件存放路径
    19     NSString *path = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"test.caf"];
    20     NSLog(@"%@", path);
    21     NSURL *url = [NSURL URLWithString:path];
    22     
    23     // 0.2 创建录音设置
    24     NSMutableDictionary *recordSettings = [[NSMutableDictionary alloc] init];
    25     // 设置编码格式
    26     [recordSettings setValue :[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey: AVFormatIDKey];
    27     // 采样率
    28     [recordSettings setValue :[NSNumber numberWithFloat:11025.0] forKey: AVSampleRateKey];
    29     // 通道数
    30     [recordSettings setValue :[NSNumber numberWithInt:2] forKey: AVNumberOfChannelsKey];
    31     //音频质量,采样质量
    32     [recordSettings setValue:[NSNumber numberWithInt:AVAudioQualityMin] forKey:AVEncoderAudioQualityKey];
    33     
    34     
    35     // 1. 创建录音对象
    36     self.recorder = [[AVAudioRecorder alloc] initWithURL:url settings:recordSettings error:nil];
    37     
    38     
    39     // 2. 准备录音(系统会分配一些录音资源)
    40     [self.recorder prepareToRecord];
    41 }
    42 
    43 - (IBAction)beginRecord
    44 {
    45     NSLog(@"开始录音");
    46     [self.recorder record]; // 直接录音, 需要手动停止
    47 //    [self.recorder recordForDuration:3]; // 从当前执行这行代码开始录音, 录音5秒
    48 //    [recorder recordAtTime:recorder.deviceCurrentTime + 2]; // 2s, 需要手动停止
    49 //    [self.recorder recordAtTime:self.recorder.deviceCurrentTime + 2 forDuration:3]; // 2s  3s
    50 }
    51 
    52 - (IBAction)pauseRecord:(id)sender {
    53     NSLog(@"暂停录音");
    54     [self.recorder pause];
    55 }
    56 
    57 - (IBAction)stopRecord {
    58     NSLog(@"停止录音");
    59     [self.recorder stop];
    60 }
    61 
    62 @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 ,尊重劳动成功。

  • 相关阅读:
    Ui设计哪里有好的素材
    android重写view和viewgroup的区别
    笔记本电脑连接wifi有时候会自动断网提示有限的访问权限解决办法
    ADT 怎么删除logcat过滤规则
    Android开发在使用第三方推送的时候出现INSTALL_FAILED_VERSION_DOWNGRADE
    评论的延迟加载(转载)
    让Entity Framework支持MySql数据库(转载)
    Net4.0---AspNet中URL重写的改进(转载)
    Entity Framework 使用
    深入浅出JSONP--解决ajax跨域问题
  • 原文地址:https://www.cnblogs.com/goodboy-heyang/p/5374322.html
Copyright © 2020-2023  润新知