def runTest(self): # create a SpreadDico pySig = Signal(op.join(audio_filepath, "glocs.wav"), mono=True) pySig.crop(0, 5 * pySig.fs) pySig.pad(2048) dico = [128, 1024, 8192] parallelProjections.initialize_plans(np.array(dico), np.array([2] * len(dico))) classicDIco = mdct_dico.Dico(dico) spreadDico = mdct_dico.SpreadDico(dico, all_scales=True, penalty=0, maskSize=3) self.assertEqual(spreadDico.mask_times, [3, 3, 3]) classicDIco.initialize(pySig) spreadDico.initialize(pySig) classicDIco.update(pySig, 2) spreadDico.update(pySig, 2) classicAtom1 = classicDIco.get_best_atom(0) spreadAtom1 = spreadDico.get_best_atom(0) # print classicAtom1, spreadAtom1 self.assertEqual(classicAtom1, spreadAtom1) pySig.subtract(classicAtom1) classicDIco.update(pySig, 2) spreadDico.update(pySig, 2) classicAtom2 = classicDIco.get_best_atom(0) spreadAtom2 = spreadDico.get_best_atom(0) self.assertNotEqual(classicAtom2, spreadAtom2)
def runTest(self): pySig = Signal(op.join(audio_filepath, "glocs.wav"), mono=True) pySig.crop(0, 5 * pySig.fs) pySig.pad(2048) scale = 1024 parallelProjections.initialize_plans(np.array([scale]), np.array([2])) classicBlock = mdct_block.Block(scale, pySig, 0, debug_level=3) spreadBlock = mdct_block.SpreadBlock(scale, pySig, 0, debug_level=3, penalty=0, maskSize=5) # compute the projections, should be equivalent classicBlock.update(pySig, 0, -1) spreadBlock.update(pySig, 0, -1) maxClassicAtom1 = classicBlock.get_max_atom() print maxClassicAtom1.length, maxClassicAtom1.frame, print maxClassicAtom1.freq_bin, maxClassicAtom1.mdct_value maxSpreadcAtom1 = spreadBlock.get_max_atom() print maxSpreadcAtom1.length, maxSpreadcAtom1.frame, print maxSpreadcAtom1.freq_bin, maxSpreadcAtom1.mdct_value # assert equality using the inner comparison method of MDCT atoms self.assertEqual(maxClassicAtom1, maxSpreadcAtom1) # verifying the masking index construction mask_frame_width = 2 mask_bin_width = 1 spreadBlock.compute_mask(maxSpreadcAtom1, mask_bin_width, mask_frame_width, 0.5) c_frame = int(np.ceil(maxSpreadcAtom1.time_position / (scale / 2))) c_bin = int(maxSpreadcAtom1.reduced_frequency * scale) z1 = np.arange(int(c_frame - mask_frame_width), int(c_frame + mask_frame_width) + 1) z2 = np.arange(int(c_bin - mask_bin_width), int(c_bin + mask_bin_width) + 1) # x, y = np.meshgrid(z1, z2) # print spreadBlock.mask_index_x # np.testing.assert_array_equal(spreadBlock.mask_index_x, z1) # np.testing.assert_array_equal(spreadBlock.mask_index_y, z2) pySig.subtract(maxSpreadcAtom1) # recompute the projections classicBlock.update(pySig, 0, -1) spreadBlock.update(pySig, 0, -1) # plt.show() maxClassicAtom2 = classicBlock.get_max_atom() print maxClassicAtom2.length, maxClassicAtom2.frame, maxClassicAtom2.freq_bin, maxClassicAtom2.mdct_value maxSpreadcAtom2 = spreadBlock.get_max_atom() print maxSpreadcAtom2.length, maxSpreadcAtom2.frame, maxSpreadcAtom2.freq_bin, maxSpreadcAtom2.mdct_value self.assertNotEqual(maxClassicAtom2, maxSpreadcAtom2) parallelProjections.clean_plans()