示例#1
0
class SineSourceTest(unittest.TestCase):
    def setUp(self):
        self.s = SineSource(channels=2, freq=1, amp=0.5, phase=pi / 2)
        self.s2 = SineSource(channels=2, freq=1, amp=0.5, phase=pi / 2, length=self.s.rate)

    def test_params(self):
        self.assertEqual(self.s.channels, 2)
        self.assertTrue(self.s.endless)

    def test_read(self):
        second = list(islice(self.s.read(), 0, self.s.rate))
        
        self.assertAlmostEqual(second[0][0], 0.5)
        self.assertAlmostEqual(second[0][1], 0.5)
        self.assertAlmostEqual(second[-1][0], 0.5)
        self.assertAlmostEqual(second[-1][1], 0.5)

        self.assertAlmostEqual(second[int(self.s.rate / 2)][0], -0.5)
        self.assertAlmostEqual(second[int(self.s.rate / 2)][1], -0.5)

        self.assertAlmostEqual(second[int(self.s.rate / 4)][0], 0.0, 4)
        self.assertAlmostEqual(second[int(self.s.rate / 4)][1], 0.0, 4)

        self.assertTrue(second[int(self.s.rate / 4 - 1)][0] > 0.0)
        self.assertTrue(second[int(self.s.rate / 4 - 1)][1] > 0.0)

        self.assertTrue(second[int(self.s.rate / 4 + 1)][0] < 0.0)
        self.assertTrue(second[int(self.s.rate / 4 + 1)][1] < 0.0)

        self.assertEqual(second, list(self.s2.read()))
示例#2
0
    def test_write(self):
        source = SineSource(channels=2, freq=441, amp=0.5, phase=pi / 2, length=44100)
        data = list(source.read())

        for f in xrange(1, 5):
            fname = path.join(gettempdir(), "%s" % f)

            w = self.w(fname, channels=source.channels,
                           rate=source.rate,
                           depth=f)

            w.write(data)
            w.close()

            r = self.r(fname)

            self.assertEqual(r.rate, 44100)
            self.assertEqual(r.channels, 2)
            self.assertEqual(r.depth, f)

            chunk = list(r.read())
            self.assertEqual(chunk[0], [0.5, 0.5])
            self.assertEqual(chunk[25], [0.0, 0.0])
            self.assertEqual(chunk[50], [-0.5, -0.5])

            unlink(fname)
示例#3
0
    def test_write(self):
        source = SineSource(channels=2, freq=441, 
                            amp=0.5, phase=pi / 2, length=44100)

        data = list(source.read())

        fname = path.join(gettempdir(), "test.mat")
        w = MatWriter(fname)

        w.write(data)
        w.close()

        # Comprehensive testing using scipy loadmat routine
        try:
            from scipy.io import loadmat
            f = loadmat(fname)
            self.assertTrue("signal" in f)
            self.assertEqual(f["signal"].shape, (len(data), 2))
            self.assertEqual(tuple(f["signal"][0]), (0.5, 0.5))
        except ImportError:
            print("No scipy found :(")
            pass

        # Less comprehensive testing for scipy-poor systems (like pypy)

        # File size
        self.assertEqual(path.getsize(fname), 
                128 +               # Header
                8 + 16 + 16 + 16 +  # Array tag, array flags, dimensions, name
                8 +                 # Data tag
                len(data) * 2 * 8   # Data size
        )

        with open(fname, "rb") as f:
            f.seek(128 + 8 + 16 + 16 + 16 + 8)
            s = f.read(8)
            self.assertEqual(unpack("<d", s)[0], 0.5)

            f.seek((len(data) - 1) * 8)
            self.assertEqual(unpack("<d", s)[0], 0.5)

        unlink(fname)
示例#4
0
    def test_sources(self):
        samples = 100
        r1 = SineSource(freq=1000, channels=2)
        r2 = SineSource(freq=1000, channels=2)

        s1 = Stack(
            [
                (LowPassFilter(samplerate=r2.rate, channels=r2.channels), "output"),
                [RMS(samplerate=r2.rate, channels=r2.channels), ("rms", "output")],
            ]
        )

        s2 = Stack(
            [
                (LowPassFilter(samplerate=r2.rate, channels=r2.channels), "output"),
                [RMS(samplerate=r2.rate, channels=r2.channels), ("rms", "output")],
            ]
        )

        s3 = Stack(
            [
                [RMS(samplerate=r2.rate, channels=r2.channels), ("rms", "output")],
                (LowPassFilter(samplerate=r2.rate, channels=r2.channels), "output"),
            ]
        )

        chunk = list(islice(r1.read(), 0, samples))

        out1 = s1.process(chunk)
        out2 = s2.process_source(r2, samples)
        out3 = s3.process(chunk)

        self.assertEqual(out1, out2)
        self.assertEqual(out1, out3)
        self.assertEqual(out1, s2.probe_results["0_output"])
        self.assertEqual(out1, s2.probe_results["1_output"])
        self.assertEqual(chunk, s1.probe_results["input"])
示例#5
0
 def setUp(self):
     self.s = SineSource(channels=2, freq=1, amp=0.5, phase=pi / 2)
     self.s2 = SineSource(channels=2, freq=1, amp=0.5, phase=pi / 2, length=self.s.rate)