在Python

时间:2015-05-26 05:05:03

标签: python audio

我正在开展一个项目,我需要从音频信号中提取Mel-Cepstral频率系数(MFCC)。此过程的第一步是将音频文件读入Python。

我的音频文件以.sph格式存储。我无法找到将这些文件直接读入Python的方法。我希望得到采样率,以及带有数据的NumPy数组,类似于wav读取的工作方式。

由于我要处理的音频文件很大,我宁愿不转换为.wav格式进行阅读。你能否建议一种可行的方法?

3 个答案:

答案 0 :(得分:5)

我反对转换为.wav文件,因为我认为这需要花费很多时间。事实并非如此。因此,使用SoX进行转换符合我的需求。

在Windows文件夹中运行时,以下脚本会将该文件夹中的所有文件转换为.wav文件。

cd %~dp0
for %%a in (*.sph) do sox "%%~a" "%%~na.wav"
pause

在此之后,可以使用以下命令来读取文件。

import scipy.io.wavfile as wav
(rate,sig) = wav.read("file.wav")

答案 1 :(得分:3)

基于 The answer of ben,我能够使用 librosa 读取 .sph 文件,因为它可以读取 audioreadffmpeg 可以读取的所有内容。

import librosa
import librosa.display # You need this in librosa to be able to plot

import matplotlib.pyplot as plt

clip_dir = os.path.join("..","babel","LDC2016S10.sph") 
audio,sr = librosa.load(clip_dir,sr=16000) # audio is a numpy array

fig, ax = plt.subplots(figsize=(15,8))
librosa.display.waveplot(audio, sr=sr, ax=ax) 
ax.set(title="LDC2016S10.sph waveform")

Waveform of the .sph file

答案 2 :(得分:0)

您可以使用audioread编解码器通过ffmpeg读取sph文件。