shithub: aubio

ref: 1342c2f184764c8b3128dcd04a5b9306a708569b
dir: /tests/python/src/onset/peakpick.py/

View raw version
from template import aubio_unit_template
from localaubio import *

buf_size = 7 
channels = 1

class peakpick_unit(aubio_unit_template):

  def setUp(self):
    self.o = new_aubio_peakpicker(1)
    aubio_peakpicker_set_threshold (0.1)
    pass

  def tearDown(self):
    del_aubio_peakpicker(self.o)
    pass

  def test_peakpick(self):
    """ create and delete peakpick """
    pass

  def test_peakpick_zeroes(self):
    """ check peakpick run on a vector full of zero returns no peak. """
    self.assertEqual(0., aubio_peakpicker_get_thresholded_input(self.o))

  def test_peakpick_impulse(self):
    """ check peakpick detects a single impulse as a peak. """
    """ check two consecutive peaks are detected as one. """
    #print 
    for index in range(0,buf_size-1):
      input = new_fvec(buf_size, channels)
      fvec_write_sample(input, 1000., 0, index)
      fvec_write_sample(input, 1000./2, 0, index+1)
      #print "%2s" % index, aubio_peakpicker_do(self.o, input), "|",
      #for i in range(buf_size): print fvec_read_sample(input, 0, i),
      #print
      del_fvec(input)

  def test_peakpick_consecutive_peaks(self):
    """ check two consecutive peaks are detected as one. """
    #print 
    for index in range(0,buf_size-4):
      input = new_fvec(buf_size, channels)
      fvec_write_sample(input, 1000./2, 0, index)
      fvec_write_sample(input, 1000., 0, index+1)
      fvec_write_sample(input, 1000., 0, index+3)
      fvec_write_sample(input, 1000./2, 0, index+4)
      peak_pick_result = aubio_peakpicker_do(self.o, input)
      if index == 2:
        # we are at the peak. check the result is after current sample,
        # and not after next one
        self.failIf( 1. >= peak_pick_result )
        self.failIf( 2. < peak_pick_result )
      else: self.assertEqual(0., peak_pick_result)
      del_fvec(input)
    for index in range(buf_size-4,buf_size-1):
      input = new_fvec(buf_size, channels)
      fvec_write_sample(input, 1000./2, 0, index)
      fvec_write_sample(input, 1000., 0, index+1)
      peak_pick_result = aubio_peakpicker_do(self.o, input)
      self.assertEqual(0., peak_pick_result)
      del_fvec(input)

  def test_peakpick_set_threshold(self):
    """ test aubio_peakpicker_set_threshold """
    new_threshold = 0.1
    aubio_peakpicker_set_threshold(self.o, new_threshold)
    self.assertCloseEnough(new_threshold, aubio_peakpicker_get_threshold(self.o))

  def test_peakpick_get_threshold(self):
    """ test aubio_peakpicker_get_threshold """
    new_threshold = aubio_peakpicker_get_threshold(self.o) 
    aubio_peakpicker_set_threshold(self.o, new_threshold)
    self.assertCloseEnough(new_threshold, aubio_peakpicker_get_threshold(self.o))

if __name__ == '__main__':
  unittest.main()