python常见读取语音的3种方法速度对比
作者:王延凯的博客 时间:2021-03-08 11:12:33
python 读取语音文件时,常用的无非以下三种方式,但是在我们数据量变的很大是,不同的读取方式之间的性能差异就会被进一步放大,于是本文着重对比了librosa、soundfile、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.6875s
其次是 soundfile 的方式,一万次语音读取耗时 1.7031s ,与wavfile相差不大
最慢的为 librosa 的方式,一万次语音耗时 416s ,与其他两种方式对比,巨慢。
但是还需要注意的一点就是 soundfile的方式读取,时长会受到版本限制,例如numba等,此外如果在linux环境下进行实验,可能会出现 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
来源:https://blog.csdn.net/weixin_38468077/article/details/128486487
标签:Python,读取,语音
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Asp+ajax打造无刷新新闻评论系统
2008-02-12 15:43:00
![](https://img.aspxhome.com/file/UploadPic/up/2008021216135462.gif)
Python字符串常规操作小结
2023-12-02 08:33:23
![](https://img.aspxhome.com/file/2023/2/66322_0s.png)
js实现黑白div块画空心的图形
2023-08-29 07:24:21
![](https://img.aspxhome.com/file/2023/7/56177_0s.jpg)
教你怎么用Python处理excel实现自动化办公
2023-11-05 02:19:50
![](https://img.aspxhome.com/file/2023/1/64301_0s.png)
价值3亿美元的按钮[译]
2009-03-18 19:39:00
ASP GetRef 函数指针试探
2011-03-16 11:09:00
Python如何实现SSH远程连接与文件传输
2023-06-12 12:34:02
对python字典元素的添加与修改方法详解
2023-10-19 09:36:04
从MySQL导大量数据的程序实现方法
2009-03-06 14:34:00
如何获得ADO的连接信息?
2009-11-23 20:33:00
asp单主键高效通用分页存储过程
2009-02-23 19:21:00
Javascript的一种模块模式
2007-12-05 14:04:00
php中正则替换函数ereg_replace用法实例
2023-06-13 03:03:51
Python元组定义及集合的使用
2023-11-22 12:32:03
如何把图片也存到数据库中去?
2009-11-06 13:56:00
OpenCV角点检测的实现示例
2023-06-25 06:49:10
adodb.stream对象的方法/属性
2008-06-07 08:14:00
XPath 11个实例
2008-09-05 15:06:00
Python及Django框架生成二维码的方法分析
2023-10-11 22:25:48
Linux下MySQL整个数据库的备份与还原
2008-12-29 13:20:00