class Test_ConvertFloatToInt(unittest.TestCase): def setUp(self): self.x = Audio(fs=10, initialdata=np.zeros((10, 1))) self.x.samples[0] = -1.0 self.x.samples[1] = 1.0 print(self.x) print(self.x.samples) print() def convert(self, targetbits=None): self.x.convert_to_integer(targetbits=targetbits) print(self.x) print(self.x.samples) self.assertIsInstance(self.x.samples, np.ndarray) def test_int8(self): self.convert(targetbits=8) self.assertTrue(self.x.samples.dtype==np.int8) # 8 bits 2's complement # min is -128 # max is 127 self.assertEquals(self.x.samples[0], -127) # must be symmetrical self.assertEquals(self.x.samples[1], 127) # must be symmetrical def test_int16(self): self.convert(targetbits=16) self.assertTrue(self.x.samples.dtype==np.int16) # 16 bits 2's complement # min is -32768 # max is 32767 self.assertEquals(self.x.samples[0], -32767) # must be symmetrical self.assertEquals(self.x.samples[1], 32767) # must be symmetrical def test_int32(self): self.convert(targetbits=32) self.assertTrue(self.x.samples.dtype==np.int32) # 32 bits 2's complement # min is -2147483648 # max is 2147483647 self.assertEquals(self.x.samples[0], -2147483647) # must be symmetrical self.assertEquals(self.x.samples[1], 2147483647) # must be symmetrical
class Test_ConvertBackToBack(unittest.TestCase): def setUp(self): self.x = Audio(fs=10, initialdata=np.zeros((10, 1))) self.x.samples[0] = -1.0 self.x.samples[1] = 1.0 print(self.x) print(self.x.samples) print() def quantization_step_size(self, bits): return 2**-(bits-1) def test_float_to_int8_to_float64(self): self.x.convert_to_integer(targetbits=8) self.x.convert_to_float(targetbits=64) print(self.x) print(self.x.samples) q = self.quantization_step_size(8) self.assertAlmostEqual(self.x.samples[0], -1.0 + q, places=20) self.assertAlmostEqual(self.x.samples[1], 1.0 - q, places=20) def test_float_to_int16_to_float64(self): self.x.convert_to_integer(targetbits=16) self.x.convert_to_float(targetbits=64) print(self.x) print(self.x.samples) q = self.quantization_step_size(16) self.assertAlmostEqual(self.x.samples[0], -1.0 + q, places=20) self.assertAlmostEqual(self.x.samples[1], 1.0 - q, places=20) def test_float_to_int32_to_float64(self): self.x.convert_to_integer(targetbits=32) self.x.convert_to_float(targetbits=64) print(self.x) print(self.x.samples) q = self.quantization_step_size(32) self.assertAlmostEqual(self.x.samples[0], -1.0 + q, places=20) self.assertAlmostEqual(self.x.samples[1], 1.0 - q, places=20)