def test_mixed_signal(): stim1 = SinStim(frequency=230, amplitude=2.0, phase=0.0, sample_rate=40000, duration=200, intensity=1.0, pre_silence=0, post_silence=0, attenuator=None) stim2 = SinStim(frequency=330, amplitude=2.0, phase=0.0, sample_rate=40000, duration=200, intensity=1.0, pre_silence=0, post_silence=0, attenuator=None) mixed = MixedSignal([stim1, stim2]) gen = mixed.data_generator() chunk = next(gen) # Make sure the mixed signal has two channels assert (chunk.data.shape[1] == 2) # Make sure each channel has the correct data. assert (np.array_equal(chunk.data[:, 0], stim1.data)) assert (np.array_equal(chunk.data[:, 1], stim2.data))
def test_sin_stim_attenuation(): # Create an attenuator with a set of frequencies and their attenuation factors att = Attenuator(attenuation_factors=dict(list(zip([0, 100, 150, 200, 250], [0, 1, 2, 3, 4])))) stim = SinStim(250, 2.0, 0.0, 40000, 200, 0, 0) oldVal = stim.data[10] stim.attenuator = att assert(stim.data[10] == 4*oldVal)
def test_play_sin(tmpdir): import time import h5py stim1 = SinStim(frequency=200, amplitude=1.0, phase=0.0, sample_rate=44100, duration=10000) dest = tmpdir.join('test.h5').strpath with DatasetLogServer() as log_server: logger = log_server.start_logging_server(dest) options = Dottable(wait=False) shared_state = SharedState(options, logger) sound_server = SoundServer(flyvr_shared_state=shared_state) sound_server.start_stream( frames_per_buffer=SoundServer.DEFAULT_CHUNK_SIZE) sound_server.queue.put(stim1) time.sleep(1.5) sound_server.quit() with h5py.File(dest, mode='r') as h5: assert h5['audio']['chunk_synchronization_info'].shape[ -1] == SampleChunk.SYNCHRONIZATION_INFO_NUM_FIELDS
def test_mix_different_sizes(): # Create two signals, the chunks their generators yield will be different sizes. stim1 = SinStim(frequency=230, amplitude=2.0, phase=0.0, sample_rate=40000, duration=200, intensity=1.0, pre_silence=0, post_silence=0, attenuator=None) stim2 = ConstantStim(amplitude=5.0, duration=stim1.duration, sample_rate=40000) assert stim1.dtype is not None assert stim2.dtype is not None mixed = MixedSignal([stim1, stim2]) gen = mixed.data_generator() for i in range(500): chunk = next(gen).data assert (np.array_equal(chunk[:, 0], stim1.data)) assert (np.array_equal(chunk[:, 1], np.ones(shape=stim1.data.shape) * 5))
def test_callbacks(stim): my_callback_mock = mock.Mock() stim = SinStim(frequency=230, amplitude=2.0, phase=0.0, sample_rate=40000, duration=200, intensity=1.0, pre_silence=0, post_silence=0, attenuator=None, next_event_callbacks=my_callback_mock) data_gen = stim.data_generator() next(data_gen) my_callback_mock.assert_called()
def stim3(): return SinStim(frequency=430, amplitude=2.0, phase=0.0, sample_rate=40000, duration=200, intensity=1.0, pre_silence=0, post_silence=0, attenuator=None)
def stim(): stim = SinStim(frequency=230, amplitude=2.0, phase=0.0, sample_rate=40000, duration=200, intensity=1.0, pre_silence=0, post_silence=0, attenuator=None) # Create a sin stimulus return stim
def test_mixed_signal_chunked(): stim1 = SinStim(frequency=230, amplitude=2.0, phase=0.0, sample_rate=40000, duration=200, intensity=1.0, pre_silence=0, post_silence=0, attenuator=None) stim2 = SinStim(frequency=330, amplitude=2.0, phase=0.0, sample_rate=40000, duration=200, intensity=1.0, pre_silence=0, post_silence=0, attenuator=None) mixed = MixedSignal([stim1, stim2]) check_chunker(mixed.data_generator, 128)
def test_chunker(): def simple_gen(): x = 0 while True: yield SampleChunk(data=np.arange(x, x + 51), producer_identifier='', producer_instance_n=-1) x = x + 51 # Test out the chunker on a very simple generator check_chunker(simple_gen, 100) check_chunker(simple_gen, 101) check_chunker(simple_gen, 1) # Now test out the generator on a stimulus audio generator, try it when the chunks are # actually bigger than the generators data chunk size. stim = SinStim(230, 2.0, 0.0, 40000, 200, 1.0, 0, 0) check_chunker(stim.data_generator, 10000) check_chunker(stim.data_generator, 10551)