python常見讀取語音的3種方法速度對(duì)比
python 讀取語音文件時(shí),常用的無非以下三種方式,但是在我們數(shù)據(jù)量變的很大是,不同的讀取方式之間的性能差異就會(huì)被進(jìn)一步放大,于是本文著重對(duì)比了librosa、soundfile、wavfile三種方式的在重復(fù)讀取一萬次某個(gè)文件所耗時(shí)間的差異,為確保實(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)對(duì)比三種常見的都區(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萬遍,用于對(duì)比各個(gè)方式耗時(shí) for filename in tqdm(filenames): wav_data=soundfile_load(filename) # soundfile 讀取耗時(shí) 1.7031s wav_data=librosa_loa(filename) # librosa 讀取耗時(shí) 416.23s wav_data=wavfile_load(filename) # wavfile 讀取耗時(shí) 1.6875s print('當(dāng)前程序耗時(shí):{:.9}s'.format(process_time()))
實(shí)驗(yàn)結(jié)果分析
- 最快的方式為 wavfile 的方式,一萬次語音讀取僅耗時(shí) 1.6875s
- 其次是 soundfile 的方式,一萬次語音讀取耗時(shí) 1.7031s ,與wavfile相差不大
- 最慢的為 librosa 的方式,一萬次語音耗時(shí) 416s ,與其他兩種方式對(duì)比,巨慢。
但是還需要注意的一點(diǎn)就是 soundfile的方式讀取,時(shí)長(zhǎng)會(huì)受到版本限制,例如numba等,此外如果在linux環(huán)境下進(jìn)行實(shí)驗(yàn),可能會(huì)出現(xiàn) OSError: sndfile library not found,如果你是在內(nèi)網(wǎng)或者連接網(wǎng)絡(luò)不方便的話,可以選擇wavfile方式讀取語音文件吧。
附:語音的播放
# 音頻的播放,本實(shí)驗(yàn)使用pyaudio(代碼相對(duì)matlab較麻煩,后期簡(jiǎn)化) 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種方法速度對(duì)比的文章就介紹到這了,更多相關(guān)python讀取語音內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
對(duì)網(wǎng)站內(nèi)嵌gradio應(yīng)用的輸入輸出做審核實(shí)現(xiàn)詳解
這篇文章主要為大家介紹了對(duì)網(wǎng)站內(nèi)嵌gradio應(yīng)用的輸入輸出做審核實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04Python使用ClickHouse的實(shí)踐與踩坑記錄
這篇文章主要介紹了Python使用ClickHouse的實(shí)踐與踩坑記錄,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05詳細(xì)整理python 字符串(str)與列表(list)以及數(shù)組(array)之間的轉(zhuǎn)換方法
這篇文章主要介紹了詳細(xì)整理python 字符串(str)與列表(list)以及數(shù)組(array)之間的轉(zhuǎn)換方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08keras.layers.Layer中無法定義name的問題及解決
這篇文章主要介紹了keras.layers.Layer中無法定義name的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02基于Python實(shí)現(xiàn)面向?qū)ο蟀鎸W(xué)生管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了如何利用python實(shí)現(xiàn)學(xué)生管理系統(tǒng)(面向?qū)ο蟀妫?,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07python尋找list中最大值、最小值并返回其所在位置的方法
今天小編就為大家分享一篇python尋找list中最大值、最小值并返回其所在位置的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-06-06python?GUI多行輸入文本Text的實(shí)現(xiàn)
這篇文章主要介紹了python?GUI多行輸入文本Text的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06