我正在尝试在python中实现主动降噪。我的项目由两组代码组成:
我的目标是当您运行程序时,它将通过麦克风开始录制。完成录制后,会有一个名为“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)
答案 0 :(得分:0)
实际的噪音过滤是困难和激烈的。但是,使用pydub库可以轻松创建使用高通和低通滤波器的简单噪声滤波器。见here for more details (install, requirements etc)
另外see here了解有关使用pydub的低通和高通滤波器的更多详细信息。
基本思想是采用音频文件,然后将其传递通过低通和高通滤波器,使得某些线圈上方和下方的音频将被高度衰减(实际上证明了滤波)。 虽然这不会影响通带中的任何噪声,您需要查看其他噪声消除技术。
from pydub import AudioSegment
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)
希望这有帮助。