""" Test sounds and plot waveforms. This script tests the sound waveform generator for a variety of sounds """ import sys import numpy as np import pyqtgraph as pg from cnmodel.util import sound from collections import OrderedDict from scipy import signal class test_sounds(): def __init__(self): cf = 2e3 Fs = 100e3 # sample frequency level = 80. seed = 34978 fmod = 10. dmod = 100. win = pg.GraphicsWindow() pipwin = win.addPlot(title='sound pip', row=0, col=0) pipmodwin = win.addPlot(title='100 % SAM modulated pip', row=1, col=0) noisewin = win.addPlot(title='WB noise', row=2, col=0) noisemodwin = win.addPlot(title='100 % SAM Modulated WB Noise', row=3, col=0) clickwin = win.addPlot(title='clicks', row=4, col=0) wavewin = win.addPlot(title='wavefile', row=5, col=0) pipwins = win.addPlot(title='sound pip Spec', row=0, col=1) pipmodwins = win.addPlot(title='100 % SAM modulated pip', row=1, col=1) noisewins = win.addPlot(title='WB noise', row=2, col=1) noisemodwins = win.addPlot(title='100 % SAM Modulated WB Noise', row=3, col=1) clickwins = win.addPlot(title='click spec', row=4, col=1) wavewins = win.addPlot(title='Wavefile spec', row=5, col=1) stims = OrderedDict([('pip', (pipwin, sound.TonePip)), ('pipmod', (pipmodwin, sound.SAMTone)), ('noise', (noisewin, sound.NoisePip)), ('noisemod', (noisemodwin, sound.SAMNoise)), ('clicks', (clickwin, sound.ClickTrain)), ('wavefile', (wavewin, sound.ReadWavefile))]) specs = OrderedDict([('pip', (pipwins, sound.TonePip)), ('pipmod', (pipmodwins, sound.SAMTone)), ('noise', (noisewins, sound.NoisePip)), ('noisemod', (noisemodwins, sound.SAMNoise)), ('clicks', (clickwins, sound.ClickTrain)), ('wavefile', (wavewins, sound.ReadWavefile))]) for stim in stims: print(stim) if stim in ['clicks']: wave = stims[stim][1](rate=Fs, duration=1.0, dbspl=level, click_duration=1e-4, click_starts=1e-3*np.linspace(10, 500, 50)) # wave = stims[stim][1](rate=Fs, dbspl=level, click_interval=10., nclicks=10, # click_duration=1e-4, click_start=10.) elif stim in ['wavefile']: wave = stims[stim][1](wavefile='cnmodel/examples/stim172_geese.wav', rate=Fs, dbspl=level) wave.sound # force generation here print('time shape test: ', wave.time.shape) else: wave = stims[stim][1](rate=Fs, duration=1.0, f0=cf, dbspl=level, pip_duration=0.8, pip_start=[10e-3], ramp_duration=2.5e-3, fmod=fmod, dmod=dmod, seed=seed) stims[stim][0].plot(wave.time, wave.sound) f, Pxx_spec = signal.periodogram(wave.sound, Fs) # window='flattop', nperseg=8192, noverlap=512, scaling='spectrum') specs[stim][0].plot(f, np.sqrt(Pxx_spec)) if __name__ == '__main__': test_sounds()