蜜桃av色欲a片精品一区,麻豆aⅴ精品无码一区二区,亚洲人成网站在线播放影院在线,亚洲 素人 字幕 在线 最新

微立頂科技

新聞資訊

創(chuàng)新 服務(wù) 價(jià)值

  基于python3下wav文件的時(shí)域圖和頻域圖

發(fā)布日期:2022/8/23 17:13:48      瀏覽量:

基于python3下wav文件的時(shí)域圖和頻域圖


import wave
import math
import numpy as np
import matplotlib.pyplot as plt
 
class Audiowave:
 
    def __init__(self,filedir):
        self.filedir=filedir
        self.wavedata=[]
        self.wavewidth=2
        self.wavechannel=2
        self.framerate = 0
        self.Timedata=[]
        self.nframes=0
    def waveopen(self):
        wf=wave.open(self.filedir,"rb")
        self.nframes = wf.getnframes()
        self.wavedata = wf.readframes(self.nframes)
        self.wavewidth=wf.getsampwidth()
        self.wavechannel=wf.getnchannels()
        self.framerate = wf.getframerate()
        time=self.nframes/self.framerate
        bps=self.framerate*self.wavewidth*8*self.wavechannel
        print("總幀數(shù):"+str(self.nframes)+"幀")
        print("采樣率:"+str(self.framerate)+"幀/s")
        print("聲道數(shù):"+str(self.wavechannel)+"個(gè)")
        print("位深:"+str(self.wavewidth*8)+"bit")
        print("比特率:"+str(bps/1000)+"kbps")
        print("時(shí)間:"+ str(time)+"s")
        print("文件大?。?+ str(time*bps/8/1000)+"KB")
        return self.wavedata,self.wavewidth,self.wavechannel,self.framerate,time
 
 
 
    def wavehex_to_DEC(self,wavedata,wavewidth,wavechannel):
        n = int(len(wavedata) / wavewidth)
        i = 0
        j = 0
        for i in range(0, n):
            b = 0
            for j in range(0, wavewidth):
                temp = wavedata[i * wavewidth:(i + 1) * wavewidth][j] * int(math.pow(2, 8 * j))
                b += temp
            if b > int(math.pow(2, 8 * wavewidth - 1)):
                b = b - int(math.pow(2, 8 * wavewidth))
            self.Timedata.append(b)
        self.Timedata = np.array(self.Timedata)
        self.Timedata.shape = -1, wavechannel
        self.Timedata = self.Timedata.T
        x = np.linspace(0, len(self.Timedata[0]), len(self.Timedata[0])) / self.framerate
        return x,self.Timedata
 
    def to_fft(self,data):
        N=self.nframes #取樣點(diǎn)數(shù)
        df = self.framerate / (N - 1)  # 分辨率
        freq = [df * n for n in range(0, N)]
        wave_data2 = data[0:N]
        c = np.fft.fft(wave_data2) * 2 / N
        d = int(len(c) / 2)
        freq=freq[:d - 1]
        fredata=abs(c[:d - 1])
 
        return freq,fredata
 
 
 
    def wavedraw1(self):
        self.waveopen()
        timedata=self.wavehex_to_DEC(self.wavedata,self.wavewidth,self.wavechannel)
        fredata=self.to_fft(timedata[1][0])
 
 
        plt.figure(figsize=(16, 8))
        plt.subplot(2,1,1)
        plt.plot(timedata[0], timedata[1][0])
        plt.xlabel(u"Time(S)")
        plt.subplot(212)
        plt.plot(fredata[0],fredata[1])
        plt.xlim(0, 800)
        plt.xlabel(u"Freq(Hz)")
 
        plt.subplots_adjust(hspace=0.4)
        plt.show()
 
    def wavedrawall(self):
        self.waveopen()
        n=self.wavechannel
        timedata = self.wavehex_to_DEC(self.wavedata, self.wavewidth, self.wavechannel)
        xtimedata=timedata[0]
        ytimedata=timedata[1]
        # print(ytimedata)
        i=0
        plt.figure(figsize=(16, 8))
        # plt.legend(prop=font_set)
        for i in range(0,n):
            a=plt.subplot(2, n, i+1)
            a.set_title("track"+str(i+1))
            plt.plot(xtimedata, ytimedata[i])
            plt.xlabel(u"Time(S)")
            # print(ytimedata[i])
            fredata = self.to_fft(ytimedata[i])
            plt.subplot(2,n,i+1+n)
            plt.plot(fredata[0], fredata[1])
            plt.xlim(0, 4000)
            plt.xlabel(u"Freq(Hz)")
        plt.subplots_adjust(hspace=0.4)
        plt.show()
 
 
 
 
 # a=Audiowave("file.wav").wavedraw1()
a=Audiowave(r"1.wav").wavedrawall()
 
 


實(shí)現(xiàn)效果如下



  業(yè)務(wù)實(shí)施流程

需求調(diào)研 →

團(tuán)隊(duì)組建和動(dòng)員 →

數(shù)據(jù)初始化 →

調(diào)試完善 →

解決方案和選型 →

硬件網(wǎng)絡(luò)部署 →

系統(tǒng)部署試運(yùn)行 →

系統(tǒng)正式上線 →

合作協(xié)議

系統(tǒng)開(kāi)發(fā)/整合

制作文檔和員工培訓(xùn)

售后服務(wù)

馬上咨詢: 如果您有業(yè)務(wù)方面的問(wèn)題或者需求,歡迎您咨詢!我們帶來(lái)的不僅僅是技術(shù),還有行業(yè)經(jīng)驗(yàn)積累。
QQ: 39764417/308460098     Phone: 13 9800 1 9844 / 135 6887 9550     聯(lián)系人:石先生/雷先生