该代码使用 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 生成器模型对单一音频文件进行增强。您可以根据自己的需求修改代码,例如使用不同的生成器模型、预处理方法和后处理方法等。

音频增强:使用 PyTorch 生成器模型提高音频质量

原文地址: https://www.cveoy.top/t/topic/nwGt 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录