Audio

音频格式

无损格式:wav, flac 有损格式:mp3

wav格式为 44 字节作为头部,后续字节为实际的数据。一般采用 int16(取值范围是[-32768, 32767]) 来存储。因此在事先已知音频的“元数据”信息时,可以以下面的方式推算音频时长:

import os
wav_path = "x.wav"
sr = 16000  # 原始数据的sample_rate为16000
n_channels = 1  # 通道数
size = 2  # 单个采样点所占的字节数(int16为2个字节)
seconds = (os.path.getsize(wav_path) - 44) / 2 / n_channels / sr

Python读写语音的包

  • scipy.io.wavfile

  • soundfile: doc

  • audioread

  • librosa

  • torchaudio

  • wavefile

  • wave

依赖关系及安装: (1)torchaudio (0.11.0) 当前可以选用 soundfile 与 sox_io 作为 backend,其中sox_io只适用于linux (2)librosa (v0.7以后) 使用 soundfile 与 audioread 作为 backend 来读写音频。特别的,默认使用 soundfile 进行读写,特别地:mp3 格式的文件 soundfile 无法读取,librosa 会用 audioread 进行读写。 (3)soundfile 的安装步骤为:

(4)audioread 的安装步骤为:

scipy.io.wavfile

只能读写 wav 格式,且 format 只能是 32-bit floating-point32-bit PCM16-bit PCM8-bit PCM

注意:写文件时需要先将对音频resample好,才能写入

soundfile

官方文档的说法, soundfile的API在0.6,0.7,0.8发生了些变化,需要小心这些“坑”。

soundfile 还提供了一些底层API例如:

audioread

librosa

librosa读取数据与soundfile一样一般会做归一化,但多通道情况下,读取出来的维数顺序会与soundfile相反,原因在于如下源码:

wave

代码参考自 webrtcvad

torchaudio

读音频

Last updated

Was this helpful?