def test_get_raw(self): vector = np.arange(1, 7) audio = FramedAudio(vector, 44100, 4, 2) raw = audio.get_raw() self.assertTrue(np.array_equal(raw, vector))
def test_get_frame(self): vector = np.arange(1, 7) audio = FramedAudio(vector, 44100, 4, 2) frame = audio.get_frame(0) expected = np.array([1,2,3,4]) self.assertTrue(np.array_equal(frame, expected)) frame = audio.get_frame(1) expected = np.array([3,4,5,6]) self.assertTrue(np.array_equal(frame, expected))
def test_from_file(self): test_path = os.path.dirname(__file__) src = os.path.join(test_path, 'audio_sample.ogg') audio = FramedAudio.from_file(src, 2048, 1024, True) audio2 = FramedAudio.from_file(src, config={'block-size':2048, 'hop-size':1024, 'centered':True}) self.assertEqual(audio.get_config(), audio2.get_config()) array, _ = audio_io.read(src) self.assertTrue(np.array_equal(array, audio.array))
def test_matches_cfg(self): vector = np.arange(128) audio = FramedAudio(vector, 44100, 4, 2) self.assertTrue(audio.matches_cfg({'fs':44100})) self.assertFalse(audio.matches_cfg({'fs':48100})) self.assertFalse(audio.matches_cfg({'no-key':44100})) self.assertTrue(audio.matches_cfg(audio.get_config()))
def test_pitch_acf(self): block_size = 4096 fs = 44100 f0Sweep = np.linspace(200, 800, 8 * block_size) phase = np.add.accumulate(2. * np.pi * f0Sweep / fs) x = np.sin(phase) audio = FramedAudio(x, fs, block_size, block_size) pitch = pitch_acf(audio, fs) pitch_reference = f0Sweep[0:-1:block_size] self.assertTrue(np.max(np.abs(pitch - pitch_reference)) < 50)
def test_set_get_config(self): vector = np.arange(128) audio = FramedAudio(vector, 44100, 4, 2) cfg = audio.get_config() self.assertEqual(cfg['fs'], 44100) self.assertEqual(cfg['block-size'], 4) self.assertEqual(cfg['hop-size'], 2) vector = np.arange(128) audio2 = FramedAudio(vector, 123, 2, 4) audio2.set_config(cfg) self.assertEqual(audio2.get_config(), cfg)
def test_trajectories(self): vector = np.arange(128) audio = FramedAudio(vector, 44100, 4, 2) traj = np.arange(audio.get_num_frames()) audio.store_trajectory('traj', traj) traj2 = audio.get_trajectory('traj') self.assertTrue(np.array_equal(traj, traj2)) self.assertTrue( audio.get_trajectory('no-key') is None)
def test_get_time(self): audio = FramedAudio(np.arange(512), 256, 256,256) expected = np.array([0., 1.]) result = audio.get_time(False) self.assertTrue(np.array_equal(expected, result)) expected = np.array([0.5, 1.5]) result = audio.get_time(True) self.assertTrue(np.array_equal(expected, result)) audio = FramedAudio(np.arange(512), 256, 256, 256, centered=True) expected = np.array([-0.5, 0.5]) result = audio.get_time(False) self.assertTrue(np.array_equal(expected, result)) expected = np.array([0., 1.]) result = audio.get_time(True) self.assertTrue(np.array_equal(expected, result))
# allowing growth on GPU config = tf.compat.v1.ConfigProto() config.gpu_options.allow_growth = True session = tf.compat.v1.Session(config=config) #%% Import Dataset print('Import Dataset') # get cached analysis result and source sample num_overtones = 40 wav_file = dataset.get_sample('scales', 'slow_forte', 'a', 'f6')[0] json_file = os.path.splitext(wav_file)[0] + '.json' # import framed audio audio = FramedAudio.from_json(json_file) sample_rate = audio.fs # run onset / offset detection onset, offset = magnitude.get_onset_offset(audio) onset += 100 offset -= 100 num_samples = offset - onset #run overtone extraction overtones = extract_overtones.extract_overtones_from_audio(audio, num_overtones = num_overtones) overtonesDB = 20. * np.log10(np.abs(overtones[onset:offset, :])) overtonesDB -= np.max(overtonesDB) #extract pitch information pitch = np.reshape(audio.get_trajectory('pitch')[onset:offset], [num_samples,1])
def test_get_num_frames(self): audio = FramedAudio(np.zeros((1,128)), 44100, 256, 128) self.assertEqual(audio.get_num_frames(), 1) audio = FramedAudio(np.zeros((1,256)), 44100, 256, 128) self.assertEqual(audio.get_num_frames(), 1) audio = FramedAudio(np.zeros((1,384)), 44100, 256, 128) self.assertEqual(audio.get_num_frames(), 2) audio = FramedAudio(np.zeros((1,385)), 44100, 256, 128) self.assertEqual(audio.get_num_frames(), 2) audio = FramedAudio(np.zeros((0,0)),44100, 256, 128) self.assertEqual(audio.get_num_frames(), 1)
def test_centered(self): audio = FramedAudio(np.arange(512), 44100, 256,128, centered=True) # frames expected as follows # 1: [-128, 128[ # 2: [0, 256[ # 3: [128, 384[ # 4: [256, 512[ self.assertEqual(audio.get_num_frames(), 4) self.assertEqual(audio.get_frame(0).size, 256) self.assertEqual(audio.get_frame(1).size, 256) self.assertEqual(audio.get_frame(2).size, 256) self.assertEqual(audio.get_frame(3).size, 256) self.assertEqual(audio.get_frame(0)[-1], 127) self.assertEqual(audio.get_frame(1)[-1], 255) self.assertEqual(audio.get_frame(2)[-1], 383) self.assertEqual(audio.get_frame(3)[-1], 511) audio = FramedAudio(np.arange(512), 44100, 256, 128, centered=False) # frames expected as follows # 1: [-128, 128[ # 2: [0, 256[ # 3: [128, 384[ # 4: [256, 512[ self.assertEqual(audio.get_num_frames(), 3) self.assertEqual(audio.get_frame(0).size, 256) self.assertEqual(audio.get_frame(1).size, 256) self.assertEqual(audio.get_frame(2).size, 256) self.assertEqual(audio.get_frame(0)[-1], 255) self.assertEqual(audio.get_frame(1)[-1], 383) self.assertEqual(audio.get_frame(2)[-1], 511) audio = FramedAudio(np.arange(513), 44100, 256, 128, centered=True) self.assertEqual(audio.get_num_frames(), 4)
def test_json(self): vector = np.arange(128) audio = FramedAudio(vector, 44100, 4, 2) traj = np.arange(audio.get_num_frames()) audio.store_trajectory('traj', traj) audio.save_json('temp.json') # create another instance with same vector but different audio2 = FramedAudio.from_json('temp.json') self.assertTrue( np.array_equal(audio.get_trajectory('traj'), audio2.get_trajectory('traj'))) self.assertEqual( audio.get_config(), audio2.get_config()) test_path = os.path.dirname(__file__) src = os.path.join(test_path, 'audio_sample.ogg') audio = FramedAudio.from_file(src, 2048, 1024) audio.save_json('temp.json') audio2 = FramedAudio.from_json('temp.json') self.assertEqual( audio.get_config(), audio2.get_config()) self.assertEqual( audio.src_file, audio2.src_file) self.assertTrue( np.array_equal(audio.array, audio2.array)) audio3 = FramedAudio.from_json('non-existing.json') self.assertTrue(audio3 is None)