我正试图在蟒蛇中实现主动降噪。我的项目由两套代码组成:
我的目标是,当你运行程序,它将开始录音通过麦克风。在您完成录制之后,当您播放该文件时,将有一个名为"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)发布于 2018-04-20 18:23:33
实际的噪声滤波是困难和强烈的。然而,使用pydub库可以很容易地创建一个使用高通和低通滤波器的简单噪声滤波器。请参阅这里有更多的细节(安装,需求等)
另外,请看这里获得关于使用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) https://stackoverflow.com/questions/49869050
复制相似问题