经过上文音频知识一的数模转换介绍,我们了解,模拟信号转换为数字信号就称为数模转换,需要进行的步骤:采样,量化,编码。其中编码部分音频裸就是pcm数据,而编码时如果通过不同的算法,就被保存为不同的格式,比如wav,mp3等等。
在我们后续的AI算法中,通常会统一音频文件的采样率,文件格式等,方便模型训练。因为wav是最常见的一种格式,所以今天主要介绍各种格式转换为wav的方法。
WAV:是微软公司专门为Windows开发的一种标准数字音频文件。wav是一种无损的音频文件格式,WAV符合 PIFF(Resource Interchange File Format)规范。所有的WAV都有一个文件头,这个文件头音频流的编码参数。WAV对音频流的编码没有硬性规定,除了PCM之外,还有几乎所有支持ACM规范的编码都可以为WAV的音频流进行编码。
SILK是一个Skype Limited开发的音频压缩格式和音频编解码器。已被扩展为互联网标准Opus的编解码器。
silk的优势主要是压缩率高,便于网络传输,在实时通信服务中非常实用,可以有效降低带宽负载,减少延迟。
silk转wav的步骤:
pip install ffmpeg
wget https://codeload.github.com/kn007/silk-v3-decoder/zip/master
编译
cd silk-v3-decoder-master cd silk make
(3) 使用
# 权限 sudo chmod +x converter.sh
input文件夹内的silk文件转wav到output文件夹
sh converter.sh ./input ./output wav
单个silk文件转wav
sh converter.sh 2.slik wav
PCM:PCM信号是未经过任何编码和压缩处理的数据。
pcm转wav代码:
def conv_pcm2wav(pcm_path,save_path): with open(pcm_path, 'rb') as pcmfile: pcmdata = pcmfile.read() with wave.open(save_path, 'wb') as wavfile: #nchannels, sampwidth, framerate, nframes wavfile.setparams((1, 2, _sample_rate, 0, 'NONE', 'NONE')) wavfile.writeframes(pcmdata)
MP3是一个数据压缩格式。它舍弃脉冲编码调制(PCM)音频数据中,对人类听觉不重要的数据(类似于JPEG,是一个有损图像的压缩格式),从而达到了压缩成小得多的文件大小。
def conv_mp32wav(flac_path,save_path): sound = AudioSegment.from_mp3(flac_path) sound.export(save_path, format="wav")
FLAC与MP3相仿,但是是无损压缩的,也就是说音频以FLAC方式压缩不会丢失任何信息.
def conv_flac2wav(flac_path,save_path): flac_data, sr = sf.read(flac_path, dtype='int16') print("conv_flac2wav", flac_data.shape, sr) if len(flac_data.shape) > 1: flac_data = np.max(flac_data, axis=1) if sr != _sample_rate: flac_data = resampy.resample(flac_data, sr, _sample_rate) wavfile.write(save_path, _sample_rate, flac_data)
这里主要是为了统一采样率。
#resample def conv_wav2wav(wav_path,save_path): wf = wave.open(wav_path, 'rb') params = wf.getparams() nchannels, sampwidth, framerate, nframes = params:4 print("conv_wav2wav",nchannels, sampwidth, framerate, nframes) data = wf.readframes(nframes) data = np.fromstring(data, dtype=np.int16) if nchannels > 1: data = np.reshape(data, -1, nchannels) data = np.max(data, axis=1) if framerate!=_sample_rate: data = resampy.resample(data, framerate, _sample_rate) print("resample",framerate, _sample_rate) wavfile.write(save_path, _sample_rate, data)
本文转载自微信公众号「Java大数据与数据仓库」,作者老董。转载本文请联系Java...
网络配置 设置“网络”:在下拉列表中选择可用的虚拟私有云、子网,并设置私有IP...
云服务器 内存最大多少?内存是决定 云服务器 性能的非常重要的一个参数,内存最...
1. 接口描述 接口请求域名: cvm.tencentcloudapi.com 。 本接口 (AssociateInst...
腾讯 云虚拟主机 叫什么?腾讯云现在基本搜不到 虚拟主机 了,像阿里云也不怎么...
真正的数据价值取决于对业务的洞察力。 数据分析是企业拥有的最强大的资源之一。...
作者:小傅哥 博客: https://bugstack.cn 沉淀、分享、成长,让自己和他人都能...
背景介绍 监控告警系统作为最为常用的服务 能够让开发运维人员时刻了解服务的当...
今天,国际权威AI基准测试MLPerf公布了2021年最新推理测试榜单。 图像分类性能测...
在使用裸金属服务器前,您需要完成本文中的准备工作。 注册华为云并实名认证 为...