美文网首页
iOS开发之音频--录音

iOS开发之音频--录音

作者: 轮子糙 | 来源:发表于2018-05-30 17:32 被阅读57次

    关于录音,这里提供更为详细的讲解网址:参考博客,并且该博客有更完整的详述和代码实现哦。

    内容大纲:
    1、录音应用场景。
    2、录音功能实现。
    3、概念补充。
    4、开发经验。

    1、录音应用场景

    ① 语言聊天:在即时通讯APP中,例如即时通讯APP中,例如微信、QQ等等,都有语音发送功能。
    ②语音备忘录:录一段音频,来记录某件事情。

    2、录音功能实现
    ①导入AVFoundation框架,一些多媒体的处理,基本都使用这个框架。
    ②使用AVAudioRecorder进行录音

    <1>创建录音文件存放路径
    <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];
    

    <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上简单实现三个按钮监听:

    image

    <2>实现的代码:

    #import "ViewController.h"
    #import@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
    

    <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中所有的编码格式。
    

    ③参考资料地址:
    音频编码

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

    参考博客:通过(lame)将录制音频转换成Mp3

    ********将来的你一定会感激现在拼命的自己,愿每一个努力的人都能有收获!********
    我的传送门: 个人博客 CSDN github
    微信公众号:搞事情的程序猿

    相关文章

      网友评论

          本文标题:iOS开发之音频--录音

          本文链接:https://www.haomeiwen.com/subject/rdrxsftx.html