python中多个wav文件的降噪

时间:2018-12-11 14:35:36

标签: python loops wav noise-reduction

我使用了以下代码 https://github.com/davidpraise45/Audio-Signal-Processing

要使它在包含大约100个wav文件的整个文件夹上运行,但无法获取输出,就无法理解问题所在。

def noise_reduction(dirName):
    types = ('*.wav', '*.aif',  '*.aiff', '*.mp3', '*.au', '*.ogg')
    wav_file_list = []
    for files in types:
        wav_file_list.extend(glob.glob(os.path.join(dirName, files)))

    wav_file_list = sorted(wav_file_list)    
    wav_file_list2 = []
    for i, wavFile in enumerate(wav_file_list):
        #samples = get_samples(wavFile,)
        (Frequency, samples)=read(wavFile)
        FourierTransformation = sp.fft(samples) # Calculating the fourier transformation of the signal
        scale = sp.linspace(0, Frequency, len(samples))
        b,a = signal.butter(5, 9800/(Frequency/2), btype='highpass') # ButterWorth filter 4350
        filteredSignal = signal.lfilter(b,a,samples)
        c,d = signal.butter(5, 200/(Frequency/4), btype='lowpass') # ButterWorth low-filter
        newFilteredSignal = signal.lfilter(c,d,filteredSignal) # Applying the filter to the signal
        write(New,wavFile, Frequency, newFilteredSignal)


noise_reduction("C:\\Users\\adity\\Desktop\\capstone\\hindi_dia_2\\sad\\sad_1.wav")

1 个答案:

答案 0 :(得分:0)

scipy.io.wavfile.read仅支持WAV格式。它无法读取aifaiffmp3auogg文件。

scipy.io.wavfile.write函数有四个参数,只需要三个即可。 New,wavFile最有可能是os.path.join(os.path.dirname(wavFile)"New"+os.path.basename(wavFile))。这将在原始目录的同一目录中创建一个前缀为New的文件。如果要在当前目录中创建它们,请使用"New"+os.path.basename(wavFile)

您正在向函数传递文件名而不是目录名:

noise_reduction("C:\\Users\\adity\\Desktop\\capstone\\hindi_dia_2\\sad\\sad_1.wav")

应该是:

noise_reduction("C:\\Users\\adity\\Desktop\\capstone\\hindi_dia_2\\sad")

这将导致glob模式最终变为:C:\\Users\\adity\\Desktop\\capstone\\hindi_dia_2\\sad\\sad_1.wav\\*.wav。除非sad_1.wav是目录,并且其中包含以.wav结尾的文件,否则该模式没有匹配项。