根据报错信息,发现在callback函数中出现了TypeError,具体原因需要查看完整的报错信息。同时还有两个UserWarning,分别提示nn.init.xavier_normal和nn.init.normal已经被废弃,应该使用nn.init.xavier_normal_和nn.init.normal_。建议根据提示修改代码,使用新的初始化函数。

错误分析:

  1. TypeError: 可能是由于librosa.load函数在处理音频数据时,传入的参数类型不匹配导致。需要检查file参数是否为有效的音频文件路径或文件对象。
  2. UserWarning: 这是因为 nn.init.xavier_normalnn.init.normal 已经被弃用,建议使用 nn.init.xavier_normal_nn.init.normal_ 代替。

解决方案:

  1. 修改librosa.load函数的参数: 确保file参数为正确的音频文件路径或文件对象,并检查sample_rate参数是否与音频文件匹配。
  2. 使用新的初始化函数: 将代码中 nn.init.xavier_normalnn.init.normal 替换为 nn.init.xavier_normal_nn.init.normal_

示例代码:

import argparse
import os

import librosa
import soundfile
import numpy as np
import pyaudio
import torch
import torch.nn as nn
from scipy.io import wavfile
from torch.autograd import Variable
from tqdm import tqdm

from data_preprocess import slice_signal, window_size, sample_rate
from model import Generator
from utils import emphasis

CHUNK_SIZE = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = sample_rate

p = pyaudio.PyAudio()

generator = Generator()
generator.load_state_dict(torch.load('epochs/generator-9(1).pkl', map_location='cpu'))
if torch.cuda.is_available():
    generator.cuda()

z = torch.nn.init.normal_(torch.Tensor(1, 1024, 8))
z = Variable(z)
if torch.cuda.is_available():
    z = z.cuda()

def callback(in_data, frame_count, time_info, status):
    noisy_slice = np.frombuffer(in_data, dtype=np.int16)
    noisy_slice = slice_signal(noisy_slice, window_size, 1, sample_rate)[0]
    noisy_slice = torch.from_numpy(emphasis(noisy_slice[np.newaxis, np.newaxis, :])).type(torch.FloatTensor)
    if torch.cuda.is_available():
        noisy_slice = noisy_slice.cuda()
    noisy_slice = Variable(noisy_slice)
    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)
    return (generated_speech.astype(np.int16), pyaudio.paContinue)

stream = p.open(format=FORMAT,
                channels=CHANNELS,
                rate=RATE,
                input=True,
                output=True,
                frames_per_buffer=CHUNK_SIZE,
                stream_callback=callback)

stream.start_stream()

while stream.is_active():
    try:
        continue
    except KeyboardInterrupt:
        break

stream.stop_stream()
stream.close()

p.terminate()

注意:

  • 需要根据具体的代码逻辑和报错信息进行相应的调整。
  • 确保librosa库版本与您的代码兼容。
  • 使用新的初始化函数可以避免警告,提高代码的稳定性和可维护性。
实时语音降噪Python代码错误分析与解决

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

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