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

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读取语音内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 使用Python将语音转换为文本的方法

    语音识别是计算机软件识别口语中的单词和短语,并将其转换为可读文本的能力.那么如何在 Python 中将语音转换为文本?如何使用 SpeechRecognition 库在 Python 中将语音转换为文本?我们不需要从头开始构建任何机器学习模型,该库为我们提供了各种著名的公共语音识别 API 的便捷包装. 使用 pip 安装库: pip3 install SpeechRecognition Okey,打开一个新的 Python 文件并导入它: import speech_recognition a

  • python实现将文本转换成语音的方法

    本文实例讲述了python将文本转换成语音的方法.分享给大家供大家参考.具体实现方法如下: # Text To Speech using SAPI (Windows) and Python module pyTTS by Peter Parente # download installer file pyTTS-3.0.win32-py2.4.exe # from: http://sourceforge.net/projects/uncassist # also needs: http://ww

  • Python如何实现文本转语音

    准备 我测试使用的Python版本为2.7.10,如果你的版本是Python3.5的话,这里就不太适合了. 使用Speech API 原理 我们的想法是借助微软的语音接口,所以我们肯定是要进行调用 相关的接口.所以我们需要安装pywin32来帮助我们完成这一个底层的交互. 示例代码 import win32com.client speaker = win32com.client.Dispatch("SAPI.SpVoice") speaker.Speak("Hello, it

  • python 实现语音聊天机器人的示例代码

    前言 在不远的将来,实现一定程度上的语音支持将成为日常科技的基本要求,整合了语音识别的python程序提供了其他技术无法比拟的交互性和可访问性.最重要的是,在python程序中实现语音识别非常简单.整个代码实现下来还不到150行. 原理简介 许多现代语音识别系统会在HMM识别之前使用神经网络,通过特征变换和降维技术来简化语音信号,也可以使用语音活动检测器将音频信号减少到可能包含语音的部分. 幸运的是,对于python来讲,一些语音识别的服务可通过API在线使用,且其中大部分也提供了Python

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

    python 读取语音文件时,常用的无非以下三种方式,但是在我们数据量变的很大是,不同的读取方式之间的性能差异就会被进一步放大,于是本文着重对比了librosa.soundfile.wavfile三种方式的在重复读取一万次某个文件所耗时间的差异,为确保实验结果的可比性,每种方式读取出的语音序列值均一致.具体数值,在下方程序结果中已经标示. # -*- coding: utf-8 -*- """ # @Time : 2022/12/29 17:27 # @Author : Wa

  • Python语音识别API实现文字转语音的几种方法

    搜狗(目前好用,免费) def textToAudio_Sougou(message, filePath): # https://ai.so gou.com/doc/?url=/docs/content/tts/references/rest/ ''' curl -X POST \ -H "Content-Type: application/json" \ --data '{ "appid": "xxx", "appkey":

  • python读取和保存图片5种方法对比

    python读取和保存图片5种方法对比 python中对象之间的赋值是按引用传递的,如果需要拷贝对象,需要用到标准库中的copy模块 方法一:利用 PIL 中的 Image 函数 这个函数读取出来不是 array 格式,这时候需要用 np.asarray(im) 或者 np.array()函数 . 区别:np.array() 是深拷贝,np.asarray() 是浅拷贝 copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. copy.deepcopy 深拷贝 拷贝对象及其子对象

  • Python实现解析参数的三种方法详解

    目录 先决条件 使用 argparse 使用 JSON 文件 使用 YAML 文件 最后的想法 今天我们分享的主要目的就是通过在 Python 中使用命令行和配置文件来提高代码的效率 Let's go! 我们以机器学习当中的调参过程来进行实践,有三种方式可供选择.第一个选项是使用 argparse,它是一个流行的 Python 模块,专门用于命令行解析:另一种方法是读取 JSON 文件,我们可以在其中放置所有超参数:第三种也是鲜为人知的方法是使用 YAML 文件!好奇吗,让我们开始吧! 先决条件

  • Python中创建字典的几种方法总结(推荐)

    1.传统的文字表达式: >>> d={'name':'Allen','age':21,'gender':'male'} >>> d {'age': 21, 'name': 'Allen', 'gender': 'male'} 如果你可以事先拼出整个字典,这种方式是很方便的. 2.动态分配键值: >>> d={} >>> d['name']='Allen' >>> d['age']=21 >>> d[

  • 对python xlrd读取datetime类型数据的方法详解

    使用xlrd读取出来的时间字段是类似41410.5083333的浮点数,在使用时需要转换成对应的datetime类型,下面代码是转换的方法: 首先需要引入xldate_as_tuple函数 from xlrd import xldate_as_tuple 使用方法如下: #d是从excel中读取出来的浮点数 xldate_as_tuple(d,0) xldate_as_tuple第二个参数有两种取值,0或者1,0是以1900-01-01为基准的日期,而1是1904-01-01为基准的日期.该函数

  • 详解python解压压缩包的五种方法

    这里讨论使用Python解压例如以下五种压缩文件: .gz .tar  .tgz .zip .rar 简单介绍 gz: 即gzip.通常仅仅能压缩一个文件.与tar结合起来就能够实现先打包,再压缩. tar: linux系统下的打包工具.仅仅打包.不压缩 tgz:即tar.gz.先用tar打包,然后再用gz压缩得到的文件 zip: 不同于gzip.尽管使用相似的算法,能够打包压缩多个文件.只是分别压缩文件.压缩率低于tar. rar:打包压缩文件.最初用于DOS,基于window操作系统. 压缩

  • Python操作配置文件ini的三种方法讲解

    python 操作配置文件ini的三种方法 方法一:crudini 命令 说明 crudini命令是Linux下的一个操作配置文件的命令工具 用法 crudini --set [--existing] config_file section [param] [value] # 修改配置文件内容 crudini --get [--format=sh|ini] config_file [section] [param] # 获取配置文件内容 crudini --del [--existing] co

  • Python中修改字符串的四种方法

    在Python中,字符串是不可变类型,即无法直接修改字符串的某一位字符. 因此改变一个字符串的元素需要新建一个新的字符串. 常见的修改方法有以下4种. 方法1:将字符串转换成列表后修改值,然后用join组成新字符串 >>> s='abcdef' #原字符串 >>> s1=list(s) #将字符串转换为列表 >>> s1 ['a', 'b', 'c', 'd', 'e', 'f'] #列表的每一个元素为一个字符 >>> s1[4]='

  • python爬虫模拟浏览器的两种方法实例分析

    本文实例讲述了python爬虫模拟浏览器的两种方法.分享给大家供大家参考,具体如下: 爬虫爬取网站出现403,因为站点做了防爬虫的设置 一.Herders 属性 爬取CSDN博客 import urllib.request url = "http://blog.csdn.net/hurmishine/article/details/71708030"file = urllib.request.urlopen(url) 爬取结果 urllib.error.HTTPError: HTTP

随机推荐