欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python音頻處理的示例詳解

 更新時間:2020年12月23日 11:26:46   作者:不會vector  
這篇文章主要介紹了python音頻處理的示例詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

準(zhǔn)備工作:
首先,我們需要 import 幾個工具包,一個是 python 標(biāo)準(zhǔn)庫中的 wave 模塊,用于音頻處理操作,另外兩個是 numpy 和 matplot,提供數(shù)據(jù)處理函數(shù)。

一:讀取本地音頻數(shù)據(jù)

處理音頻第一步是需要從讓計算機“聽到”聲音,這里我們使用 python 標(biāo)準(zhǔn)庫中自帶的 wave模塊進行音頻參數(shù)的獲取。

(1) 導(dǎo)入 wave 模塊
(2) 使用 wave 中的函數(shù) open 打開音頻文件,wave.open(file,mode)函數(shù)帶有兩個參數(shù), 第一個 file 是所需要打開的文件名及路徑,使用字符串表示;第二個 mode 是打開的模式,也是用字符串表示 ('rb'或'wb')
(3) 打開音頻后使用 getparams() 獲取音頻基本的相關(guān)參數(shù)(nchannels:聲道數(shù),
sampwidth:量化位數(shù)或量化深度,framerate:采樣頻率,nframes:采樣點數(shù))

# 導(dǎo)入 wave 模塊
import wave
# 用于繪制波形圖
import matplotlib.pyplot as plt
# 用于計算波形數(shù)據(jù)
import numpy as np
# 用于系統(tǒng)處理,如讀取本地音頻文件
import os
 
# 打開WAV文檔
f = wave.open(r"2.wav",'rb' )
# 讀取格式信息
params = f.getparams ()
nchannels,sampwidth, framerate, nframes = params [:4]
print(framerate)

二:讀取單通道音頻,并繪制波形圖(常見音頻為左右2個聲道)

(1) 通過第一步,可以繼續(xù)讀取音頻數(shù)據(jù)本身,保存為字符串格式

readframes:

讀取聲音數(shù)據(jù),傳遞一個參數(shù)指定需要讀取的長度(以取樣點為單位),readframes返回的是二進制數(shù)據(jù)(一大堆bytes),在Python中用字符串表示二進制數(shù)據(jù)。

strData = f.readframes(nframes)

(2) 如果需要繪制波形圖,則需要將字符串格式的音頻數(shù)據(jù)轉(zhuǎn)化為 int 類型

frombuffer:

根據(jù)聲道數(shù)和量化單位,將讀取的二進制數(shù)據(jù)轉(zhuǎn)換為一個可以計算的數(shù)組。

通過frombuffer函數(shù)將二進制轉(zhuǎn)換為整型數(shù)組,通過其參數(shù)dtype指定轉(zhuǎn)換后的數(shù)據(jù)格式。

waveData=np.frombuffer(strData,dtype=np.int16)

此處需要使用到 numpy 進行數(shù)據(jù)格式的轉(zhuǎn)化

(3) 將幅值歸一化
把數(shù)據(jù)變成(0,1)之間的小數(shù)。主要是為了數(shù)據(jù)處理方便提出來的,把數(shù)據(jù)映射到0~1范圍之內(nèi)處理,更加便捷快速。

waveData=waveData*1.0/(max(abs(waveData)))

這一步去掉也可畫出波形圖,可以嘗試不用此步,找出波形圖的不同

(4) 繪制圖像

通過取樣點數(shù)和取樣頻率計算出取樣的時間:

time = np.arange(0,nframes)*(1.0/framerate)

import wave
# 導(dǎo)入 wave 模塊
import matplotlib.pyplot as plt
# 用于繪制波形圖
import numpy as np
# 用于計算波形數(shù)據(jù)
import os
#  用于系統(tǒng)處理,如讀取本地音頻文件
 
f = wave.open(r"di.wav",'rb' )
params = f.getparams ()
nchannels,sampwidth, framerate, nframes = params [:4]
print(framerate)
 
# 讀取波形數(shù)據(jù)
strData = f.readframes(nframes)
# 將字符串轉(zhuǎn)換為16位整數(shù)
waveData = np.frombuffer(strData,dtype=np.int16)
# 幅值歸一化
waveData = waveData*1.0/(max(abs(waveData)))
#計算音頻的時間
time = np.arange(0,nframes)*(1.0 / framerate)
 
plt.plot(time,waveData)
plt.xlabel("Time(s)")
plt.ylabel("Amplitude") 
plt.title("Single channel wavedata")
plt.show()

效果圖

在這里插入圖片描述

到此這篇關(guān)于python音頻處理的示例詳解的文章就介紹到這了,更多相關(guān)python音頻處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論