音频增强:使用 PyTorch 生成器模型提高音频质量
该代码使用 PyTorch 生成器模型对单一音频文件进行增强,以提高音频质量。
首先导入必要的库:
import argparse
import os
import wave
import numpy as np
import torch
import torch.nn as nn
from scipy.io import wavfile
from torch.autograd import Variable
from tqdm import tqdm
import matplotlib.pyplot as plt
from data_preprocess import slice_signal, window_size, sample_rate
from model import Generator
from utils import emphasis
使用 argparse 模块解析命令行参数:
#--file_name ./p232_036.wav --epoch_name ./epochs/discriminator-50.pkl
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Test Single Audio Enhancement')
parser.add_argument('--file_name', type=str, required=True, help='audio file name')
parser.add_argument('--epoch_name', type=str, required=True, help='generator epoch name')
opt = parser.parse_args()
FILE_NAME = opt.file_name
EPOCH_NAME = opt.epoch_name
加载训练好的生成器模型:
generator = Generator()
generator.load_state_dict(torch.load('epochs/' + EPOCH_NAME, map_location='cpu'))
if torch.cuda.is_available():
generator.cuda()
对输入音频文件进行预处理,得到音频片段集合 noisy_slices,并对每个片段进行增强操作:
noisy_slices = slice_signal(FILE_NAME, window_size, 1, sample_rate)
enhanced_speech = []
for noisy_slice in tqdm(noisy_slices, desc='Generate enhanced audio'):
z = nn.init.normal(torch.Tensor(1, 1024, 8))
noisy_slice = torch.from_numpy(emphasis(noisy_slice[np.newaxis, np.newaxis, :])).type(torch.FloatTensor)
if torch.cuda.is_available():
noisy_slice, z = noisy_slice.cuda(), z.cuda()
noisy_slice, z = Variable(noisy_slice), Variable(z)
generated_speech = generator(noisy_slice, z).data.cpu().numpy()
generated_speech = emphasis(generated_speech, emph_coeff=0.95, pre=False)
generated_speech = generated_speech.reshape(-1)
enhanced_speech.append(generated_speech)
将增强后的音频片段合成为一段音频,并将其保存到指定路径下的 enhanced1_{}.wav 文件中。其中 {} 表示原始音频文件名去掉扩展名后的部分:
enhanced_speech = np.array(enhanced_speech).reshape(1, -1)
file_name = os.path.join(os.path.dirname(FILE_NAME),
'enhanced1_{}.wav'.format(os.path.basename(FILE_NAME).split('.')[0]))
wavfile.write(file_name, sample_rate, enhanced_speech.T)
本代码演示了如何使用 PyTorch 生成器模型对单一音频文件进行增强。您可以根据自己的需求修改代码,例如使用不同的生成器模型、预处理方法和后处理方法等。
原文地址: https://www.cveoy.top/t/topic/nwGt 著作权归作者所有。请勿转载和采集!