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()))
예제 #5
0
    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)