def testOffsetToDepth(self): # get a maximally divided 4/4 to the level of 1/8 a = MeterSequence('4/4') for h in range(len(a)): a[h] = a[h].subdivide(2) for i in range(len(a[h])): a[h][i] = a[h][i].subdivide(2) for j in range(len(a[h][i])): a[h][i][j] = a[h][i][j].subdivide(2) # matching with starts result in a Lerdahl-Jackendoff style depth match = [4, 1, 2, 1, 3, 1, 2, 1] for x in range(8): pos = x * 0.5 test = a.offsetToDepth(pos, align='start') self.assertEqual(test, match[x]) match = [1, 2, 1, 3, 1, 2, 1] for x in range(7): pos = (x * 0.5) + 0.5 test = a.offsetToDepth(pos, align='end') # environLocal.printDebug(['here', test]) self.assertEqual(test, match[x]) # can quantize by lowest value match = [4, 1, 2, 1, 3, 1, 2, 1] for x in range(8): pos = (x * 0.5) + 0.25 test = a.offsetToDepth(pos, align='quantize') self.assertEqual(test, match[x])
def testMeterDeepcopy(self): a = MeterSequence() a.load('4/4', 4) b = copy.deepcopy(a) self.assertNotEqual(a, b) c = TimeSignature('4/4') d = copy.deepcopy(c) self.assertNotEqual(c, d)
def testMeterSubdivision(self): a = MeterSequence() a.load('4/4', 4) self.assertEqual(str(a), '{1/4+1/4+1/4+1/4}') a[0] = a[0].subdivide(2) self.assertEqual(str(a), '{{1/8+1/8}+1/4+1/4+1/4}') a[3] = a[3].subdivide(4) self.assertEqual(str(a), '{{1/8+1/8}+1/4+1/4+{1/16+1/16+1/16+1/16}}')
def testSubdividePartitionsEqual(self): ms = MeterSequence('2/4') ms.subdividePartitionsEqual(None) self.assertEqual(str(ms), '{{1/4+1/4}}') ms = MeterSequence('3/4') ms.subdividePartitionsEqual(None) self.assertEqual(str(ms), '{{1/4+1/4+1/4}}') ms = MeterSequence('6/8') ms.subdividePartitionsEqual(None) self.assertEqual(str(ms), '{{3/8+3/8}}') ms = MeterSequence('6/16') ms.subdividePartitionsEqual(None) self.assertEqual(str(ms), '{{3/16+3/16}}') ms = MeterSequence('3/8+3/8') ms.subdividePartitionsEqual(None) self.assertEqual(str(ms), '{{1/8+1/8+1/8}+{1/8+1/8+1/8}}') ms = MeterSequence('2/8+3/8') ms.subdividePartitionsEqual(None) self.assertEqual(str(ms), '{{1/8+1/8}+{1/8+1/8+1/8}}') ms = MeterSequence('5/8') ms.subdividePartitionsEqual(None) self.assertEqual(str(ms), '{{1/8+1/8+1/8+1/8+1/8}}') ms = MeterSequence('3/8+3/4') ms.subdividePartitionsEqual(None) # can partition by another self.assertEqual(str(ms), '{{1/8+1/8+1/8}+{1/4+1/4+1/4}}')