我尝试在python中实现主动降噪。我的项目由两组代码组成:
1.录音码
1.声音过滤码
我的目标是,当你运行程序时,它会通过麦克风开始录音。当你完成录音后,会有一个名为“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)
1条答案
按热度按时间qxsslcnc1#
实际的噪声过滤是困难和激烈的。然而,一个简单的噪声过滤器使用高通和低通滤波器可以很容易地创建使用pydub库。请参阅here for more details (install, requirements etc)
有关使用pydub的低通和高通滤波器的更多详细信息,请参见此处。
基本思路是取一个音频文件,然后通过低通和高通滤波器,使高于和低于某个阈值的音频被高度衰减(实际上是演示滤波)。尽管如此,这不会影响任何落在通带中的噪声,您需要查看其他噪声消除技术。