亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

Python 讀取WAV音頻文件 畫頻譜的實例

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

Python 讀取WAV文件

import waveimport structfrom scipy import *from pylab import * #讀取wav文件,我這兒讀了個自己用python寫的音階的wavfilename = ’1.wav’wavefile = wave.open(filename, ’r’) # open for writing #讀取wav文件的四種信息的函數。期中numframes表示一共讀取了幾個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) #建一個y的數列,用來保存后面讀的每個frame的amplitude。y = zeros(numframes) #for循環,readframe(1)每次讀一個frame,取其前兩位,是左聲道的信息。右聲道就是后兩位啦。#unpack是struct里的一個函數,用法詳見http://docs.python.org/library/struct.html。簡單說來就是把#packed的string轉換成原來的數據,無論是什么樣的數據都返回一個tuple。這里返回的是長度為一的一個#tuple,所以我們取它的第零位。for 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,文件初讀取的值。然后本程序最關鍵的一步!specgram!實在太簡單了。。。Fs = frameratespecgram(y, NFFT=1024, Fs=Fs, noverlap=900)show()

補充知識:matlab生成wav文件并用python驗證

在進行頻譜分析時,發現MATLAB和python讀取wav文件的波形不一致,導致不能得出正確結果,為了驗證MATLAB和python哪部分有問題,于是有了這篇博客。

1、需求分析

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

2、代碼實現

2.1 MATLAB生成wav文件

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

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

Python 讀取WAV音頻文件 畫頻譜的實例

2.2 python讀取wav文件

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

python讀取wav文件顯示出來的正弦波如下圖所示:

Python 讀取WAV音頻文件 畫頻譜的實例

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

Python 讀取WAV音頻文件 畫頻譜的實例

我們可以看出峰值為32767(該wav文件有16bit,且帶一個符號位。215=32768215=32768 ),我們進行歸一化處理后的到波形如下圖所示:

Python 讀取WAV音頻文件 畫頻譜的實例

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

以上這篇Python 讀取WAV音頻文件 畫頻譜的實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 国产成人精品亚洲777图片 | 毛片最新网址 | 一级毛片免费视频日本 | 欧美日韩亚洲一区二区三区 | 456亚洲人成影院在线观 | 成人免费视频观看无遮挡 | 老司机成人免费精品视频 | 91精品国产高清久久久久久io | 国产又大又硬又粗又湿 | 亚洲欧美日本韩国 | 国产精品久久新婚兰兰 | 最新国产精品好看的国产精品 | 特级做a爰片毛片免费看一区 | 女性无套免费网站在线看 | 亚洲欧美日韩在线精品2021 | 一级欧美激情毛片 | 国产影视精选网站 | 丝袜超薄交口足456免费视频 | 成人嗯啊视频在线观看 | 欧美亚洲另类久久综合 | 韩国一级黄色 | 成人在线视频免费观看 | 日本第一页 | 黄色成人影视 | 人久热欧美在线观看量量 | 国产一区二区三区免费看 | 国产精品嫩草影院人体模特 | 一级欧美一级日韩毛片99 | 看真人一一级毛片 | 看5xxaaa免费毛片 | 国产精品高清视亚洲精品 | 成人在线网址 | 欧美一级高清在线观看 | 久久精品国产99久久72 | 欧美一级淫片aaaaaaa视频 | 亚洲人成网站在线观看播放青青 | 国产高清自拍视频 | 在线看免费观看韩国特黄一级 | 久久综合九色综合桃花 | 麻豆国产精品入口免费观看 | 国产精品国产色综合色 |