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,读取,语音
0
投稿
猜你喜欢
Python并发爬虫常用实现方法解析
2021-02-06 11:52:08
AJAX实现web页面中级联菜单的设计
2007-09-26 13:37:00
用python画一只帅气的皮卡丘
2023-08-10 09:18:13
JS笛卡尔积算法与多重数组笛卡尔积实现方法示例
2024-05-03 15:32:07
定位后无法选择容器内容解决方案
2008-07-28 13:14:00
利用python实现汉诺塔游戏
2021-02-19 03:03:45
js 替换功能函数,用正则表达式解决,js的全部替换
2024-04-17 09:56:35
python使用pil进行图像处理(等比例压缩、裁剪)实例代码
2022-12-22 16:50:09
深入理解Python中的元类(metaclass)
2021-02-25 22:10:00
深入理解python协程
2021-04-06 09:31:53
Go语言基础for循环语句的用法及示例详解
2024-02-07 16:15:34
Python中使用wxPython开发的一个简易笔记本程序实例
2021-09-07 22:06:22
Python实现弹球小游戏
2022-10-06 21:21:16
Python自动化测试框架之unittest使用详解
2021-07-02 17:42:27
在图片上显示左右箭头类似翻页的代码
2024-04-19 09:48:20
浅谈Python处理json字符串为什么不建议使用eval()
2023-08-17 06:56:34
python中sklearn的pipeline模块实例详解
2021-09-05 00:57:34
Python基于pyecharts实现关联图绘制
2021-04-08 12:05:45
Python利用命名空间解析XML文档
2021-10-06 05:45:32
Oracle数据库中通用的函数实例详解
2023-07-08 04:49:00