语音文件aac->raw->wav格式转换方法

标题中的三种音频格式介绍:
1、aac
是一种压缩音频的格式,经常由前端app生成,由于后台解码时需要用wav,所以需要将压缩的aac格式解压(不过解压会有损耗)

2、raw
相当于录制的音频源码
pcm:脉冲编码调制,作为对音频源码的编码方式
直接存储采样的数据,不经过压缩
pcm是声卡直接支持的数据格式,如果要让声卡播放其它压缩类型的声音数据,就要先把y压缩数据解压成pcm格式。

区别:
raw简单形容就是本设备不解码直接输出到下一个设备,让下一个设备解码。
PCM就是本机解码完成后输出给下一个设备。

3、wav
是微软封装的一种格式,以RIFF(资源交互文件格式)来组织内部结构,它可以由压缩音频或pcm封装而成,最常见的就是pcm加文件头封装,文件头包括文件格式、采样率、采样位数等信息。

一、aac到raw的解压操作
音频格式转换,用到了ffmpeg工具
首先Linux下安装ffmpeg,如果网速慢可以指定国内的源

sudo apt-get install ffmpeg

然后就可以直接在命令行使用ffmpeg工具

如果需要在python程序中使用ffmpeg,可以用subprocess开一个子进程调用ffmpeg命令
即:

import subprocess
subprocess.call(order,shell=True)

其中order是命令的字符串

具体的ffmpeg命令:

 ffmpeg -i  [输入acc文件] -f s16le -acodec pcm_s16le -ar 16000 -ac 1 [输出raw文件]

命令格式解析:
ffmpeg -i [输入文件名] [参数选项] -f [格式] [输出文件]
主要参数:

-i 设定输入流
-f 设定输出格式
-ss 开始时间

-ar 设定采样率
-ac 设定声音的Channel数
-acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器
-an 不处理音频

s16le是指输出的pcm用有符号 16 位小端,即采样位数是16位
会生成解压后的raw音频文件

二、raw加文件头转换为wav格式
python下的wave库可以实现raw到wav的格式转换,需要指定的内容有:采样率、通道数、采样宽度(单位字节)
例如:

import wave

pcmfile = open(inf_str, 'rb')
pcmdata = pcmfile.read()
wavfile = wave.open(outf_str, 'wb')
wavfile.setframerate(sampleRate)
wavfile.setsampwidth(2)    #16位采样即为2字节
wavfile.setnchannels(1)
wavfile.writeframes(pcmdata)
wavfile.close()

就可以输出wav文件啦

你可能感兴趣的:(语音)