Exemple #1
0
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))
Exemple #2
0
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)
Exemple #3
0
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
Exemple #4
0
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))
Exemple #5
0
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()
Exemple #6
0
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)
Exemple #7
0
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
Exemple #8
0
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)
Exemple #9
0
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)