Esempio n. 1
0
class AudioBufferTest(unittest.TestCase):

    def setUp(self):
        self.n_channels = 2
        self.buff32 = AudioBuffer(16, self.n_channels)
        self.data_str = '\x01\x02\x03\x04'
        self.data_strs = [
            '\x01\x02\x03\x04',
            '\x01\x02\x03\x04',
            '\x01\x02',
            '\x01',
            '\x01']
        self.num_types = 5
        self.data12 = [''] * self.num_types
        for i in range(len(self.data_strs)):
            self.data12[i] = self.data_str * self.n_channels * 12

    def data_of_length(self, length):
        return self.data_str * self.n_channels * length

    def testBufWrite(self):
        self.buff32.write_bytes(self.data_of_length(12))
        self.assertEquals(self.buff32.get_available_read(), 12)
        self.buff32.write_bytes(self.data_of_length(4))
        self.assertEquals(self.buff32.get_available_read(), 16)

    def testOverwrite(self):
        self.buff32.write_bytes(self.data_of_length(12))
        data6 = self.data_of_length(6)
        caught = False
        try:
            self.buff32.write_bytes(data6)
        except ValueError as e:
            print e.message
            caught = True
        self.assertEquals(caught, True)

    def testOverRead(self):
        data4 = self.data_of_length(4)
        self.buff32.write_bytes(data4)
        data_read = self.buff32.read_bytes(12)
        self.assertEquals(data_read, data4)

    def testWriteSamples(self):
        data = list(numpy.random.rand(12 * self.n_channels))
        data4 = list(numpy.random.rand(4 * self.n_channels))
        self.buff32.write_samples(data)
        self.assertEquals(self.buff32.get_available_read(), 12)
        self.buff32.write_samples(data4)
        self.assertEquals(self.buff32.get_available_read(), 16)

    def testReadSamples(self):
        data = list(numpy.random.rand(12 * self.n_channels))
        data4 = list(numpy.random.rand(4 * self.n_channels))
        self.buff32.write_samples(data)
        self.assertEquals(self.buff32.get_available_read(), 12)
        data_read = self.buff32.read_samples(12)
        self.assertListFloatEqual(data, data_read)
        self.buff32.write_samples(data4)
        self.assertEquals(self.buff32.get_available_read(), 4)
        data_read = self.buff32.read_samples(4)
        self.assertListFloatEqual(data4, data_read)

    def testWriteArray(self):
        data = numpy.random.rand(12 * self.n_channels)
        data4 = list(numpy.random.rand(4 * self.n_channels))
        self.buff32.write_samples(data)
        self.assertEquals(self.buff32.get_available_read(), 12)
        self.buff32.write_samples(data4)
        self.assertEquals(self.buff32.get_available_read(), 16)

    def testReadArray(self):
        data = numpy.random.rand(12 * self.n_channels)
        data4 = numpy.random.rand(4 * self.n_channels)
        self.buff32.write_samples(data)
        self.assertEquals(self.buff32.get_available_read(), 12)
        data_read = self.buff32.read_samples(12)
        self.assertListFloatEqual(data, data_read)
        self.buff32.write_samples(data4)
        self.assertEquals(self.buff32.get_available_read(), 4)
        data_read = self.buff32.read_samples(4)
        self.assertListFloatEqual(data_read, data4)

    def testRead(self):
        self.buff32.write_bytes(self.data_of_length(12))
        read_data = self.buff32.read_bytes(12)
        print read_data
        self.assertEquals(read_data, self.data_of_length(12))

    def testWraparoundWrite(self):
        self.buff32.write_bytes(self.data_of_length(12))
        self.buff32.read_bytes(12)
        self.buff32.write_bytes(self.data_of_length(12))
        self.assertEquals(self.buff32.get_available_read(), 12)

    def testWraparoundRead(self):
        self.buff32.write_bytes(self.data_of_length(12))
        self.buff32.read_bytes(12)
        self.buff32.write_bytes(self.data_of_length(12))
        self.assertEquals(self.buff32.get_available_read(), 12)
        data_read = self.buff32.read_bytes(12)
        self.assertEquals(data_read, self.data_of_length(12))
        self.assertEquals(self.buff32.get_available_read(), 0)

    def testInvalidData(self):
        caught = False
        try:
            self.buff32.write_bytes([2]*12)
        except ValueError as e:
            print e.message
            caught = True
        self.assertEquals(caught, True)

    def testMultipleWraps(self):
        self.buff32.write_bytes(self.data_of_length(12))
        self.buff32.read_bytes(8)
        self.buff32.write_bytes(self.data_of_length(12))
        self.buff32.read_bytes(16)
        self.buff32.write_bytes(self.data_of_length(12))
        self.buff32.read_bytes(9)
        self.buff32.write_bytes(self.data_of_length(12))
        self.buff32.read_bytes(11)
        self.buff32.write_bytes(self.data_of_length(12))
        data_read = self.buff32.read_bytes(12)
        self.assertEquals(self.buff32.get_available_read(), 4)
        self.assertEquals(data_read, self.data_of_length(12))

    def testReduceChannels(self):
        n_in = 7
        n_out = 2
        n_samples = 10
        data_in = np.arange(n_in * n_samples)
        buf = AudioBuffer(n_samples, n_in)
        data_out = buf.reduce_channels(data_in, n_in, n_out)
        correct = [x for x in range(n_in * n_samples) if x % n_in == 0 or (x - 1) % n_in == 0]
        self.assertListFloatEqual(correct, data_out)

    def assertListFloatEqual(self, list1, list2):
        if not len(list1) == len(list2):
            raise AssertionError("Lists differ in lenght. Cannot be equal")
        for i in range(len(list1)):
            self.assertLessEqual(abs(list1[i] - list2[i]), 1e-4)

    def tearDown(self):
        print "Completed"
Esempio n. 2
0
             # Process dfts from windowed segments of input
             dfts = stft.getDFTs()
             process_dfts(dfts)
             if DO_PLOT:
                 # Must update here because dfts are altered upon calling ISTFT since
                 # the dft is performed in place
                 fft = to_full_fft(dfts[0][0][0], dfts[0][1][0])
             # Get the istft of the processed data
             new_data = stft.performIStft()
             # Alter data so it can be written out
             if NUM_CHANNELS_IN != NUM_CHANNELS_OUT:
                 new_data = out_buf.reduce_channels(new_data,
                                                    NUM_CHANNELS_IN,
                                                    NUM_CHANNELS_OUT)
             if out_buf.get_available_write() >= WINDOW_LENGTH:
                 out_buf.write_samples(new_data)
             # Take care of plotting
             if DO_PLOT:
                 # Time plot
                 if NUM_CHANNELS_OUT != 1:
                     plot_data = out_buf.reduce_channels(
                         new_data, NUM_CHANNELS_OUT, 1)
                 else:
                     plot_data = new_data
                 time_plot.set_ydata(plot_data)
                 # Frequency plot
                 freq_plot.set_ydata(np.abs(fft[:cutoff_ind]))
                 # Update plot
                 fig.canvas.draw()
         #time.sleep(.001)
 except KeyboardInterrupt:
Esempio n. 3
0
class AudioBufferTest(unittest.TestCase):
    def setUp(self):
        self.n_channels = 2
        self.buff32 = AudioBuffer(16, self.n_channels)
        self.data_str = '\x01\x02\x03\x04'
        self.data_strs = [
            '\x01\x02\x03\x04', '\x01\x02\x03\x04', '\x01\x02', '\x01', '\x01'
        ]
        self.num_types = 5
        self.data12 = [''] * self.num_types
        for i in range(len(self.data_strs)):
            self.data12[i] = self.data_str * self.n_channels * 12

    def data_of_length(self, length):
        return self.data_str * self.n_channels * length

    def testBufWrite(self):
        self.buff32.write_bytes(self.data_of_length(12))
        self.assertEquals(self.buff32.get_available_read(), 12)
        self.buff32.write_bytes(self.data_of_length(4))
        self.assertEquals(self.buff32.get_available_read(), 16)

    def testOverwrite(self):
        self.buff32.write_bytes(self.data_of_length(12))
        data6 = self.data_of_length(6)
        caught = False
        try:
            self.buff32.write_bytes(data6)
        except ValueError as e:
            print e.message
            caught = True
        self.assertEquals(caught, True)

    def testOverRead(self):
        data4 = self.data_of_length(4)
        self.buff32.write_bytes(data4)
        data_read = self.buff32.read_bytes(12)
        self.assertEquals(data_read, data4)

    def testWriteSamples(self):
        data = list(numpy.random.rand(12 * self.n_channels))
        data4 = list(numpy.random.rand(4 * self.n_channels))
        self.buff32.write_samples(data)
        self.assertEquals(self.buff32.get_available_read(), 12)
        self.buff32.write_samples(data4)
        self.assertEquals(self.buff32.get_available_read(), 16)

    def testReadSamples(self):
        data = list(numpy.random.rand(12 * self.n_channels))
        data4 = list(numpy.random.rand(4 * self.n_channels))
        self.buff32.write_samples(data)
        self.assertEquals(self.buff32.get_available_read(), 12)
        data_read = self.buff32.read_samples(12)
        self.assertListFloatEqual(data, data_read)
        self.buff32.write_samples(data4)
        self.assertEquals(self.buff32.get_available_read(), 4)
        data_read = self.buff32.read_samples(4)
        self.assertListFloatEqual(data4, data_read)

    def testWriteArray(self):
        data = numpy.random.rand(12 * self.n_channels)
        data4 = list(numpy.random.rand(4 * self.n_channels))
        self.buff32.write_samples(data)
        self.assertEquals(self.buff32.get_available_read(), 12)
        self.buff32.write_samples(data4)
        self.assertEquals(self.buff32.get_available_read(), 16)

    def testReadArray(self):
        data = numpy.random.rand(12 * self.n_channels)
        data4 = numpy.random.rand(4 * self.n_channels)
        self.buff32.write_samples(data)
        self.assertEquals(self.buff32.get_available_read(), 12)
        data_read = self.buff32.read_samples(12)
        self.assertListFloatEqual(data, data_read)
        self.buff32.write_samples(data4)
        self.assertEquals(self.buff32.get_available_read(), 4)
        data_read = self.buff32.read_samples(4)
        self.assertListFloatEqual(data_read, data4)

    def testRead(self):
        self.buff32.write_bytes(self.data_of_length(12))
        read_data = self.buff32.read_bytes(12)
        print read_data
        self.assertEquals(read_data, self.data_of_length(12))

    def testWraparoundWrite(self):
        self.buff32.write_bytes(self.data_of_length(12))
        self.buff32.read_bytes(12)
        self.buff32.write_bytes(self.data_of_length(12))
        self.assertEquals(self.buff32.get_available_read(), 12)

    def testWraparoundRead(self):
        self.buff32.write_bytes(self.data_of_length(12))
        self.buff32.read_bytes(12)
        self.buff32.write_bytes(self.data_of_length(12))
        self.assertEquals(self.buff32.get_available_read(), 12)
        data_read = self.buff32.read_bytes(12)
        self.assertEquals(data_read, self.data_of_length(12))
        self.assertEquals(self.buff32.get_available_read(), 0)

    def testInvalidData(self):
        caught = False
        try:
            self.buff32.write_bytes([2] * 12)
        except ValueError as e:
            print e.message
            caught = True
        self.assertEquals(caught, True)

    def testMultipleWraps(self):
        self.buff32.write_bytes(self.data_of_length(12))
        self.buff32.read_bytes(8)
        self.buff32.write_bytes(self.data_of_length(12))
        self.buff32.read_bytes(16)
        self.buff32.write_bytes(self.data_of_length(12))
        self.buff32.read_bytes(9)
        self.buff32.write_bytes(self.data_of_length(12))
        self.buff32.read_bytes(11)
        self.buff32.write_bytes(self.data_of_length(12))
        data_read = self.buff32.read_bytes(12)
        self.assertEquals(self.buff32.get_available_read(), 4)
        self.assertEquals(data_read, self.data_of_length(12))

    def testReduceChannels(self):
        n_in = 7
        n_out = 2
        n_samples = 10
        data_in = np.arange(n_in * n_samples)
        buf = AudioBuffer(n_samples, n_in)
        data_out = buf.reduce_channels(data_in, n_in, n_out)
        correct = [
            x for x in range(n_in * n_samples)
            if x % n_in == 0 or (x - 1) % n_in == 0
        ]
        self.assertListFloatEqual(correct, data_out)

    def assertListFloatEqual(self, list1, list2):
        if not len(list1) == len(list2):
            raise AssertionError("Lists differ in lenght. Cannot be equal")
        for i in range(len(list1)):
            self.assertLessEqual(abs(list1[i] - list2[i]), 1e-4)

    def tearDown(self):
        print "Completed"
             # Perform an stft
             stft.performStft(data)
             # Process dfts from windowed segments of input
             dfts = stft.getDFTs()
             process_dfts(dfts)
             if DO_PLOT:
                 # Must update here because dfts are altered upon calling ISTFT since
                 # the dft is performed in place
                 fft = to_full_fft(dfts[0][0][0], dfts[0][1][0])
             # Get the istft of the processed data
             new_data = stft.performIStft()
             # Alter data so it can be written out
             if NUM_CHANNELS_IN != NUM_CHANNELS_OUT:
                 new_data = out_buf.reduce_channels(new_data, NUM_CHANNELS_IN, NUM_CHANNELS_OUT)
             if out_buf.get_available_write() >= WINDOW_LENGTH:
                 out_buf.write_samples(new_data)
             # Take care of plotting
             if DO_PLOT:
                 # Time plot
                 if NUM_CHANNELS_OUT != 1:
                     plot_data = out_buf.reduce_channels(new_data, NUM_CHANNELS_OUT, 1)
                 else:
                     plot_data = new_data
                 time_plot.set_ydata(plot_data)
                 # Frequency plot
                 freq_plot.set_ydata(np.abs(fft[:cutoff_ind]))
                 # Update plot
                 fig.canvas.draw()
         #time.sleep(.001)
 except KeyboardInterrupt:
     print "Program interrupted"