import essentia.standard as ess import librosa import glob from pyechonest import config rcParams['figure.figsize'] = (16,4) myLib = glob.glob('/Users/milrober/Desktop/MIR/Code/240E_Homework/samples/*') config.ECHO_NEST_API_KEY="YOUR_API_KEY" myLib songs = [] for song in myLib: loader = ess.MonoLoader(filename=song) s = loader() songs.append(s) def computeFeature(audio, feature): feature_array = [] for a in audio: feature_array.append(feature(a)) return feature_array beatTracker = ess.BeatTrackerDegara() beats = computeFeature(songs, beatTracker) beats[1] #Jay-Z 'Holy Grail' beatTracMultFeat = ess.BeatTrackerMultiFeature() beatsMF = computeFeature(songs, beatTracMultFeat) beatsMF[1] beatsLoudness = ess.BeatsLoudness() beatogram = ess.Beatogram() beatsLoudness(songs[1]) signal, sr = librosa.load(myLib[1], sr=44100) onsets = librosa.onset.onset_strength(signal) tempo = librosa.beat.estimate_tempo(onsets, sr=sr) print round(tempo) #Query tempo from the Echo Nest API from pyechonest import song as ensong results = ensong.search(artist='jay-z',title='holy grail') holy_grail = results[0] print 'tempo:',holy_grail.audio_summary['tempo'],'duration:',holy_grail.audio_summary['duration'] signal, sr = librosa.load(myLib[3], sr=44100) onsets = librosa.onset.onset_strength(signal) tempo = librosa.beat.estimate_tempo(onsets, sr=sr) print round(tempo) results = ensong.search(artist='radiohead',title='lotus flower') lotus_flower = results[0] print 'tempo:',lotus_flower.audio_summary['tempo'],'duration:',lotus_flower.audio_summary['duration'] result = ensong.search(artist='radiohead',title='lotus flower') lotus_flower = result[0] print 'On a scale of 0 to 1, Lotus Flower is ',lotus_flower.audio_summary['danceability'], 'daceable according to EN' danceability = ess.Danceability() print danceability(songs[3]) / 3 #normalizing to 1 for i, song in enumerate(songs): print myLib[i][55:], 's danceability is', danceability(song) / 3