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

📄 gethdr.m

📁 美国德克萨斯州大学电子工程系开发的一套进行语音分析的MATLAB程序. A MATLAB software tool for speech analysis.
💻 M
字号:
function [HDRSIZE, Srate1, bps, filet] =  gethdr(fp,ext)


bps=2; filet='short';  % bytes per samples

if strcmp(ext,'ils') %---- ILS --- 
	HDRSIZE=512;   % Header size in bytes
	[xx, cnt] = fread(fp,HDRSIZE/2,'short');
	if cnt < HDRSIZE/2
	  fprintf('ERROR in reading file %s (possibly a zero-bytes file)\n',filename);
	  return;
	end
   Srate1 = xx(62); 
   
elseif strcmp(ext,'adf') %-- ADF format -CSRE ----
	HDRSIZE=512;
	csre=fread(fp,8,'char');
	setstr(csre);
	numsam=fread(fp,1,'int32');
 	xx=fread(fp,5,'short'); bits=xx(4); cd=xx(5);
	srt=fread(fp,1,'float');
	Srate1=1000*srt;
	fseek(fp,HDRSIZE,'bof');
   
elseif strcmp(ext,'adc')  %-- old TIMIT format----
	xx=fread(fp,3,'short');  % xx(1)= hdrsize in words
				 % xx(2)= version
				 % xx(3)= number of channels 
	if xx(2)>10 | xx(3)>3
	  error('ERROR reading TIMIT header..');
	end
	HDRSIZE=xx(1)*2; % header size in bytes 
	if HDRSIZE<0 | HDRSIZE>20
	   error('ERROR reading TIMIT header..');
	end
	srt=fread(fp,1,'short'); % sampling period in 1/4 microsecs
	nsam=fread(fp,1,'int32'); % number of samples
	if srt>0
	  Srate1=4*10^6/srt; 
	else
	 error('ERROR reading TIMIT header..');
	end
   
 
 elseif strcmp(ext,'wav')  % -- MS Windows WAV files or TIMIT files
	xx=fread(fp,4,'char');
	riff=(setstr(xx))';
      if strcmp(riff,'RIFF') ~= 1   % maybe a SPHERE file
        fseek(fp,0,'bof');
        nist=fscanf(fp,'%s',1);
        if strcmp(nist(1:4),'NIST') ==0
          error('Error reading voice file header, not a MS Windows WAV nor TIMIT ..');
          return;
        end 
        
        nn=fscanf(fp,'%d',1);
        for i=1:5
          X=fscanf(fp,'%s %s %s',3);
        end

        X=fscanf(fp,'%s %s',2);
        Srate1=fscanf(fp,'%d',1);
      
        for i=1:2
          X=fscanf(fp,'%s %s %s',3);
        end
	
        X=fscanf(fp,'%s %s',2);
        bps=fscanf(fp,'%d',1);
	
        fseek(fp,1024,'bof'); % skip the header
        HDRSIZE=1024;	% Header Size.  
   else  				%------ maybe a MS windows .wav file
        numsa=fread(fp,1,'int32');  % length in bytes of rest of file
        xx=fread(fp,7,'short');
        chan=fread(fp,1,'short'); 
        Srate1=fread(fp,1,'int32');  % -- Get the sampling frequency-------
        datasec=fread(fp,2,'short');
        bytesamp=fread(fp,1,'short');
        if bytesamp==1, bps=1; filet='char'; end
        bitssamp=fread(fp,1,'short');
        xx=fread(fp,4,'char'); 
        if strcmp('data',setstr(xx)')==1 | strcmp('fact',setstr(xx)')==1
           if strcmp('fact',setstr(xx)')==1, nsam=fread(fp,3,'int32'); end;
              
         else
           fprintf('ERROR! Not a valid wav file. Missing data.\n');
        end
        nsam=fread(fp,1,'int32'); % Number of samples in bytes
        HDRSIZE=ftell(fp);
 
 end

   
    
elseif strcmp(ext,'voc') %-------- Creative Lab's VOC files-------

	cint=[1 2^8]';
	xx=fread(fp,20,'char');
	vf=setstr(xx');
	if strcmp(vf(1:19),'Creative Voice File')==0
	  disp('ERROR! File is not a proper VOC file');
	  return;
	end
	xoff=fread(fp,1,'short');
	x1=fread(fp,2,'uchar'); % frmt=sum(x1 .* cint)
	x1=fread(fp,2,'uchar'); % vid=sum(x1 .* cint)
	blk_type=fread(fp,1,'uchar');
	x3=fread(fp,3,'uchar');
	blen=sum(x3 .* [cint; 2^16])-2;
	if blk_type==1  % Voice data
	  tconst=fread(fp,1,'uchar');
	  Srate1=10^6/(256-tconst);
	  pck=fread(fp,1,'uchar');
	  if pck ~=0, disp('WARNING! Voice data is not in 8-bit sample format'); end;
	  fread(fp,1,'uchar');
	else
	  Srate1=11125;
	  disp('WARNING! Not a voice file.');
	end
	HDRSIZE=ftell(fp);
	WAV=1; bps=1; filet='char';
else
	
	
   fprintf('ERROR! Unknown file extension..\n');
    Srate1=0;   
	 convert; % convert file format
    
 end  
	

⌨️ 快捷键说明

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