1. 程式人生 > 程式設計 >Python3分析處理聲音資料的例子

Python3分析處理聲音資料的例子

將音訊檔案拷貝到程式所在目錄即可。

#!/usr/bin/env python
# encoding: utf-8
"""
@Company:華中科技大學電氣學院聚變與等離子研究所
@version: V1.0
@author: Victor
@contact: [email protected] or [email protected] 2018--2020
@software: PyCharm
@file: VoiceDataProcessing.py
@time: 2018/9/8 13:08
@Desc:處理聲音資料
"""
 
import wave
import pylab as pl
import numpy as np
 
print('[email protected] or [email protected]')
 
print('working...')
 
print("read wav data....")
# 開啟WAV文件,聲音檔案
f = wave.open(r"speak.wav","rb")
fo = wave.open(r"jg.wav","wb")
fi = wave.open(r"back.wav","rb")
 
# 讀取波形資料
# (nchannels,sampwidth,framerate,nframes,comptype,compname)
params = f.getparams()
nchannels,nframes = params[:4]
str_data = f.readframes(nframes)
 
fi_params = fi.getparams()
fi_nframes = fi_params[3]
fi_str_data = fi.readframes(fi_nframes)
 
# 將波形資料轉換為陣列,並更改
print("update wav data....")
wave_data = np.fromstring(str_data,dtype=np.short)
fi_wave_data = np.fromstring(fi_str_data,dtype=np.short)
 
# 複製併合並聲音
new_wave_data = np.hstack((wave_data,wave_data,wave_data))
temp_wavedata = fi_wave_data[:len(new_wave_data)]
new_wave_data = temp_wavedata * 0.5 + new_wave_data * 0.5
 
new_wave_data = np.array(new_wave_data)
new_wave_data = new_wave_data.astype(wave_data.dtype)
new_str_data = new_wave_data.tostring()
# 寫波形資料引數
print("save new wav files....")
fo.setnchannels(nchannels)
fo.setframerate(framerate)
fo.setsampwidth(sampwidth)
fo.writeframes(new_str_data)
 
# 繪製波形
wave_data.shape = -1,2
wave_data = wave_data.T
time = np.arange(0,nframes) * (1.0 / framerate)
pl.subplot(221)
pl.plot(time,wave_data[0])
pl.subplot(222)
pl.plot(time,wave_data[1],c="g")
pl.xlabel("time (seconds)")
pl.show()
 
# 繪製波形
new_wave_data.shape = -1,2
new_wave_data = new_wave_data.T
new_time = np.arange(0,nframes * 8) * (1.0 / framerate)
pl.subplot(223)
pl.plot(new_time,new_wave_data[0])
pl.subplot(224)
pl.plot(new_time,new_wave_data[1],c="g")
pl.xlabel("time (seconds)")
pl.show()

以上這篇Python3分析處理聲音資料的例子就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。