In [8]:
from __future__ import print_function
# We'll need numpy for some mathematical operations
import numpy as np
import scipy
import os
# matplotlib for displaying the output
import matplotlib.pyplot as plt
import matplotlib.style as ms
ms.use('seaborn-muted')
%matplotlib inline
# and IPython.display for audio output
import IPython.display
# Librosa for audio
import librosa
# And the display module for visualization
import librosa.display
audio_path = "../audio/Drum1.mp3"
audio_path2 = "../Drum1_snare.mp3"
filenames = []
def search(dirname):
try:
global filenames
filenames = os.listdir(dirname)
except PermissionError:
pass
search("../audio/kick/")
for filename in filenames:
audio_path2 = os.path.join("../audio/kick/", filename)
ext = os.path.splitext(audio_path2)[-1]
if ext == '.wav':
y, sr = librosa.load( audio_path, sr=44100 )
y2, sr2 = librosa.load( audio_path2, sr=44100 )
#IPython.display.Audio(data=y, rate=sr)
print( y )
print( len( y ) )
print( len( y2 ) )
with open("y_data.json", "w" ) as f:
f.write( "[\n");
for i in y:
f.write( str( i ) + ",\n" );
f.write( "]\n");
with open("y2_data.json", "w" ) as f:
f.write( "[\n");
for i in y2:
f.write( str( i ) + ",\n" );
f.write( "]\n");
print( sr )
print( sr2 )
print( scipy.spatial.distance.cosine( y[3000:6912] , y2[3000:6912]) )
# check continuos zero value of sample at start and end
firstZero = 0
lastZero = -1
for i in range( 0, len( y2 ) ):
if(y2[i] == 0 or (y2[i]< 7.62939e-04 and y2[i]>-7.62939e-04)):
if(lastZero == -1):
firstZero += 1
else:
lastZero += 1
else:
lastZero = 1
print(firstZero)
print(lastZero)
cmpLen = len(y2) - lastZero - firstZero
for i in range( 0, len(y) - cmpLen ):
if(scipy.spatial.distance.cosine( y[i:i+cmpLen], y2[firstZero:len(y2) - lastZero]) <0.6):
print(scipy.spatial.distance.cosine( y[i:i+cmpLen], y2[firstZero:len(y2) - lastZero]))
print(i)
librosa.display.waveplot( y, sr=44100 )
librosa.display.waveplot( y2, sr=44100 )
#point 1
print("------------------result-----------------------");
print( scipy.spatial.distance.cosine( y[1152+1615:1152+6382], y2[1615:6382] ))
print( scipy.spatial.distance.cosine( y[85824+3000:85824+3200], y2[3000:3200] ))
# for i in range(1615, 6382) :
# if(y[1152+i] != y[i]) :
# print(y[1152+i])
# print(y2[i])
# print(i)
In [5]:
# 3. Run the default beat tracker
tempo, beat_frames = librosa.beat.beat_track(y=y, sr=sr)
print('Estimated tempo: {:.2f} beats per minute'.format(tempo))
# 4. Convert the frame indices of beat events into timestamps
beat_times = librosa.frames_to_time(beat_frames, sr=sr)
print('Saving output to beat_times.csv')
librosa.output.times_csv('/Users/lineplus/Desktop/project/MusicAnalyzer/audio/result.csv', beat_times)
In [8]:
print( tempo )
print( beat_frames )
print( beat_times )
In [21]:
{frame_arr = librosa.util.frame(y, frame_length=2048, hop_length=512)
frame_arr2 = librosa.util.frame(y2, frame_length=2048, hop_length=512)
print( frame_arr )
print( frame_arr2 )
print( len( frame_arr[0] ) )
print( len( frame_arr2[0] ) )
print( len( frame_arr ) )
print( len( frame_arr2 ) )}
In [17]:
librosa.display.waveplot( y )
Out[17]:
In [20]:
librosa.display.waveplot( y2 )
Out[20]:
In [ ]:
sim = scipy.spatial.distance.cosine( frame_arr[0], frame_arr2[0] )
print( sim )