Exemple #1
0
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
Exemple #2
0
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)