Python读取语音文件速度对比:librosa、soundfile与wavfile性能实测

小鹿同学
小鹿同学
发布时间:2026-10-16 | 14人浏览过
原创

本文通过重复读取同一语音文件一万次的实验,对比了Python中librosa、soundfile和wavfile三种常见音频读取方式的速度差异。结果显示,scipy.io.wavfile最快(约1.69秒),soundfile次之(约1.70秒),而librosa最慢(约416秒)。文章还探讨了soundfile在Linux环境下的依赖问题及wavfile的适用场景,并附带了使用pyaudio播放音频的代码示例,为大数据量下的音频处理选型提供参考。

Python读取语音文件速度对比:librosa、soundfile与wavfile性能实测

在Python中处理语音文件时,开发者通常面临多种读取库的选择。随着数据规模的扩大,不同读取方式之间的性能差距会显著放大。为了明确各库的实际表现,本文重点对比了librosa、soundfile以及scipy.io.wavfile在重复读取同一语音文件一万次时的耗时情况。为保证对比的公平性,实验确保三种方式读取出的语音序列数值保持一致。具体的耗时数据已在后续的程序运行结果中列出。

# -*- coding: utf-8 -*-
"""
# @Time : 2022/12/29 17:27
# @Author : WangYK
# @Site : 
# @File : check_speed.py.py
# @Software: PyCharm
# @Desc:    本文件实现对比三种常见的都区语音方式的速度区别

"""
import librosa
import soundfile as sf
from scipy.io import wavfile
from time import process_time
from tqdm import tqdm


# 读取方式1
def librosa_loa(filename):
    wav_data,fs=librosa.load(filename,sr=16000)     #float64类型
    #wav_data:[-0.03305054 -0.03561401 -0.03814697]
    return wav_data,fs

#读取方式2
def soundfile_load(filename):
    wav_data,fs=sf.read(filename)                   #float64类型
    #wav_data:[-0.03305054 -0.03561401 -0.03814697]
    return wav_data

#读取方式3
def wavfile_load(filename):
    fs,wav_data=wavfile.read(filename)              #int16类型
    #转为float64类型
    wav_data=wav_data/(32768)
    #wav_data:[-0.03305054 -0.03561401 -0.038114697]
    return wav_data

if __name__ == '__main__':
    filename = ['01.wav']
    filenames = filename * 10000   #重复1万遍,用于对比各个方式耗时
    for filename in tqdm(filenames):
        wav_data=soundfile_load(filename)           # soundfile  读取耗时   1.7031s
        wav_data=librosa_loa(filename)              # librosa    读取耗时   416.23s
        wav_data=wavfile_load(filename)             # wavfile    读取耗时   1.6875s

    print('当前程序耗时:{:.9}s'.format(process_time()))

实验结果分析

实验结果分析

  • 测试数据显示,使用wavfile方式读取速度最快,完成一万次语音文件读取仅耗时1.6875秒。
  • soundfile方式紧随其后,完成相同任务耗时1.7031秒,其性能与wavfile非常接近,差异极小。
  • 相比之下,librosa方式表现最慢,处理一万次读取耗时高达416秒。与其他两种轻量级读取方式相比,librosa在此场景下的效率极低。

需要注意的是,soundfile的读取过程可能受版本依赖影响,例如涉及numba等组件。此外,在Linux环境下使用soundfile时,若未安装sndfile库,可能会遇到OSError: sndfile library not found错误。对于内网环境或网络连接不便的场景,建议优先选择无需额外系统库依赖的wavfile方式进行读取。

附:语音播放实现

附:语音播放实现

# 音频的播放,本实验使用pyaudio(代码相对matlab较麻烦,后期简化)
import pyaudio
import wave

chunk = 1024
wf = wave.open(r"C:\Users\zyf\Desktop\Jupyter\1.wav", 'rb')
p = pyaudio.PyAudio()

# 打开声音输出流
stream = p.open(format = p.get_format_from_width(wf.getsampwidth()),
                channels = wf.getnchannels(),
                rate = wf.getframerate(),
                output = True)

# 写声音输出流到声卡进行播放
while True:
    data = wf.readframes(chunk)
    if data == "":
        break
    stream.write(data)

stream.stop_stream()
stream.close()
p.terminate()   # 关闭PyAudio

总结

至此,关于Python中三种常见语音读取方法的速度对比分析已完成。更多Python音频处理相关内容,欢迎查阅本站往期文章或继续浏览后续教程,感谢大家的支持!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表