카테고리 없음
Bandpass Filter for Audio
Wood Pecker
2021. 2. 5. 21:38
파이썬에서 mp3파일을 읽고 Bandpass 프로세싱을 하고 play하는 샘플 프로그램이다. 오디오 raw 데이터를 처리하고 play하는 프로그램은 여러 프로젝트에서 유용하다.
from scipy.signal import butter, lfilter
import librosa
import librosa.display
import numpy as np
import matplotlib.pyplot as plt
import simpleaudio as sa
def butter_bandpass(lowcut, highcut,fs, order=5):
nyq= 0.5*fs
low= lowcut/nyq
high= highcut/nyq
b,a = butter(order, [low,high], btype='band')
return b,a
def butter_bandpass_filter(data, lowcut,highcut, fs, order=5):
b,a= butter_bandpass( lowcut, highcut, fs, order)
y=lfilter(b,a,data)
return y
def playSineWaveSound():
frequency = 400 # Our played note will be 440 Hz
fs = 44100 # 44100 samples per second
seconds = 3 # Note duration of 3 seconds
t = np.linspace(0, seconds, seconds * fs, False)
note = np.sin(frequency * t * 2 * np.pi)
audio = note * (2 ** 15 - 1) / np.max(np.abs(note))
audio = audio.astype(np.int16)
play_obj = sa.play_buffer(audio, 1, 2, fs)
play_obj.wait_done()
plt.title('Sine signal')
plt.plot(range(0,audio.shape[0]), audio, label='Sine signal')
plt.show()
def callBandPassSample():
audio_wave_data, sr = librosa.load("./datasets/sohn01.mp4.wav") # returns numpy.ndarray
audio = audio_wave_data * (2 ** 15 - 1) / np.max(np.abs(audio_wave_data))
y1= butter_bandpass_filter(audio, 100,520, sr, 3)
#y2= butter_bandpass_filter(audio, 500,700, sr, 3)
#y3= butter_bandpass_filter(audio, 1000,1700, sr, 3)
xx= range(0,audio.shape[0] )
plt.title('Original signal')
plt.plot(xx, audio, label='')
plt.show()
plt.title('Bandpass signal')
plt.plot(xx, y1, label='')
plt.show()
audio2 = y1.astype(np.int16)
play_obj = sa.play_buffer(audio2, 1, 2, sr)
play_obj.wait_done()
pass
if __name__ == "__main__":
callBandPassSample()
pass
반응형