一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

利用Python進(jìn)行錄音和音頻分析

 xvdo 2021-11-12

import wave
import pyaudio

# 定義數(shù)據(jù)流塊
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100
# 錄音時間
RECORD_SECONDS = 5
# 要寫入的文件名
WAVE_OUTPUT_FILENAME = 'output.wav'
# 創(chuàng)建PyAudio對象
p = pyaudio.PyAudio()

# 打開數(shù)據(jù)流
stream = p.open(format=FORMAT,
                channels=CHANNELS,
                rate=RATE,
                input=True,
                frames_per_buffer=CHUNK)

print('* recording')

# 開始錄音
frames = []
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
    data = stream.read(CHUNK)
    frames.append(data)

print('* done recording')

# 停止數(shù)據(jù)流
stream.stop_stream()
stream.close()

# 關(guān)閉PyAudio
p.terminate()

# 寫入錄音文件
wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()

import wave
import numpy
from pyaudio import PyAudio
import matplotlib.pyplot as plt

# 只讀方式打開WAV文件
wf = wave.open('./output.wav', 'rb')
# 創(chuàng)建PyAudio對象
p = PyAudio()
stream = p.open(format = p.get_format_from_width(wf.getsampwidth()),
    channels = wf.getnchannels(),
    rate = wf.getframerate(),
    output = True)
nframes = wf.getnframes()
framerate = wf.getframerate()

# 讀取完整的幀數(shù)據(jù)到str_data中,這是一個string類型的數(shù)據(jù)
str_data = wf.readframes(nframes)
wf.close()

# 將波形數(shù)據(jù)轉(zhuǎn)換成數(shù)組
wave_data = numpy.fromstring(str_data, dtype=numpy.short)
# 將wave_data數(shù)組改為2列,行數(shù)自動匹配
wave_data.shape = -1,2
# 將數(shù)組轉(zhuǎn)置
wave_data = wave_data.T

def time_plt():
    # time也是一個數(shù)組,與wave_data[0]或wave_data[1]配對形成系列點坐標(biāo)
    time = numpy.arange(0, nframes)*(1.0/framerate)
    # 繪制波形圖
    plt.subplot(211)
    plt.plot(time, wave_data[0], c='r')
    plt.subplot(212)
    plt.plot(time, wave_data[1], c='g')
    plt.xlabel('time (seconds)')
    plt.show()

def freq():
    # 采樣點數(shù),修改采樣點數(shù)和起始位置進(jìn)行不同位置和長度的音頻波形分析
    N = 44100
    start = 0  # 開始采樣位置
    df = framerate/(N-1)  # 分辨率
    freq = [df*n for n in range(0, N)]  # N個元素
    wave_data2 = wave_data[0][start:start+N]
    c = numpy.fft.fft(wave_data2)*2/N
    # 常規(guī)顯示采樣頻率一半的頻譜
    d = int(len(c)/2)
    # 僅顯示頻率在4000以下的頻譜
    while freq[d] > 4000:
        d -= 10
    plt.plot(freq[:d-1], abs(c[:d-1]), 'r')
    plt.show()

def main():
    time_plt()
    freq()

if __name__ == '__main__':
    main()

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    香蕉尹人视频在线精品| 亚洲熟女熟妇乱色一区| 欧美国产日本免费不卡| 91熟女大屁股偷偷对白| 欧洲一级片一区二区三区| 国产一区二区精品丝袜| 免费福利午夜在线观看| 欧美极品欧美精品欧美| 久久福利视频在线观看| 成年人黄片大全在线观看| 婷婷伊人综合中文字幕| 国产亚洲精品一二三区| 久久精品视频就在久久| 久久精品国产亚洲熟女| 久久精品亚洲欧美日韩| 东京热男人的天堂久久综合| 大香伊蕉欧美一区二区三区| 国产精品不卡高清在线观看| 亚洲丁香婷婷久久一区| 亚洲高清亚洲欧美一区二区| 亚洲精品高清国产一线久久| 精品久久久一区二区三| 熟女少妇一区二区三区蜜桃| 中文字幕91在线观看| 国产不卡的视频在线观看| 亚洲欧美黑人一区二区| 欧美午夜性刺激在线观看| 亚洲熟妇av一区二区三区色堂| 青青久久亚洲婷婷中文网| 五月激情婷婷丁香六月网| 国产欧美日韩综合精品二区| 五月天丁香婷婷狠狠爱| 一区二区三区人妻在线| 欧美黑人精品一区二区在线| 一区中文字幕人妻少妇| 日韩午夜老司机免费视频| 青青免费操手机在线视频| 激情内射日本一区二区三区| 日韩精品小视频在线观看| 欧美精品专区一区二区| 国产一区二区久久综合|