天天看点

url地址拼接_iOS 录音、音频的拼接剪切以及边录边压缩转码

总体内容

1、录音实现

2、录音的编辑 (拼接音频:可以设置多段,音频的剪切:按照时间段剪切)

3、lame静态库进行压缩转码

一、录音实现

1.1、导入 AVFoundation 框架,多媒体的处理, 基本上都使用这个框架

1.2、使用 AVAudioRecorder 进行录音,定义一个JKAudioTool 管理录音的类

(1)、定义一个录音对象,懒加载

提示:设置 AVAudioSessionCategoryPlayAndRecord: 可以边播放边录音(也就是平时看到的背景音乐)
  • [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
  • AVSampleRateKey 必须保证和转码设置的相同.
  • AVNumberOfChannelsKey 必须设置为双声道, 不然转码生成的 MP3 会声音尖锐变声.

(2)、开始录音

(3)、结束录音

(4)、暂停录音

(5)、删除录音

(6)、重新录音

(7)、更新音频测量值

提示:更新音频测量值,注意如果要更新音频测量值必须设置meteringEnabled为YES,通过音频测量值可以即时获得音频分贝等信息 @property(getter=isMeteringEnabled) BOOL meteringEnabled:是否启用音频测量,默认为NO,一旦启用音频测量可以通过updateMeters方法更新测量值

(8)、获得指定声道的分贝峰值

提示:获得指定声道的分贝峰值,注意如果要获得分贝峰值必须在此之前调用updateMeters方法

二、录音的编辑

2.1、理论基础

  • AVAsset:音频源
  • AVAssetTrack:素材的轨道
  • AVMutableComposition :一个用来合成视频的"合成器"
  • AVMutableCompositionTrack :"合成器"中的轨道,里面可以插入各种对应的素材

2.2、拼接录音

2.3、音频的剪切

三、lame静态库

3.1、lame 静态库简介

  • LAME 是一个开源的MP3音频压缩软件。LAME是一个递归缩写,来自LAME Ain't an MP3 Encoder(LAME不是MP3编码器)。它自1998年以来由一个开源社区开发,目前是公认有损品质MP3中压缩效果最好的编码器。
  • Lame 的转码压缩, 是把录制的 PCM 转码成 MP3, 所以录制的 AVFormatIDKey 设置成 kAudioFormatLinearPCM(无损压缩,内容非常大) , 生成的文件可以是 caf 或者 wav.

3.2、如何使用lame

  • 第一步: 下载 lame 的最新版本并解压
  • 第二步: 把下载的 lame 生成静态库,我们使用脚本
  • 下载 build 的脚本
  • 创建一个文件夹放 脚本 与 下载的lame
  • 修改脚本里面的 SOURCE="lame" 名字与 下载的lame名字一致,也可以把 下载的lame名字 改为 lame,那么就不需要改脚本的内容
url地址拼接_iOS 录音、音频的拼接剪切以及边录边压缩转码

修改脚本里面的 `SOURCE="lame"` 名字与 下载的lame名字一致,也可以把 下载的lame名字 改为 `lame`,那么就不需要改脚本的内容

改脚本为可执行脚本

执行脚本

执行脚本的结果如下:生成三个文件

url地址拼接_iOS 录音、音频的拼接剪切以及边录边压缩转码

执行脚本的结果如下:生成三个文件

提示:我们要的是支持多种架构的 fat-lame 文件,把 fat-lame 里面的 lame.h 与 libmp3lame.a 拖走即可

第三步: 导入静态库到工程, 开始使用,我们把代码都写在 JKLameTool 类里面,具体的分析放在 3.3

3.3、lame 的使用,代码都在 JKLameTool 里面

<1>、录完音频 统一 caf 转 mp3,核心代码如下

<2>、caf 转 mp3 : 录音的同时转码,这个是学习iOS 使用 Lame 转码 MP3 的最正确姿势,代码结构上在此基础上进行了封装和改进,具体的请看 JKLameTool 类,在此不再重复,核心思想如下:

  • 边录边转码, 只是我们在可以录制后,重新开一个线程来进行文件的转码
  • 当录音进行中时, 会持续读取到指定大小文件,进行编码, 读取不到,则线程休眠
  • 在 while 的条件中, 我们收到 录音结束的条件,则会结束 do while 的循环.
  • 我们需要在录制结束后发送一个信号, 让 do while 跳出循环

四、上面那么的内容封装之后使用方式如下

4.1、导入 #import "JKRecorderKit.h",录音都存在 /Library/Caches/JKRecorder 里面

4.2、使用 JKAudioTool 类进行调用 录音的一系列操作,如下

开始录音

完成录音

暂停录音

删除录音

caf 转 mp3,第一个参数是原音频的路径,第二个参数是转换为 MP3 后是否删除原来的路径

提示:更多的内容请看demo里面的封装

补充:封装类的说明

  • JKLameTool:对 lame静态库的使用
  • JKSingle:单利的封装
  • JKAudioTool:录音的封装
  • JKAudioFileTool:录音文件的操作,音频拼接,剪切,m4a格式转caf格式,caf格式转m4a格式
  • JKAudioPlayerTool:音频的简单播放封装
  • JKAudioFilePathTool:沙盒路径的一些操作

最后:测试的 demo

推荐博客如下:

iOS 使用 Lame 转码 MP3 的最正确姿势ios多媒体iOS音频格式m4a、caf、amr的相互转换iOS音轨合成(音频与音频,音频与视频)iOS音频录制iOS 实时录音和播放iOS之录音功能

作者:IIronMan

链接:https://www.jianshu.com/p/1a752b92070b

本公众号转载内容已尽可能注明出处,如未能核实来源或转发内容图片有权利瑕疵的,请及时联系本公众号进行修改或删除【联系方式QQ : 3442093904  邮箱:[email protected]】。文章内容为作者独立观点,不代表本公众号立场。版权归原作者所有,如申请授权请联系作者,因文章侵权本公众号不承担任何法律及连带责任。

---END---

url地址拼接_iOS 录音、音频的拼接剪切以及边录边压缩转码