⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 label.m

📁 美国德克萨斯州大学电子工程系开发的一套进行语音分析的MATLAB程序. A MATLAB software tool for speech analysis.
💻 M
字号:
function label(action,opt)

%
% Copyright (c) 1995 by Philipos C. Loizou
%

global fno  lbVals Srate labfile LD_LABELS Be En lbUp n_Secs
global iaCnt  lbaUp labSave LD_LAB_FILE LD_LAB_FILE2


if isempty(LD_LAB_FILE), LD_LAB_FILE=0; end;
if isempty(LD_LAB_FILE2), LD_LAB_FILE2=0; end;





%=========================================================================
if strcmp(action,'add') %------------------ Add a label ----------
   
    figure(fno)

if  LD_LAB_FILE2==1 % clear existing labels
  	jnk=get(gcf,'Userdata');
	delete(jnk);
  	lbUp=[];
end

[x,y]=ginput(2);


if isempty(iaCnt), 
	iaCnt=1; 
	labfile='xlab.txt'; 
end;

off=Be*1000/Srate;
lbVals(iaCnt,1)=x(1)+off; lbVals(iaCnt,2)=x(2)+off;



FigXY = get(fno,'Position');
	
xlm=get(gca,'Xlim');
set(gca,'Units','Pixels');
AxesXY =get(gca,'Position');

fac=AxesXY(3)/xlm(2);
Xoffset = AxesXY(1);		  % X pixel offset  

xpos = round(Xoffset+x(1)*fac);  % coordinate in pixels
xwi= round((x(2)-x(1))*fac);


lbaUp(iaCnt)=uicontrol('Style','edit','Position',[xpos 5 xwi 20 ],...
	'BackGroundColor','y','HorizontalAlignment',...
	'center','String','text','Callback','labtext');



iaCnt=iaCnt+1;


set(gcf,'Userdata',lbaUp);

set(gca,'Units','Normal');
hold off
LD_LABELS=1; LD_LAB_FILE=1;
%=========================================================================
elseif strcmp(action,'load') %-------------- Load a label file -----------

  if   nargin==2
  	[pth,fname] = dlgopen('open','*.phn;*.txt');
  	if ((~isstr(fname)) | ~min(size(fname))), return; end	
  	labfile=[pth,fname];
     LD_LAB_FILE2=1;
   figure(fno)
	jnk=get(gcf,'Userdata');
	for i=1:length(jnk)
	 valid=0;
	 eval('findobj(jnk(i));','valid=1;');
	 if valid==0, delete(jnk(i)); end; 
	end
  else
	jnk=get(gcf,'Userdata');
	for i=1:length(jnk)
	 valid=0;
	 eval('findobj(jnk(i));','valid=1;');
	 if valid==0, delete(jnk(i)); end; 
	end
 
  end


  LD_LABELS=1;
  x=zeros(2,1);
  endp=zeros(2,1);
  FigXY = get(fno,'Position');
	

  xlm=[Be*1000/Srate, En*1000/Srate];
  set(gca,'Units','Pixels');
  AxesXY =get(gca,'Position');

  fac=AxesXY(3)/xlm(2);
  Xoffset = AxesXY(1);		  % X pixel offset  

  if ~isempty(lbUp) & LD_LAB_FILE==1
  	lbUp=[];
  end
	
  fp =fopen(labfile,'r');

  ilc=1;
  while 1
  	[endp,cnt]=fscanf(fp,'%d %d',2);
	
   	if cnt ~=2
     	   break;
   	else
     	   lab = fscanf(fp,'%s',1);
   	  
       
	   	
	x(1)=endp(1)*1000/Srate;
	x(2)=endp(2)*1000/Srate;
	if x(2) > n_Secs*1000
	  fprintf('WARNING! A label was found out of range.\n');
	  break;
	end;
  	xpos = round(Xoffset+x(1)*fac);  % coordinate in pixels
   	xwi= round((x(2)-x(1))*fac);
	if xwi<=0, xwi=2; end;
	%fprintf('%d %d %d %d %s\n',xpos,xwi,endp(1),endp(2),lab)

	if rem(ilc,2)==0, bk=[0.5 0.5 0.5]; else, bk='b'; end;
   	
	lbUp(ilc)=uicontrol('Style','text','Position',[xpos 5 xwi 20 ],'BackGroundColor',bk,...
	 'ForeGroundColor','y','HorizontalAlignment','center','String',lab);
	
	ilc=ilc+1;
       end
   end
  
  fclose(fp);
  set(gcf,'Userdata',lbUp)
  
  set(gca,'Units','Normal');
  hold off
  LD_LAB_FILE=1;
% ==============================================================================
elseif strcmp(action,'loadzm') %-------- Draw the labels in a zoomed display -----------

  figure(fno)
  
  lab=[];
  LD_LABELS=1;
  x=zeros(2,1);
  endp=zeros(2,1);
  FigXY = get(fno,'Position');
	
  xlm=[Be*1000/Srate, En*1000/Srate];
  set(gca,'Units','Pixels');
  AxesXY =get(gca,'Position');

  fac=AxesXY(3)/(xlm(2)-xlm(1));
  Xoffset = AxesXY(1);		  % X pixel offset  
	
  fp =fopen(labfile,'r');


  
	jnk=get(gcf,'Userdata'); 
	for i=1:length(jnk)
	 valid=0;
	 eval('findobj(jnk(i));','valid=1;');
	 if valid==0, delete(jnk(i)); end; 
	end
	lbUp=[];
  

  begL=Be;
  endL=En;
  
  while endp(2)<begL 
	[endp,cnt]=fscanf(fp,'%d %d',2);
	if cnt==2
	  lab = fscanf(fp,'%s',1);
	else
	  fclose(fp);
	  return;
	end
  end;
	
	x(2)=(endp(2)-Be)*1000/Srate;
	x(1)=(endp(1)-Be)*1000/Srate;
	if x(1)<0.0, x(1)=0.0; end;
  	xpos = round(Xoffset+x(1)*fac);  % coordinate in pixels
   	xwi= round((x(2)-x(1))*fac);
	if xwi<=0, xwi=2; end;

   	lbUp(1)=uicontrol('Style','text','Position',[xpos 5 xwi 20 ],'BackGroundColor','b',...
	 'ForeGroundColor','y','HorizontalAlignment','center','String',lab);

  
  ilc=2; 
  while endp(2)<endL

  	[endp,cnt]=fscanf(fp,'%d %d',2);
   	if cnt ~=2
     	   break;
   	else
     	   lab = fscanf(fp,'%s',1);
   	  
        %fprintf('%d %d %s\n',endp(1),endp(2),lab);
	x(1)=(endp(1)-Be)*1000/Srate;
	if endp(2)>endL
	  x(2)=(endL-Be)*1000/Srate;
	else
	  x(2)=(endp(2)-Be)*1000/Srate;
	end
  	xpos = round(Xoffset+x(1)*fac);  % coordinate in pixels
   	xwi= round((x(2)-x(1))*fac);
	if xwi<=0, xwi=2; end;

	if rem(ilc,2)==0, bk=[0.5 0.5 0.5]; else, bk='b'; end; % -- alternate bkg colors
   	lbUp(ilc)=uicontrol('Style','text','Position',[xpos 5 xwi 20 ],'BackGroundColor',bk,...
	 'ForeGroundColor','y','HorizontalAlignment','center','String',lab); 
       
 	ilc=ilc+1;
	end % of if cnt ~=2
   end

  set(gcf,'Userdata',lbUp);
  fclose(fp);
  set(gca,'Units','Normal');
  hold off

%=========================================================================
 elseif strcmp(action,'save') %-------------- save a label file -----------
    
    
 	if isempty(iaCnt)
	  errordlg('No labels were created for saving.','ERROR','on');
	  return;
	end
  	[pth,fname] = dlgopen('save','*.phn;*.txt');
  	if ((~isstr(fname)) | ~min(size(fname))), return; end	
  	filen=[pth,fname];
     
     

	fp=fopen(filen,'w');
	ic=size(lbVals); ic1=ic(1);
	vals=round(lbVals*Srate/1000);
	
	for i=1:ic1
	  in=find(labSave(i,:)==0);
	  fprintf(fp,'%d %d %s\n',vals(i,1),vals(i,2),setstr(labSave(i,1:in(1))));
	end
	
	fclose(fp);
 
%=========================================================================
 elseif strcmp(action,'savef') %-------------- save a label file -----------

 	if isempty(iaCnt)
	  errordlg('No labels were created for saving.','ERROR','on');
	  return;
	end
 
	
	fp=fopen(labfile,'w');
	ic=size(lbVals); ic1=ic(1);
	vals=round(lbVals*Srate/1000);
	
	for i=1:ic1
	  in=find(labSave(i,:)==0);
	  fprintf(fp,'%d %d %s\n',vals(i,1),vals(i,2),setstr(labSave(i,1:in(1))));
	end
	
	fclose(fp);
 
%=========================================================================
 elseif strcmp(action,'delete') %-------------- delete the last label ----

  
    figure(fno)
  if iaCnt>1 
   jnko=get(gcf,'Userdata');
   jnk=jnko(iaCnt-1);
   valid=0;
   eval('findobj(jnk);','valid=1;');
   if valid==0, delete(jnk); 
    	  	iaCnt=iaCnt-1;
   end	
  else
   lbaUp=[]; lbVals=[];
   errordlg('There is no label to delete','ERROR','on');
   return;
  end
 
%=========================================================================
 elseif strcmp(action,'clear') %-------------- clear all labels ----

  
   figure(fno)
  
   jnko=get(gcf,'Userdata');
   if isempty(jnko)
	 errordlg('There are no labels to clear','ERROR','on');
    else
	for i=1:length(jnko)
		valid=0;
		eval('findobj(jnko(i));','valid=1;');
		if valid==0, delete(jnko(i)); end;
	end
   	lbaUp=[]; lbVals=[];
	set(gcf,'Userdata',[]);
	LD_LABELS=0;
	iaCnt=1;  
    end
   
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -