def getSignalFromMelGram( self, melGram, hop=64 ):
   hopScale = 4
   randomSignal = 2*np.random.rand( melGram.shape[0]*hop + hop*hopScale ) - 1
   randomSpectrogram = utility.getSpectrogram( randomSignal, hop=hop, frameSize=hop*hopScale )
   #randomSpectrogram = np.random.randn( melGram.shape[0], hop*hopScale/2 + 1  ) + np.random.randn( melGram.shape[0], hop*hopScale/2 + 1 )*1j
   #randomSpectrogram[:, 0] = randomSpectrogram[:, 0].real + 0j
   #randomSpectrogram[:, -1] = randomSpectrogram[:, -1].real + 0j
   spectrogramScaler = np.zeros( randomSpectrogram.shape )
   filters = self.MFCCer.getFilters( hop*hopScale, self.fs, 0, None, 0 )
   for n in xrange( randomSpectrogram.shape[0] ):
     spectrogramScaler[n] = np.sum( filters*melGram[n], axis=1 )
     #spectrogramScaler[n] = np.sum( filters, axis=1 )
   return utility.getSignalFromSpectrogram( randomSpectrogram*spectrogramScaler, hop, np.hanning( hop*hopScale ) )
 import sys
 import os
 import utility
 if len(sys.argv) < 2:
   print "Usage: %s filename.mp3|filename.wav" % sys.argv[0]
   sys.exit(-1)
 # Wav or mp3?
 basename, extension = os.path.splitext( sys.argv[1] )
 if extension == '.mp3':
   print "Getting mp3 data ..."
   audioData, fs = utility.getMp3Data( sys.argv[1] )
 elif extension == '.wav':
   print "Getting wav data ..."
   audioData, fs = utility.getWavData( sys.argv[1] )
 else:
   print "Not .wav or .mp3."
   sys.exit(-1)
 
 hop = 1024
 frameSize = 4096
 spectrogram = utility.getSpectrogram( audioData, hop=hop, frameSize=frameSize )
 print "Separating harmonic and percussive components ..."
 start = time()
 seperator = HarmonicPercussiveSeparator( spectrogram )
 end = time()
 print "Took ", end - start
 utility.plotSpectrogram( spectrogram )
 utility.plotSpectrogram( seperator.harmonicSpectrogram )
 utility.plotSpectrogram( seperator.percussiveSpectrogram )
 #utility.writeWav( utility.getSignalFromSpectrogram( seperator.harmonicSpectrogram, hop, np.hanning( frameSize ) ), fs, sys.argv[1] + "harm.wav", 1 )
 #utility.writeWav( utility.getSignalFromSpectrogram( seperator.percussiveSpectrogram, hop, np.hanning( frameSize ) ), fs, sys.argv[1] + "perc.wav", 1 )
     audioData[file], fs = utility.getWavData(os.path.join(directory, file))
 for downsamplingFactor in downsamplingFactors:
     for file in filenames:
         audioDataDownsampled[file] = scipy.signal.decimate(audioData[file], downsamplingFactor)
     for frameSize, window, hopSizeScale in itertools.product(frameSizes, windows, hopSizeScales):
         if hopSizeScale < previousHopSizeScale and np.mod(previousHopSizeScale, hopSizeScale) == 0:
             # Instead of calculating a new spectrogram, just grab the frames
             newHopRatio = previousHopSizeScale / hopSizeScale
             for file in filenames:
                 spectrograms[file] = spectrograms[file][::newHopRatio]
         else:
             # Calculate spectrograms - should not re-calculate if just the hop size changes.
             for file in filenames:
                 spectrograms[file] = utility.getSpectrogram(
                     audioDataDownsampled[file],
                     hop=frameSize / hopSizeScale,
                     frameSize=frameSize,
                     window=window(frameSize),
                 )
         previousHopSizeScale = hopSizeScale
         for ODF in ODFs:
             # Get the onset detection function
             for file in filenames:
                 ODFOutput[file] = onsetDetection.ODF(
                     spectrograms[file], ODF, fs=fs / downsamplingFactor
                 ).onsetDetectionFunction
             for offset in offsets:
                 # Compute the synchronization score for the syncrhonized and unsynchronized files
                 synchronizedScore = synchronizationScore.getScore(
                     ODFOutput[filenames[0]], ODFOutput[filenames[1]], offset=offset
                 )
                 unsynchronizedScore = synchronizationScore.getScore(
 def getMelGram( self, signal, hop=64 ):
   spectrogram = utility.getSpectrogram( signal, frameSize=self.frameSize, hop=hop )
   return np.array( map( self.MFCCer.getMelSpectrum, spectrogram ) )