色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Python 讀取WAV音頻文件 畫(huà)頻譜的實(shí)例

瀏覽:13日期:2022-08-02 11:17:54

Python 讀取WAV文件

import waveimport structfrom scipy import *from pylab import * #讀取wav文件,我這兒讀了個(gè)自己用python寫(xiě)的音階的wavfilename = ’1.wav’wavefile = wave.open(filename, ’r’) # open for writing #讀取wav文件的四種信息的函數(shù)。期中numframes表示一共讀取了幾個(gè)frames,在后面要用到滴。nchannels = wavefile.getnchannels()sample_width = wavefile.getsampwidth()framerate = wavefile.getframerate()numframes = wavefile.getnframes() print('channel',nchannels)print('sample_width',sample_width)print('framerate',framerate)print('numframes',numframes) #建一個(gè)y的數(shù)列,用來(lái)保存后面讀的每個(gè)frame的amplitude。y = zeros(numframes) #for循環(huán),readframe(1)每次讀一個(gè)frame,取其前兩位,是左聲道的信息。右聲道就是后兩位啦。#unpack是struct里的一個(gè)函數(shù),用法詳見(jiàn)http://docs.python.org/library/struct.html。簡(jiǎn)單說(shuō)來(lái)就是把#packed的string轉(zhuǎn)換成原來(lái)的數(shù)據(jù),無(wú)論是什么樣的數(shù)據(jù)都返回一個(gè)tuple。這里返回的是長(zhǎng)度為一的一個(gè)#tuple,所以我們?nèi)∷牡诹阄弧or i in range(numframes): val = wavefile.readframes(1) left = val[0:2]#right = val[2:4] v = struct.unpack(’h’, left )[0] y[i] = v #framerate就是44100,文件初讀取的值。然后本程序最關(guān)鍵的一步!specgram!實(shí)在太簡(jiǎn)單了。。。Fs = frameratespecgram(y, NFFT=1024, Fs=Fs, noverlap=900)show()

補(bǔ)充知識(shí):matlab生成wav文件并用python驗(yàn)證

在進(jìn)行頻譜分析時(shí),發(fā)現(xiàn)MATLAB和python讀取wav文件的波形不一致,導(dǎo)致不能得出正確結(jié)果,為了驗(yàn)證MATLAB和python哪部分有問(wèn)題,于是有了這篇博客。

1、需求分析

用MATLAB生成一個(gè)正弦波并保存為wav文件,然后用python讀取這個(gè)wav文件畫(huà)出波形,查看python讀取出來(lái)的波形和matlab生成的波形是否一致。

2、代碼實(shí)現(xiàn)

2.1 MATLAB生成wav文件

Df=5; %頻率間隔fs = 8000; %采樣頻率T = 1/fs; %采樣周期N=fs/Df; %序列點(diǎn)數(shù)time = (N-1)./fs; %第一個(gè)聲音片段的總時(shí)長(zhǎng)t=0:T:(N-1)./fs;y = sin(2*pi*200*t); %生成第一個(gè)聲音片段,注意需要用db2mag()函數(shù)把dB轉(zhuǎn)換成magnitude。sound(y,fs) %可以播放聲音的函數(shù) sound()filename = (’sinwave.wav’); %給文件取名plot(t,y)audiowrite(filename,y,fs) %存儲(chǔ).wav音頻文件,在這里文件名為sinwave.wav

其中生成的正弦波波形如下圖所示:

Python 讀取WAV音頻文件 畫(huà)頻譜的實(shí)例

2.2 python讀取wav文件

import waveimport numpy as npimport pylab as plt#打開(kāi)wav文件 ,open返回一個(gè)的是一個(gè)Wave_read類的實(shí)例,通過(guò)調(diào)用它的方法讀取WAV文件的格式和數(shù)據(jù)。f = wave.open(r'E:練習(xí)音頻信號(hào)處理spectrum.msinwave.wav','rb')#讀取格式信息#一次性返回所有的WAV文件的格式信息,它返回的是一個(gè)組元(tuple):聲道數(shù), 量化位數(shù)(byte單位), 采#樣頻率, 采樣點(diǎn)數(shù), 壓縮類型, 壓縮類型的描述。wave模塊只支持非壓縮的數(shù)據(jù),因此可以忽略最后兩個(gè)信息params = f.getparams()nchannels, sampwidth, framerate, nframes = params[:4]#讀取波形數(shù)據(jù)#讀取聲音數(shù)據(jù),傳遞一個(gè)參數(shù)指定需要讀取的長(zhǎng)度(以取樣點(diǎn)為單位)str_data = f.readframes(nframes)f.close()#將波形數(shù)據(jù)轉(zhuǎn)換成數(shù)組#需要根據(jù)聲道數(shù)和量化單位,將讀取的二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為一個(gè)可以計(jì)算的數(shù)組wave_data = np.fromstring(str_data,dtype=np.short)#通過(guò)取樣點(diǎn)數(shù)和取樣頻率計(jì)算出每個(gè)取樣的時(shí)間。time=np.arange(0,nframes)/framerateprint(params)print(wave_data.max())#找出正弦波的峰值#time 也是一個(gè)數(shù)組,與wave_data[0]或wave_data[1]配對(duì)形成系列點(diǎn)坐標(biāo)plt.plot(time,wave_data/32768)plt.show()

python讀取wav文件顯示出來(lái)的正弦波如下圖所示:

Python 讀取WAV音頻文件 畫(huà)頻譜的實(shí)例

python讀取wav文件的信息及求出波形峰值的結(jié)果如下圖所示:

Python 讀取WAV音頻文件 畫(huà)頻譜的實(shí)例

我們可以看出峰值為32767(該wav文件有16bit,且?guī)б粋€(gè)符號(hào)位。215=32768215=32768 ),我們進(jìn)行歸一化處理后的到波形如下圖所示:

Python 讀取WAV音頻文件 畫(huà)頻譜的實(shí)例

由上圖可以看出MATLAB生成的正弦波保存為wav文件后,python讀取該wav文件。兩種語(yǔ)言下正弦波相同。

以上這篇Python 讀取WAV音頻文件 畫(huà)頻譜的實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 毛片免费全部免费观看 | 99久久99热精品免费观看国产 | 久久久久久中文字幕 | 久青草视频在线 | 免费人成网站 | 亚洲视频黄| 久久视频精品53在线观看 | 草草影院私人免费入口 | 泷泽萝拉亚洲精品中文字幕 | 国产欧美日韩在线一区二区不卡 | 国产成人综合亚洲亚洲欧美 | 97国产精品视频观看一 | 国产在线观看精品一区二区三区91 | 高清偷自拍第1页 | 特黄的欧美毛片 | 国产毛片久久精品 | 欧美一级毛片无遮挡 | 免费一级淫片aaa片毛片a级 | 国内精品伊人久久久影视 | 日韩一区二区三区在线 | 亚洲欧美日韩色 | 久草综合在线观看 | 亚洲欧美视频一区二区 | 99精品国产成人一区二区在线 | 国产乱码一区二区三区四 | 国产99视频在线观看 | 久久视频免费 | 好妞操 | 国内精品免费一区二区观看 | 久草网站| 在线观看中文字幕国产 | 欧美成人精品福利在线视频 | 伊人色综合久久天天人手人停 | 美女视频免费黄色 | 国产成人黄网址在线视频 | 亚洲男人天堂视频 | 一区二区三区四区视频在线观看 | 国产精品欧美一区二区在线看 | 99九九精品免费视频观看 | 久久久久久久岛国免费观看 | 成人国产精品 |