Home > fcn > DIVA_GUI_toolbox > synthTarget.m

synthTarget

PURPOSE ^

SYNOPSIS ^

function synthTarget(varargin)

DESCRIPTION ^

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SUBFUNCTIONS ^

SOURCE CODE ^

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   % select from list, separate gui
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) % Male only
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   % /iy/ sweet, /ih/ bill, /ey/ ate, /eh/ head, /ae/ after
0055   % /er/ bird, /axr/ creature, /uh/ butter, /ax/ about
0056   % /ay/ kite, /aw/ flower, /aa/ hot, /ow/ goat,
0057   % /oy/ toy, /ao/ bought, /uw/ smooth, /uh/ wood
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'));

Generated on Tue 27-Mar-2007 12:06:24 by m2html © 2003