def test_modify_no_swap(self):
     a = basic_wave.BasicWave(440, 42, 0.63, 0.87)
     m = basic_wave.Modifier(frequency=100, phi=10, magnitude=1, offset=0.1)
     a.add_modifier(m)
     a.play()
     self.assertEqual(540, a.frequency)
     self.assertEqual(52, a.phi)
     self.assertEqual(1.63, a.magnitude)
     self.assertEqual(0.97, a.offset)
 def test_modify_incremental_change(self):
     a = basic_wave.BasicWave(440, 42, 0.63, 0.87)
     m = basic_wave.Modifier(frequency=100,
                             phi=10,
                             magnitude=1,
                             offset=0.1,
                             duration=0.2)
     a.add_modifier(m)
     a.play()
     self.assertEqual(440 + 100 / (basic_wave.FRAMERATE * 0.2), a.frequency)
     self.assertEqual(42 + 10 / (basic_wave.FRAMERATE * 0.2), a.phi)
     self.assertEqual(0.63 + 1 / (basic_wave.FRAMERATE * 0.2), a.magnitude)
     self.assertEqual(0.87 + 0.1 / (basic_wave.FRAMERATE * 0.2), a.offset)
 def test_wave_description(self):
     a_w_description = (440, pi / 2, 0.63, 0.87, [], 0.123)
     frequency = a_w_description[0]
     phi = a_w_description[1]
     magnitude = a_w_description[2]
     offset = a_w_description[3]
     t_modifier = a_w_description[5]
     a_w = basic_wave.BasicWave(frequency,
                                phi=phi,
                                magnitude=magnitude,
                                offset=offset,
                                t_modifier=t_modifier)
     self.assertEqual([a_w_description], a_w._wave_description())
    def test_calculate_frame(self):
        a_w_description = (440, pi / 2, 0.63, 0.87)
        frequency = a_w_description[0]
        phi = a_w_description[1]
        magnitude = a_w_description[2]
        offset = a_w_description[3]
        a_w = basic_wave.BasicWave(frequency,
                                   phi=phi,
                                   magnitude=magnitude,
                                   offset=offset)

        for t in range(1, int(basic_wave.FRAMERATE / frequency + 1)):
            frame = (magnitude * sin((
                (tau * frequency / basic_wave.FRAMERATE) * t) + phi + pi / 2))
            self.assertAlmostEqual(frame, a_w.calculate_frame(t))
    def test_play(self):
        a_w_description = (440, pi / 2, 0.63, 0.87)
        frequency = a_w_description[0]
        phi = a_w_description[1]
        magnitude = a_w_description[2]
        offset = a_w_description[3]

        # As integer
        a_w = basic_wave.BasicWave(frequency,
                                   phi=phi,
                                   magnitude=magnitude,
                                   offset=offset)
        for t in range(0, int(basic_wave.FRAMERATE / frequency + 1)):
            frame = (magnitude * sin((
                (tau * frequency / basic_wave.FRAMERATE) * t) + phi + pi / 2) *
                     32767.0 + (32767.0 * offset))
            self.assertAlmostEqual(frame, a_w.play(in_bytes=False), -4)
            # TODO very imprecise comparison

        # As bytes
        """
 def test_add_modifier(self):
     a = basic_wave.BasicWave(440, pi / 2, 0.63, 0.87)
     self.assertEqual(0, len(a.modifiers))
     m = basic_wave.Modifier()
     a.add_modifier(m)
     self.assertEqual(1, len(a.modifiers))
 def test_init_magnitude_value(self):
     self.assertEqual(0.749,
                      basic_wave.BasicWave(440, magnitude=0.749).magnitude)
 def test_init_phi_value(self):
     self.assertEqual(pi, basic_wave.BasicWave(440, phi=pi).phi)
 def test_add_return(self):
     a_w = basic_wave.BasicWave(440)
     b_w = basic_wave.BasicWave(493.88)
     x_w = basic_wave.Wave([(770, 0.0, 1.0, 0.0)])
     self.assertIsInstance(a_w + b_w, basic_wave.Wave)
     self.assertIsInstance(a_w + x_w, basic_wave.Wave)
 def test_init_modifier_ValueError(self):
     with self.assertRaises(ValueError):
         basic_wave.BasicWave(440, modifiers='not a modifier')
 def test_init_offset_value_range(self):
     self.assertEqual(0.0, basic_wave.BasicWave(440, offset=1.5).offset)
     self.assertEqual(0.0, basic_wave.BasicWave(440, offset=-5.1).offset)
 def test_init_offset_value(self):
     self.assertEqual(0.749, basic_wave.BasicWave(440, offset=0.749).offset)
     self.assertEqual(-0.361,
                      basic_wave.BasicWave(440, offset=-0.361).offset)
 def test_init_offset_ValueError(self):
     with self.assertRaises(ValueError):
         a = basic_wave.BasicWave(frequency=440, offset='Not a int/float')
 def test_init_magnitude_value_range(self):
     self.assertEqual(1.0,
                      basic_wave.BasicWave(440, magnitude=2.5).magnitude)
     self.assertEqual(-1.0,
                      basic_wave.BasicWave(440, magnitude=-5.2).magnitude)
 def test_init_frequency_ValueError(self):
     with self.assertRaises(ValueError):
         a = basic_wave.BasicWave('Not a int/float')
 def test_init_frequency_value(self):
     self.assertEqual(440, basic_wave.BasicWave(440).frequency)
 def test_play_in_bytes(self):
     a_w = basic_wave.BasicWave(440)
     self.assertIsInstance(a_w.play(), bytes)
     a_w = basic_wave.BasicWave(440)
     self.assertNotIsInstance(a_w.play(in_bytes=False), bytes)
 def test_init_magnitude_ValueError(self):
     with self.assertRaises(ValueError):
         a = basic_wave.BasicWave(frequency=440,
                                  magnitude='Not a int/float')
Esempio n. 19
0
import math
import wave
import basic_wave

CHANNELS = 2
SAMPLEWIDTH = 2
FRAMERATE = 44100
NFRAMES = 5*FRAMERATE

a = basic_wave.BasicWave(440)
a_p = basic_wave.BasicWave(440, phi=math.pi/2)

with wave.open('a.wav', 'wb') as wav:
    wav.setparams((CHANNELS, SAMPLEWIDTH, FRAMERATE, NFRAMES,
                   'NONE', 'not compressed'))
    frames = []
    for i in range(NFRAMES):
        frames.append(a.play())
        frames.append(a_p.play())
    wav.writeframes(b''.join(frames))

bc = basic_wave.Wave([(493.88, 0.0, 1.0, 0.0), (523.25, 0.0, 1.0, 0.0)])
bc_p = basic_wave.Wave([(493.88, math.pi/2, 1.0, 0.0),
                        (523.25, math.pi/2, 1.0, 0.0)])

with wave.open('bc.wav', 'wb') as wav:
    wav.setparams((CHANNELS, SAMPLEWIDTH, FRAMERATE, NFRAMES,
                   'NONE', 'not compressed'))
    frames = []
    for i in range(NFRAMES):
        frames.append(bc.play())