annotate aim-mat/tools/@signal/play.m @ 4:537f939baef0 tip

various bug fixes and changed copyright message
author Stefan Bleeck <bleeck@gmail.com>
date Tue, 16 Aug 2011 14:37:17 +0100
parents 20ada0af3d7d
children
rev   line source
bleeck@3 1 % method of class @signal
bleeck@3 2 %
bleeck@3 3 % INPUT VALUES:
bleeck@3 4 % sig,attenuation,ramp
bleeck@3 5 % sig is the signal or a array of two signals for stereo
bleeck@3 6 % attenuation is the attenuation against the lowdest possible tone
bleeck@3 7 % with amplitude =1
bleeck@3 8 % default=1
bleeck@3 9 %
bleeck@3 10 % RETURN VALUE:
bleeck@3 11 %
bleeck@3 12 %
bleeck@3 13 % This external file is included as part of the 'aim-mat' distribution package
bleeck@3 14 % (c) 2011, University of Southampton
bleeck@3 15 % Maintained by Stefan Bleeck (bleeck@gmail.com)
bleeck@3 16 % download of current version is on the soundsoftware site:
bleeck@3 17 % http://code.soundsoftware.ac.uk/projects/aimmat
bleeck@3 18 % documentation and everything is on http://www.acousticscale.org
bleeck@3 19
bleeck@3 20
bleeck@3 21 % function play(sig,attenuation,ramp)
bleeck@3 22 function play(sig,attenuation,ramp)
bleeck@3 23
bleeck@3 24 if nargin < 3
bleeck@3 25 ramp=0;
bleeck@3 26 end
bleeck@3 27 if nargin < 2
bleeck@3 28 attenuation=0;
bleeck@3 29 end
bleeck@3 30 if attenuation > 0
bleeck@3 31 % error('cant play sounds louder then maximum, reduce attenuation!');
bleeck@3 32 disp('warning: signal\play:: play sounds louder then maximum, reduce attenuation!');
bleeck@3 33 end
bleeck@3 34
bleeck@3 35 if length(sig)>1 % stereo!
bleeck@3 36 sig(1)=attenuate(sig(1),attenuation);
bleeck@3 37 sig(2)=attenuate(sig(2),attenuation);
bleeck@3 38
bleeck@3 39 values1=getvalues(sig(1));
bleeck@3 40 values2=getvalues(sig(2));
bleeck@3 41
bleeck@3 42 finvals=[values1 values2];
bleeck@3 43 sr=getsr(sig(1));
bleeck@3 44
bleeck@3 45 sound(finvals,sr);
bleeck@3 46 pause(getlength(sig(1)));
bleeck@3 47 else
bleeck@3 48
bleeck@3 49
bleeck@3 50 % beware of playing a NULL-stimulus!
bleeck@3 51 if getlength(sig)<=1/getsr(sig)
bleeck@3 52 return
bleeck@3 53 end
bleeck@3 54
bleeck@3 55 if ramp>0
bleeck@3 56 sig=rampamplitude(sig,ramp);
bleeck@3 57 end
bleeck@3 58
bleeck@3 59 sig=attenuate(sig,attenuation);
bleeck@3 60
bleeck@3 61 if max(sig)>1
bleeck@3 62 disp('warning: signal\play:: clipping in signal');
bleeck@3 63 end
bleeck@3 64 sound(sig.werte,sig.samplerate);
bleeck@3 65
bleeck@3 66 pause(getlength(sig));
bleeck@3 67 end