import os
import copy
import numpy as np
from scipy.io import wavfile
import matplotlib.pyplot as plt
#https://docs.scipy.org/doc/scipy/reference/generated/scipy.io.wavfile.read.html
#库安装方法,进入命令行: 1、pip install scipy 2、 pip install matplotlib
#若无法下载,请修改源
def normalizVol(source, destination): #参数为音频输入和输出目录
samplerate, dataIn = wavfile.read(source)
#plt.figure()
#plt.subplot(2,1,1)
#plt.plot(dataIn)
dataTemp = copy.deepcopy(dataIn)
dataTemp = dataTemp - np.mean(dataTemp) # 消除直流分量
dataOut = 0.6 * dataTemp / np.max(np.abs(dataTemp)) # 幅值归一化
dataOut = dataOut.astype(np.float32) #wav不能使用double数据直接写入,否则会有兼容性问题
wavfile.write(destination, samplerate, dataOut)
#plt.subplot(2,1,2)
#plt.plot(dataOut)
#plt.show()
def walkFiles(path,endpoint=None): #遍历所有文件夹下的文件
fileList = []
for root,dirs,files in os.walk(path):
for file in files:
filePath = os.path.join(root,file)
if filePath.endswith(endpoint):
fileList.append(filePath)
return fileList
wavPath = "C:\\xx"
wavList = walkFiles(wavPath, endpoint=".wav")
print(len(wavList))
for wav in wavList:
normalizVol(wav, wav)
print("Done.")
注:1、只实现了基本功能;2、使用前需备份音频文件,此代码会直接覆盖路径下的音频文件;