python - 第二个 .wav 文件播放第一个 .wav 文件的增强噪音,而不是减少噪音

标签 python audio scipy pyaudio

我正在尝试用python实现主动降噪。我的项目由两组代码组成:

  1. 录音代码
  2. 声音过滤代码

我的目标是当您运行该程序时,它将开始通过麦克风录音。录音完成后,会生成一个名为“file1.wav”的保存文件,当您播放该文件时,它就是您最初录制的文件。完成后,您现在将通过调用“fltrd()”将“file1.wav”放入过滤器。这将在同一文件夹中创建第二个 wav 文件,并且第二个 wav 文件应该是噪音较少/减少的文件。现在我的问题是第二个 wav 文件增强了噪音而不是减少了噪音。任何人都可以解决我的代码问题吗? :(

下面是我的代码:

import pyaudio
import wave
import matplotlib.pyplot as plt
import numpy as np
import scipy.io.wavfile
import scipy.signal as sp

FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100
CHUNK = 1024
RECORD_SECONDS = 5
WAVE_OUTPUT_FILENAME = "file1.wav"

audio = pyaudio.PyAudio()

# start Recording
stream = audio.open(format=FORMAT, channels=CHANNELS,
                rate=RATE, input=True,
                frames_per_buffer=CHUNK)
print ("recording...")
frames = []

for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
    data = stream.read(CHUNK)
    frames.append(data)
print ("finished recording")


# stop Recording
stream.stop_stream()
stream.close()
audio.terminate()

waveFile = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
waveFile.setnchannels(CHANNELS)
waveFile.setsampwidth(audio.get_sample_size(FORMAT))
waveFile.setframerate(RATE)
waveFile.writeframes(b''.join(frames))
waveFile.close()


x = scipy.io.wavfile.read('file1.wav')
n = x[1]
y = np.zeros(n.shape)
y = n.cumsum(axis=0)

def fltrd():
    n,x = scipy.io.wavfile.read('file1.wav')
    a2 = x.cumsum(axis=0)
    a3 = np.asarray(a2, dtype = np.int16)
    scipy.io.wavfile.write('file2.wav',n,a3)

最佳答案

实际的噪声过滤是困难且激烈的。然而,使用 pydub 库可以轻松创建使用高通和低通滤波器的简单噪声滤波器。请参阅here for more details (install, requirements etc)

还有see here有关使用 pydub 低通和高通滤波器的更多详细信息。

基本思想是获取音频文件,然后将其通过低通滤波器和高通滤波器,以便高于和低于特定阈值的音频将被高度衰减(实际上演示了过滤)。 不过,这不会影响通带中的任何噪声,为此您需要考虑其他噪声消除技术。

from pydub import AudioSegment
from pydub import low_passfilter
from pydub import high_pass_filter
from pydub.playback import play

song = AudioSegment.from_wav('file1.wav')

#Freq in Hz ,Adjust as per your needs
new = song.low_pass_filter(5000).high_pass_filter(200)
play(new)                

关于python - 第二个 .wav 文件播放第一个 .wav 文件的增强噪音,而不是减少噪音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49869050/

相关文章:

Python MySQLdb查询参数 "IS NULL"而不是 "= NULL"

python - 如何使用 PublisherServiceAsyncClient

android - 如何知道媒体播放器控件是否正在播放音乐?

python - 用 python 生成/合成声音?

python - 子集和组合不同长度数组的有效方法

python - 文件上传后返回对象id

python - 循环数据帧列和循环变量

linux - Alsa麦克风输入高通滤波器禁用

python - 使用 scipy 和 matplotlib 绘制分位数、中位数和分布

python - 是否有 scipy/numpy 方法来获取最近插值的索引?