Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def compute_beatsync_features(ticks, audio):
"""Computes the HPCP and MFCC beat-synchronous features given a set
of beats (ticks)."""
MFCC = STFTFeature(FRAME_SIZE, HOP_SIZE, WINDOW_TYPE,
ES.MFCC(numberCoefficients=14), ticks, SAMPLE_RATE)
HPCP = STFTFeature(FRAME_SIZE, HOP_SIZE, WINDOW_TYPE, ES.HPCP(),
ticks, SAMPLE_RATE)
logging.info("Computing Beat-synchronous MFCCs...")
mfcc = MFCC.compute_features(audio)
logging.info("Computing Beat-synchronous HPCPs...")
hpcp = HPCP.compute_features(audio)
logging.info("Computing Beat-synchronous Tonnetz...")
tonnetz = utils.chroma_to_tonnetz(hpcp)
return mfcc.tolist(), hpcp.tolist(), tonnetz.tolist()
:param Fs: Sample rate
:param winSize: Window size of each STFT window
:param hopSize: Hop size between STFT windows
:param squareRoot: Do square root compression?
:param NChromaBins: How many chroma bins (default 36)
:returns H: An (NChromaBins x NWindows) matrix of all
chroma windows
"""
import essentia
from essentia import Pool, array
import essentia.standard as ess
print("Getting HPCP Essentia...")
spectrum = ess.Spectrum()
window = ess.Windowing(size=winSize, type='hann')
spectralPeaks = ess.SpectralPeaks()
hpcp = ess.HPCP(size = NChromaBins)
H = []
for frame in ess.FrameGenerator(XAudio, frameSize=winSize, hopSize=hopSize, startFromZero = True):
S = spectrum(window(frame))
freqs, mags = spectralPeaks(S)
H.append(hpcp(freqs, mags))
H = np.array(H)
H = H.T
if squareRoot:
H = sqrtCompress(H)
return H
def compute_features(audio, beats=None):
"""Computes the HPCP and MFCC beat-synchronous features given a set
of beats (beats)."""
beatsync_str = ""
if beats is not None:
beatsync_str = "Beat-synchronous "
MFCC = STFTFeature(msaf.Anal.frame_size, msaf.Anal.hop_size,
msaf.Anal.window_type,
ES.MFCC(numberCoefficients=msaf.Anal.mfcc_coeff),
msaf.Anal.sample_rate, beats)
HPCP = STFTFeature(msaf.Anal.frame_size, msaf.Anal.hop_size,
msaf.Anal.window_type, ES.HPCP(), msaf.Anal.sample_rate,
beats)
logging.info("Computing %sMFCCs..." % beatsync_str)
mfcc = MFCC.compute_features(audio)
logging.info("Computing %sHPCPs..." % beatsync_str)
hpcp = HPCP.compute_features(audio)
#plt.imshow(hpcp.T, interpolation="nearest", aspect="auto"); plt.show()
logging.info("Computing %sTonnetz..." % beatsync_str)
tonnetz = utils.chroma_to_tonnetz(hpcp)
return mfcc, hpcp, tonnetz
spectrum = estd.Spectrum()
# Refer http://essentia.upf.edu/documentation/reference/std_SpectralPeaks.html
spectralPeaks = estd.SpectralPeaks(magnitudeThreshold=0,
maxFrequency=maxFrequency,
minFrequency=minFrequency,
maxPeaks=maxPeaks,
orderBy="frequency",
sampleRate=self.fs)
# http://essentia.upf.edu/documentation/reference/std_SpectralWhitening.html
spectralWhitening = estd.SpectralWhitening(maxFrequency= maxFrequency,
sampleRate=self.fs)
# http://essentia.upf.edu/documentation/reference/std_HPCP.html
hpcp = estd.HPCP(sampleRate=self.fs,
maxFrequency=maxFrequency,
minFrequency=minFrequency,
referenceFrequency=referenceFrequency,
nonLinear=nonLinear,
harmonics=harmonicsPerPeak,
size=numBins)
pool = Pool()
#compute hpcp for each frame and add the results to the pool
for frame in frameGenerator:
spectrum_mag = spectrum(window(frame))
frequencies, magnitudes = spectralPeaks(spectrum_mag)
if whitening:
w_magnitudes = spectralWhitening(spectrum_mag,