iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python常见读取语音的3种方法速度对比
  • 629
分享到

python常见读取语音的3种方法速度对比

Python读取语音文件python怎么读语音python语音处理 2022-12-30 12:12:06 629人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

python 读取语音文件时,常用的无非以下三种方式,但是在我们数据量变的很大是,不同的读取方式之间的性能差异就会被进一步放大,于是本文着重对比了librosa、soundfile、

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

总结

到此这篇关于Python常见读取语音的3种方法速度对比的文章就介绍到这了,更多相关python读取语音内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: python常见读取语音的3种方法速度对比

本文链接: https://www.lsjlt.com/news/176300.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作