timeConversion = 44100/ float(hopSize)
groundTruthAlap=42 #secs
analysisLength = 60
#Normalize pools 0-100 (percent)
pitchYinPool = (pool['pitchyin.pitch'][:analysisLength*timeConversion] / max(pool['pitchyin.pitch'][:analysisLength*timeConversion])) * 100
pitchYinConfidencePool = (pool['pitchyin.pitchConfidence'][:analysisLength*timeConversion] / max(pool['pitchyin.pitchConfidence'][:analysisLength*timeConversion])) * 100
centroidPool = (pool['lowlevel.centroid'][:analysisLength*timeConversion] / max(pool['lowlevel.centroid'][:analysisLength*timeConversion])) * 100
rolloffPool = (pool['lowlevel.rolloff'][:analysisLength*timeConversion] / max(pool['lowlevel.rolloff'][:analysisLength*timeConversion])) * 100
fluxPool = (pool['lowlevel.flux'][:analysisLength*timeConversion] / max(pool['lowlevel.flux'][:analysisLength*timeConversion])) * 100
zcrPool = (pool['lowlevel.zcr'][:analysisLength*timeConversion] / max(pool['lowlevel.zcr'][:analysisLength*timeConversion])) * 100
rmsPool = (pool['lowlevel.rms'][:analysisLength*timeConversion] / max(pool['lowlevel.rms'][:analysisLength*timeConversion])) * 100
pitchSaliencePool = (pool['pitchSalience.pitchSalience'][:analysisLength*timeConversion] / max(pool['pitchSalience.pitchSalience'][:analysisLength*timeConversion])) * 100
spectralComplexityPool = (pool['spectralComplexity.spectralComplexity'][:analysisLength*timeConversion] / max(pool['spectralComplexity.spectralComplexity'][:analysisLength*timeConversion])) * 100
#plot values
fig, ax1 = plt.subplots()
l = ax1.vlines(groundTruthAlap, 0, 100, lw=3, alpha = 0.5, color='k')
l0, = ax1.plot(np.linspace(0, analysisLength, len(pool['pitchyin.pitch'][:analysisLength*timeConversion])), pitchYinPool, visible=False)
l1, = ax1.plot(np.linspace(0, analysisLength, len(pool['pitchyin.pitchConfidence'][:analysisLength*timeConversion])), pitchYinConfidencePool, visible=False)
l2, = ax1.plot(np.linspace(0, analysisLength, len(pool['lowlevel.centroid'][:analysisLength*timeConversion])), centroidPool, visible=False)
p2 = ax1.vlines((np.argmax(pool['lowlevel.centroid'][10*timeConversion: analysisLength*timeConversion])/ timeConversion)+ 10, 0, (max(pool['lowlevel.centroid'][10*timeConversion: analysisLength*timeConversion])/ max(pool['lowlevel.centroid'][:analysisLength*timeConversion]))*100, color ='r', visible=False)
l3, = ax1.plot(np.linspace(0, analysisLength, len(pool['lowlevel.rolloff'][:analysisLength*timeConversion])), rolloffPool, visible=False)
p3 = ax1.vlines((np.argmax(pool['lowlevel.rolloff'][10*timeConversion: analysisLength*timeConversion])/ timeConversion)+ 10, 0, (max(pool['lowlevel.rolloff'][10*timeConversion: analysisLength*timeConversion])/ max(pool['lowlevel.rolloff'][:analysisLength*timeConversion]))*100, color ='r', visible=False)
l4, = ax1.plot(np.linspace(0, analysisLength, len(pool['lowlevel.flux'][:analysisLength*timeConversion])), fluxPool, visible=False)
p4 = ax1.vlines((np.argmax(pool['lowlevel.flux'][10*timeConversion: analysisLength*timeConversion])/ timeConversion)+ 10, 0, (max(pool['lowlevel.flux'][10*timeConversion: analysisLength*timeConversion])/ max(pool['lowlevel.flux'][:analysisLength*timeConversion]))*100, color ='r', visible=False)
l5, = ax1.plot(np.linspace(0, analysisLength, len(pool['lowlevel.zcr'][:analysisLength*timeConversion])), zcrPool, visible=False)
p5 = ax1.vlines((np.argmax(pool['lowlevel.zcr'][10*timeConversion: analysisLength*timeConversion])/ timeConversion)+ 10, 0, (max(pool['lowlevel.zcr'][10*timeConversion: analysisLength*timeConversion])/ max(pool['lowlevel.zcr'][:analysisLength*timeConversion]))*100, color ='r', visible=False)
l6, = ax1.plot(np.linspace(0, analysisLength, len(pool['lowlevel.rms'][:analysisLength*timeConversion])), rmsPool, visible=False)
p6 = ax1.vlines((np.argmax(pool['lowlevel.rms'][10*timeConversion: analysisLength*timeConversion])/ timeConversion)+ 10, 0, (max(pool['lowlevel.rms'][10*timeConversion: analysisLength*timeConversion])/ max(pool['lowlevel.rms'][:analysisLength*timeConversion]))*100, color ='r', visible=False)
l7, = ax1.plot(np.linspace(0, analysisLength, len(pool['pitchSalience.pitchSalience'][:analysisLength*timeConversion])), pitchSaliencePool, visible=False)
p7 = ax1.vlines((np.argmax(pool['pitchSalience.pitchSalience'][10*timeConversion: analysisLength*timeConversion])/ timeConversion)+ 10, 0, (max(pool['pitchSalience.pitchSalience'][10*timeConversion: analysisLength*timeConversion])/ max(pool['pitchSalience.pitchSalience'][:analysisLength*timeConversion]))*100, color ='r', visible=False)
l8, = ax1.plot(np.linspace(0, analysisLength, len(pool['spectralComplexity.spectralComplexity'][:analysisLength*timeConversion])), spectralComplexityPool, visible=False)
p8 = ax1.vlines((np.argmax(pool['spectralComplexity.spectralComplexity'][10*timeConversion: analysisLength*timeConversion])/ timeConversion)+ 10, 0, (max(pool['spectralComplexity.spectralComplexity'][10*timeConversion: analysisLength*timeConversion])/ max(pool['spectralComplexity.spectralComplexity'][:analysisLength*timeConversion]))*100, color ='r', visible=False)
#plot(linspace(0, 180, len(pool['erbBands.bands'][:180*timeConversion])), pool['erbBands.bands'][:180*timeConversion])
#plt.legend(['pitch', 'pitch confidence', 'spectral centroid', 'spectral rolloff', 'spectral flux', 'ZCR', 'RMS', 'onset'])
plt.suptitle('Raag Analysis: Alahya Bilawal [Ravi Shankar - Master of Sitar]', fontsize=14, fontweight='bold')
plt.title('Ground truth- Alap: 42 seconds')
plt.ylabel('percentage to maximum in analysis section')
plt.xlabel('time (seconds)')
plt.subplots_adjust(left=0.3)#, bottom=0.25)
rax = plt.axes([0.025, 0.65, 0.22, 0.25])#left,bottom, width, height
check = CheckButtons(rax, ('pitch', 'pitch confidence', 'spectral centroid', 'spectral rolloff', 'spectral flux', 'ZCR', 'RMS', 'pitch salience', 'spectral complexity'), (False, False, False, False, False, False, False, False, False))
#checkbox controls
def displayMode(label):
if label == 'pitch':
l0.set_visible(not l0.get_visible())
elif label == 'pitch confidence':
l1.set_visible(not l1.get_visible())
elif label == 'spectral centroid':
l2.set_visible(not l2.get_visible())
p2.set_visible(not p2.get_visible())
elif label == 'spectral rolloff':
l3.set_visible(not l3.get_visible())
p3.set_visible(not p3.get_visible())
elif label == 'spectral flux':
l4.set_visible(not l4.get_visible())
p4.set_visible(not p4.get_visible())
elif label == 'ZCR':
l5.set_visible(not l5.get_visible())
p5.set_visible(not p5.get_visible())
elif label == 'RMS':
l6.set_visible(not l6.get_visible())
p6.set_visible(not p6.get_visible())
elif label == 'pitch salience':
l7.set_visible(not l7.get_visible())
p7.set_visible(not p7.get_visible())
elif label == 'spectral complexity':
l8.set_visible(not l8.get_visible())
p8.set_visible(not p8.get_visible())
plt.draw()
check.on_clicked(displayMode)
plt.show()