python常見讀取語音的3種方法速度對比
python 讀取語音文件時,常用的無非以下三種方式,但是在我們數(shù)據(jù)量變的很大是,不同的讀取方式之間的性能差異就會被進(jìn)一步放大,于是本文著重對比了librosa、soundfile、wavfile三種方式的在重復(fù)讀取一萬次某個文件所耗時間的差異,為確保實(shí)驗(yàn)結(jié)果的可比性,每種方式讀取出的語音序列值均一致。具體數(shù)值,在下方程序結(jié)果中已經(jīng)標(biāo)示。
# -*- coding: utf-8 -*-
"""
# @Time : 2022/12/29 17:27
# @Author : WangYK
# @Site :
# @File : check_speed.py.py
# @Software: PyCharm
# @Desc: 本文件實(shí)現(xiàn)對比三種常見的都區(qū)語音方式的速度區(qū)別
"""
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類型
#轉(zhuǎn)為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 #重復(fù)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('當(dāng)前程序耗時:{:.9}s'.format(process_time()))
實(shí)驗(yàn)結(jié)果分析
- 最快的方式為 wavfile 的方式,一萬次語音讀取僅耗時 1.6875s
- 其次是 soundfile 的方式,一萬次語音讀取耗時 1.7031s ,與wavfile相差不大
- 最慢的為 librosa 的方式,一萬次語音耗時 416s ,與其他兩種方式對比,巨慢。
但是還需要注意的一點(diǎn)就是 soundfile的方式讀取,時長會受到版本限制,例如numba等,此外如果在linux環(huán)境下進(jìn)行實(shí)驗(yàn),可能會出現(xiàn) OSError: sndfile library not found,如果你是在內(nèi)網(wǎng)或者連接網(wǎng)絡(luò)不方便的話,可以選擇wavfile方式讀取語音文件吧。
附:語音的播放
# 音頻的播放,本實(shí)驗(yàn)使用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) # 寫聲音輸出流到聲卡進(jìn)行播放 while True: ? ? data = wf.readframes(chunk) ? ? if data == "": ? ? ? ? break ? ? stream.write(data) stream.stop_stream() stream.close() p.terminate() ? # 關(guān)閉PyAudio
總結(jié)
到此這篇關(guān)于python常見讀取語音的3種方法速度對比的文章就介紹到這了,更多相關(guān)python讀取語音內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python爬取w3shcool的JQuery課程并且保存到本地
本文主要介紹python爬取w3shcool的JQuery的課程并且保存到本地的方法解析。具有很好的參考價值。下面跟著小編一起來看下吧2017-04-04
Python中關(guān)于Sequence切片的下標(biāo)問題詳解
這篇文章主要給大家介紹了Python中關(guān)于Sequence切片下標(biāo)問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。2017-06-06
Python基于Pymssql模塊實(shí)現(xiàn)連接SQL Server數(shù)據(jù)庫的方法詳解
這篇文章主要介紹了Python基于Pymssql模塊實(shí)現(xiàn)連接SQL Server數(shù)據(jù)庫的方法,較為詳細(xì)的分析了pymssql模塊的下載、安裝及連接、操作SQL Server數(shù)據(jù)庫的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-07-07
python實(shí)現(xiàn)批量監(jiān)聽頁面并發(fā)送郵件
這篇文章主要為大家詳細(xì)介紹了python如何實(shí)現(xiàn)自動化批量監(jiān)聽頁面并發(fā)送郵件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-11-11
Python+eval函數(shù)實(shí)現(xiàn)動態(tài)地計算數(shù)學(xué)表達(dá)式詳解
Python的 eval() 允許從基于字符串或基于編譯代碼的輸入中計算任意Python表達(dá)式。當(dāng)從字符串或編譯后的代碼對象的任何輸入中動態(tài)計算Python表達(dá)式時,此函數(shù)非常方便。本文將利用eval實(shí)現(xiàn)動態(tài)地計算數(shù)學(xué)表達(dá)式,需要的可以參考一下2022-09-09
Python中關(guān)于logging模塊的學(xué)習(xí)筆記
在本篇文章里小編給大家整理的是一篇關(guān)于Python中l(wèi)ogging模塊相關(guān)知識點(diǎn)內(nèi)容,有興趣的朋友們可以參考下。2020-06-06
使用Python實(shí)現(xiàn)圖片批量重命名工具
這篇文章主要為大家介紹了一個基于Python開發(fā)的圖形界面工具,用于批量重命名文件夾中的圖片文件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考下2025-04-04
python中如何使用正則表達(dá)式提取數(shù)據(jù)
這篇文章主要介紹了python中如何使用正則表達(dá)式提取數(shù)據(jù)問題。具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02

