code: def computeNoveltyCurve(
      self,
      filename,
      frameSize=1024,
      hopSize=512,
      windowType="hann",
      weightCurveType="hybrid",
      sampleRate=44100.0,
      startTime=0,
      endTime=2000,
  ):
      loader = ess.EasyLoader(
          filename=filename,
          startTime=startTime,
          endTime=endTime,
          sampleRate=sampleRate,
          downmix="left",
      )
      fc = ess.FrameCutter(
          frameSize=frameSize,
          hopSize=hopSize,
          silentFrames="keep",
          startFromZero=False,
          lastFrameToEndOfFile=True,
      )
      window = ess.Windowing(
          type=windowType, zeroPhase=True, zeroPadding=1024 - frameSize
      )
      freqBands = ess.FrequencyBands(
          sampleRate=sampleRate
      )  # using barkbands by default
      spec = ess.Spectrum()
  
      pool = Pool()
      loader.audio >> fc.signal
      fc.frame >> window.frame >> spec.frame
      spec.spectrum >> freqBands.spectrum
      freqBands.bands >> (pool, "frequency_bands")
      essentia.run(loader)
  
      noveltyCurve = NoveltyCurve(
          frameRate=sampleRate / float(hopSize),
          weightCurveType=weightCurveType,
      )(pool["frequency_bands"])
  
      return noveltyCurve
  
file_path: essentia/test/src/unittests/rhythm/test_bpmhistogram.py
imports: from essentia_test import *
  import essentia
  from essentia import Pool
  from essentia.standard import *
  import essentia.streaming
  from math import ceil, fabs
  from numpy import argmax
label_desc: Use image node_id 1 for calling the TestBpmHistogram obj's underlying member method code with example usage: obj.computeNoveltyCurve(filename, frameSize, hopSize, windowType, weightCurveType, sampleRate, startTime, endTime) and returns: noveltyCurve