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')
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())