code: def testSilentEdge(self):
      audio = MonoLoader(
          filename=join(
              testdata.audio_dir, "recorded", "techno_loop.wav"
          )
      )()
      bpmEstimate = 125
      lenSilence = 30000  # N.B The beat period is 21168 samples for 125 bpm @ 44.1k samp. rate
      silentAudio = zeros(lenSilence)
      expectedEstimate = 124.9
  
      # Test addition of non-musical silence before the loop starts
      # The length is not a beat period,
      # case 1: there is non-musical* silence before the loop starts
      signal1 = numpy.append(silentAudio, audio)
      estimate = PercivalBpmEstimator()(signal1)
      self.assertAlmostEqual(expectedEstimate, estimate, 0.1)
  
      # case 2: there is non-musical silence after the loop ends
      signal2 = numpy.append(audio, silentAudio)
      estimate = PercivalBpmEstimator()(signal2)
      self.assertAlmostEqual(expectedEstimate, estimate, 0.1)
  
      # case 3: there is non-musical silence at both ends
      signal3 = numpy.append(signal1, silentAudio)
      estimate = PercivalBpmEstimator()(signal3)
      self.assertAlmostEqual(expectedEstimate, estimate, 0.1)
  
file_path: essentia/test/src/unittests/rhythm/test_percivalbpmestimator.py
imports: from essentia_test import *
  from essentia.standard import MonoLoader, PercivalBpmEstimator
label_desc: Use image node_id 3 for calling the TestPercivalBpmEstimator obj's underlying member method code with example usage: obj.testSilentEdge() without return types