概述
最近在处理音频的时候,需要对多个音频进行拼接以及将wav
转成raw
,然后就发现了sox
工具,正好之前有借助过该工具进行过采样率和通道数的转换。至此就用该文对sox
的使用做一个简单的总结。sox
主要通过命令行的方式来处理音频,接下来主要介绍sox
如何实现上述提到的多音频拼接,格式转换,采样率转换 以及通道数转换。
获取音频信息
首先处理一段音频需要知道该音频的基本信息,包括通道数,采样率,时间长度等。可以通过如下命令得到
soxi q1.wav
输出信息中包含了文件名,通道数以及采样率等信息。另外如果想要得到该音频的详细信息,可以通过
sox q1.wav -n stat
该输出包含了音频长度,最大的幅值,最小幅值,幅值均值等信息。
采样率转换
在一个数据集里面,音频的采样率可能存在不一致的情况,有的音频为16k,有的音频为8k。为了让采样率统一,可以采用如下的命令进行采样率转换。
sox -r 16000 q1.wav -r 8000 output.wav
然后再打印出output.wav
的信息,可以看到采样率已经变成了8000
可以利用上述命令完成任意采样率的转换。
通道数转换
同样的,在一个数据集里面,音频文件的通道数也不一致。此时可以采用如下的命令进行通道数的统一
# 将多个单通道融合成多通道
sox q1.wav q1.wav q1.wav -M outputM.wav
此时查看outputM.wav的信息,显示其为3通道。
接着将outputM.wav变成单通道数据,采用如下命令
sox outputM.wav -c 1 output1.wav
其中-c
指定通道数。此时查看output1.wav的信息,已经成功变成了单通道
格式转换
有些时候某些应用只支持pcm的输入,有些时候只支持wav的输入,如果自己写程序进行转换会很麻烦。sox里提供了方便的命令进行格式转换,并且该命令已经支持了各种各样的格式。包括wav,pcm,mp3,ogg,raw等等。对于非裸数据(如wav,头44个字节包含了该音频的信息),可以直接使用如下命令进行转换
# wav --> raw
sox q1.wav q1.raw
对于那些裸数据(pcm,raw等),进行这类数据转换时,需要加上相应的音频信息。
选项 | 描述 |
-b |
每个编码样本占用的数据位数 |
-c |
音频文件包含的通道数 |
-e |
音频文件的编码类型 |
-r |
音频文件的采样率 |
-t |
音频文件的文件类型 |
至此转换命令可以写成
sox -r 16000 -e float -b 32 -c 1 q1.raw q2.wav
音频拼接
在训练rnnoise的时候,需要使用将数据集中语音拼接成一条语音,而sox同样的提供了拼接命令。
sox q1.wav q1.wav Full.wav
此命令表示将两段q1.wav
拼接成Full.wav
,此时查看Full.wav
的信息,
可以看到Full.wav
的长度变成了q1.wav
的两倍。目前使用的命令基本上就这些,sox中还有很多其它的功能,比如添加音效等。等用到了再整理。
https://mp.weixin.qq.com/s/zs55aIdaSL9dggdlTA3LsQ