简单学习 Audio Kit 中的格式转换技巧

本文介绍了 Audio Kit 在 iOS 开发中进行音频格式转换的方法,包括支持的输入和输出格式,如 wav、aif、caf、m4a。详细讲解了非压缩音频与压缩音频之间的转换过程,以及使用 Audio Kit 的具体实现,包括压缩音频到非压缩音频、非压缩音频到压缩音频的转换示例。最后展示了转换效果,如 mp3 转 wav、wav 转 m4a 和 mp3 转 m4a 的码率变化。
摘要由CSDN通过智能技术生成
格式相关:
支持的输出格式,有 4 个:

[“wav”, “aif”, “caf”, “m4a”]

其中 caf, 是 core audio format, 支持非压缩格式,和压缩格式 aac

wav, 非压缩格式

m4a, 压缩格式,里面数据一般格式是 aac 压缩格式

不支持 mp3 转出,

音频转 mp3, 一般采用 lame 这个库

支持的输入格式:

[“wav”, “aif”, “caf”, “m4a”

“mp3”, “snd”, “au”, “sd2”,

“aif”, “aiff”, “aifc”, “aac”,

“mp4”, “m4v”, “mov” ]

还有不含尾缀

音频格式转换一般分 4 类:
  • 非压缩音频之间的转化
  • 压缩音频之间的转化

不支持 mp3 转出

  • 非压缩音频,转压缩音频

不支持 mp3 转出

  • 压缩音频, 转非压缩音频

Audio Kit 中, 把 压缩音频 -> 非压缩音频 ( 非压缩音频 ( 格式 A ) -> 非压缩音频 ( 格式 B ) ), 合并成一个方法

func convertToPCM

Audio Kit 中, 音频格式转化的 3 个方法:
  • 压缩音频之间的转化

func convertCompressed

  • 非压缩音频,转压缩音频

func convertAsset

  • 音频(含两种),转非压缩音频

func convertToPCM

判断是否为,压缩音频

判断音频是否压缩,就是看文件的尾缀

    internal func isCompressed(url: URL) -> Bool {
      
        let ext = url.pathExtension.lowercased()
        return (ext == "m4a" || ext == "mp3" || ext == "mp4" || ext == "m4v" || ext == "mpg")
    }

实现部分

音频(含两种),转非压缩音频

这里采用了 ExtAudioFile Service

  • 先配置格式

       // 先创建空白的格式模版 ASBD
       // 输入 ASBD
       var srcFormat = AudioStreamBasicDescription()
       // 输出 ASBD
       var dstFormat = AudioStreamBasicDescription()
       // ...
        
       // 获取源文件的 ASBD
       // 也就是从源文件,取 ASBD, 赋值给 srcFormat
       error = ExtAudioFileGetProperty(inputFile,
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值