Source code for ibllib.tests.integration.test_training_audio

import unittest

import numpy as np
import one.alf.io as alfio
from ibllib.io.extractors import training_audio as audio

from ibllib.tests import base


[docs] class TestAudioExtraction(base.IntegrationTest): required_files = ['Subjects_init/ZM_1085/2019-07-01/002/raw_behavior_data'] _writable_scope = 'test'
[docs] def setUp(self): super().setUp() file_wav = self.data_path.joinpath('Subjects_init', 'ZM_1085', '2019-07-01', '002', 'raw_behavior_data', '_iblrig_micData.raw.wav') self.ses_path = file_wav.parents[1] if not self.ses_path.exists(): return
[docs] def test_qc_extract(self): # extract audio audio.extract_sound(self.ses_path, save=True) D = alfio.load_object(self.ses_path / 'raw_behavior_data', 'audioSpectrogram') cues = alfio.load_object(self.ses_path / 'raw_behavior_data', 'audioOnsetGoCue') self.assertEqual(cues['times_mic'].size, 7) self.assertEqual(D['power'].shape[0], D['times_mic'].shape[0]) self.assertEqual(D['frequencies'].shape[1], D['power'].shape[1])
# now test the registration of the data
[docs] def tearDown(self): path_out = self.ses_path / 'raw_behavior_data' for f in path_out.glob('_iblmic_*'): f.unlink()
[docs] class TestAudioProcessing(base.IntegrationTest):
[docs] def test_detect_go_cues(self): fs = 200_000 w = np.load(self.data_path.joinpath("sound/example_gocue_clicks_error_fs200k.npy")) dtect = audio.detect_ready_tone(w, fs, threshold=.2) # this example contains 3 go cue times self.assertTrue(np.all(dtect == (np.array([188863, 1318916, 1932242]))))
if __name__ == "__main__": unittest.main(exit=False)