0001 function synthTarget(varargin)
0002 fmt = [];
0003 dur = [];
0004 out = [];
0005 if(~isempty(varargin))
0006 for n=1:size(varargin,1)
0007 fmt = [fmt, varargin(n,1:3)];
0008 dur = [dur, varargin(n,4)];
0009 end
0010 end
0011
0012
0013 mainfig = figure('name','Synthesize Auditory Target','numbertitle','off',...
0014 'units','norm','position',[.3 .3 .4 .4],'menubar','none');
0015
0016 [pb.type pb.num pb.vnum pb.vowel pb.f0 pb.f1 pb.f2 pb.f3]= ...
0017 textread('data/verified_pb.data','%d%d%d%s%f%f%f%f');
0018
0019 vowel_ind=[];
0020 for j=1:length(pb.type)
0021 if(pb.type(j)==1)
0022 if isempty(findstr(char(pb.vowel(j)),'*'))
0023 if isfield(vowel_ind,char(pb.vowel(j)))
0024 vowel_ind.(char(pb.vowel(j)))(end+1)=j;
0025 else
0026 vowel_ind.(char(pb.vowel(j)))(1)=j;
0027 end
0028 end
0029 end
0030 end
0031 names=fieldnames(vowel_ind);
0032 for n=1:length(names)
0033 meanVowel(n,:)=[mean(pb.f1(vowel_ind.(names{n}))),...
0034 mean(pb.f2(vowel_ind.(names{n}))),...
0035 mean(pb.f3(vowel_ind.(names{n})))];
0036 end
0037 example.iy='sweet';
0038 example.ih='Bill';
0039 example.ey='ate';
0040 example.eh='head';
0041 example.ae='after';
0042 example.er='bird';
0043 example.axr='creature';
0044 example.uh='butter';
0045 example.ah='about';
0046 example.ay='kite';
0047 example.aw='flower';
0048 example.aa='hot';
0049 example.ow='goat';
0050 example.oy='toy';
0051 example.ao='bought';
0052 example.uw='smooth';
0053 example.uh='wood';
0054
0055
0056
0057
0058
0059 uicontrol('style','text','parent',mainfig,...
0060 'units','norm','fontunits','norm',...
0061 'position',[0.1 0.86 0.1 0.05],'fontsize',0.7,...
0062 'HorizontalAlignment','center','string','Vowel');
0063 uicontrol('style','text','parent',mainfig,...
0064 'units','norm','fontunits','norm',...
0065 'position',[0.21 0.86 0.11 0.05],'fontsize',0.7,...
0066 'HorizontalAlignment','center','string','Example');
0067
0068 vowel.label = uicontrol('style','text','tag','vowel','parent',mainfig,...
0069 'units','norm','fontunits','norm',...
0070 'position',[0.22 0.79 0.1 0.05],...
0071 'backgroundcolor',[0.7 0.7 0.7],...
0072 'fontsize',0.8,'string',example.(lower(names{1})));
0073 vowel.menu = uicontrol('style','popupmenu','tag','vowel','parent',mainfig,...
0074 'string',names,'units','norm','fontunits','norm',...
0075 'position',[0.1 0.8 0.1 0.05],'fontsize',0.8,...
0076 'callback',{@setLabel,vowel.label,example,names});
0077
0078 uicontrol('style','text','parent',mainfig,'units','norm','fontunits','norm',...
0079 'position',[0.5 0.86 0.3 0.05],'fontsize',0.7,'string','target',...
0080 'HorizontalAlignment','center');
0081 target.label = uicontrol('style','edit','tag','target','parent',mainfig,...
0082 'units','norm','fontunits','norm',...
0083 'position',[0.5 0.8 0.3 0.05],...
0084 'fontsize',0.7,'horizontalalignment','center');
0085
0086 target.guiaxes = axes('tag','target','parent',mainfig,...
0087 'units','norm','yticklabel',[],...
0088 'position',[0.1 0.2 0.8 0.5]);
0089
0090 if(~isempty(fmt) & ~isempty(dur))
0091 else
0092 co=get(target.guiaxes,'colororder');
0093 for n=1:3,
0094 target.trace(n)=line('visible','off','color',co(n,:));
0095 end
0096 end
0097 target.sv_btn = uicontrol('style','pushbutton','tag','save',...
0098 'units','norm','fontunits','norm',...
0099 'position',[0.4 0.05 0.1 0.05],...
0100 'fontsize',0.7,'string','Save',...
0101 'parent',mainfig,...
0102 'callback',{@saveTarget,target});
0103 target.cancel_btn = uicontrol('style','pushbutton','tag','save',...
0104 'units','norm','fontunits','norm',...
0105 'position',[0.5 0.05 0.1 0.05],...
0106 'fontsize',0.7,'string','Cancel',...
0107 'parent',mainfig,...
0108 'callback','close');
0109
0110 set(vowel.menu,'KeyPressFcn',{@doKeyPress,target,names,meanVowel});
0111 set(target.label,'KeyPressFcn',{@doKeyPress,target});
0112
0113 function setLabel(src,eventdata,vlabel,example,names)
0114 set(vlabel,'string',example.(lower(names{get(src,'value')})));
0115
0116 function doKeyPress(src,eventdata,target,names,meanVowel)
0117 switch(eventdata.Key)
0118 case 'return',
0119 set(target.trace,'visible','on');
0120 idx=get(src,'Value');
0121 set(target.label,'string',strcat(get(target.label,'string'),lower(names{idx})));
0122 ud=get(target.guiaxes,'UserData');
0123 ud=[ud;meanVowel(idx,:), 150];
0124 set(target.guiaxes,'UserData',ud);
0125 for n=1:3,
0126 xdata = [];
0127 ydata = [];
0128 tydata = [];
0129 for m=1:size(ud,1)
0130 xdata = [xdata, (m-1)*ud(m,4):(m-1)*ud(m,4)+ud(m,4)-1];
0131 if(m>1)
0132 tydata = [tydata;
0133 (m-1)*ud(m-1,4)+round(ud(m,4)*0.25), ud(m,n);
0134 (m-1)*ud(m-1,4)+round(ud(m,4)*0.75), ud(m,n)];
0135 else
0136 tydata = [tydata;
0137 0, ud(m,n);
0138 round(ud(m,4)*0.25), ud(m,n);
0139 round(ud(m,4)*0.75), ud(m,n)];
0140 end
0141 end
0142 ydata = pchip(tydata(:,1),tydata(:,2),xdata);
0143 set(target.trace(n),'xdata',xdata,...
0144 'ydata',ydata);
0145 end
0146
0147 case 'backspace'
0148 lbl=get(target.label,'string');
0149 lbl(end-1:end)=[];
0150 set(target.label,'string',lbl);
0151 ud=get(target.guiaxes,'UserData');
0152 ud(end,:)=[];
0153 set(target.guiaxes,'UserData',ud);
0154 for n=1:3,
0155 xval=get(target.trace(n),'xdata');
0156 yval=get(target.trace(n),'ydata');
0157 if(length(xval)==1)
0158 break;
0159 else
0160 length(xval)
0161 if(length(xval>150))
0162 xval(end-150+1:end)=[];
0163 yval(end-150+1:end)=[];
0164 else
0165 xval=0;
0166 yval=0;
0167 end
0168 set(target.trace(n),'xdata',xval,'ydata',yval);
0169 end
0170 end
0171 end
0172
0173 function saveTarget(src,eventdata,target)
0174 xdata = [];
0175 ydata = [];
0176 for n=1:length(target.trace)
0177 xdata = [xdata; get(target.trace(n),'xdata')];
0178 ydata = [ydata; get(target.trace(n),'ydata')];
0179 end
0180
0181 name = get(target.label,'string');
0182 dur = size(xdata,2);
0183 f0=100;
0184 agp=0.2;
0185 ag0=0;
0186 F0 = [(0:dur-1)' ...
0187 pchip([0 ceil(dur/3) dur],[f0-5 f0 f0-.25*f0],0:dur-1)' ...
0188 ones(dur,1)];
0189 AgP=[(0:dur-1)',repmat(agp,dur,1),ones(ceil(dur),1)];
0190 Ag0=[(0:dur-1)',repmat(ag0,dur,1),ones(ceil(dur),1)];
0191 f.mean=round(ydata)';
0192 f.var = repmat([400 2500 10000],dur,1);
0193 fileTarget.pathname=['Sessiontargets',filesep,'Session_',DIVA('SessionName'),filesep];
0194 fileTarget.filename=[name,'.mat'];
0195 if(~exist(fileTarget.pathname)),
0196 mkdir(fileTarget.pathname);
0197 end
0198 save([fileTarget.pathname,fileTarget.filename],'f','Ag0','AgP','F0','dur','name');
0199 DIVA('SoundChannel','sound',f.mean');
0200 DIVA('AuditoryCortexCategorical','label',name);
0201 DIVA('simulate');
0202 DIVA('GUI','ACC_AuditoryTargets',...
0203 DIVA('AuditoryCortexCategorical','AuditoryTargets'));
0204 DIVA('GUI','auTarget',fileTarget);
0205 DIVA('GUI','train_sound');
0206 close(get(src,'parent'));