格式相关:
支持的输出格式,有 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,