In [31]:
import numpy as np
import scipy
import os
# and IPython.display for audio output
import IPython.display
# matplotlib for displaying the output
import matplotlib.pyplot as plt
import matplotlib.style as ms
ms.use('seaborn-muted')
%matplotlib inline
# Librosa for audio
import librosa
# And the display module for visualization
import librosa.display
# Search audio files in audio directory
def search(dirname):
try:
global filenames
filenames = os.listdir(dirname)
except PermissionError:
pass
search("/Users/wonyeong91/Documents/GIT/MusicAnalyzer/audio/kick/")
# check continuos zero value of sample at start and end
def filterZero(yData):
res = []
firstZero = 0
lastZero = -1
for i in range( 0, len( yData ) ):
if(yData[i] == 0 or (yData[i]< 7.62939e-04 and yData[i]>-7.62939e-04)):
if(lastZero == -1):
firstZero += 1
else:
lastZero += 1
else:
lastZero = 1
res = yData[firstZero:len(yData)-lastZero]
return res
averageY = np.empty(shape=(5000, 1))
for filename in filenames:
audio_path = os.path.join("/Users/wonyeong91/Documents/GIT/MusicAnalyzer/audio/kick/", filename)
ext = os.path.splitext(audio_path)[-1]
if ext == '.wav':
sr44100 = 44100
y, sr = librosa.load( audio_path, sr=sr44100 )
newY = filterZero(y)
newSr = sr44100 * 5000 / len( newY )
librosa.output.write_wav('test.wav', newY, sr44100)
y2, sr2 = librosa.load('test.wav', sr=newSr )
print(len(y))
print(len(y2))
print("sr2", sr2)
print(filename)
#generate averageY
for i in range( 0, len(y2) ) :
averageY[i] = averageY[i] + y2[i]/len(filenames)
if(y2[i]/len(filenames) > 0.9 ) :
print("over value : ", averageY[i], y2[i], len(filenames))
librosa.output.write_wav('average.wav', averageY, sr44100)
#if(len(y)>5000):
averageY2, averageSr = librosa.load('average.wav', sr=44100 )
librosa.display.waveplot( averageY2, 44100 )
audio_path = os.path.join("/Users/wonyeong91/Documents/GIT/MusicAnalyzer/audio/", "Odesza_Above_The_Middle.mp3")
y, sr = librosa.load( audio_path, sr=sr44100 )
librosa.output.write_wav('test.mp3', y, 10000)
IPython.display.Audio(data=averageY2, rate=44100)
Out[31]:
In [ ]: