wread16.m
上传用户:m_sun_001
上传日期:2014-07-30
资源大小:1115k
文件大小:3k
源码类别:

matlab例程

开发平台:

Matlab

  1. function [y,Fs,Format]=wavread16(wavefile)
  2. %WAVREA  Load Microsoft Windows 3.1 .WAV format sound files.
  3. %   [y]=WREAD16(wavefile) loads a .WAV format file specified by "wavefile", 
  4. %       returning the sampled data in variable "y". The .WAV extension 
  5. %       in the filename is optional.
  6. %
  7. %   [y,Fs]=WREAD16(wavefile) loads a .WAV format file specified by  
  8. %       "wavefile", returning the sampled data in variable "y" and the 
  9. %       sample rate in variable "Fs".
  10. %   
  11. %   [y,Fs,Format]=WREAD16(wavefile) loads a .WAV format file specified by 
  12. %       "wavefile",returning the sampled data in variable "y", the sample 
  13. %       rate in variable "Fs", and the .WAV file format information in 
  14. %       variable "Format". The format information is returned as a 6 element
  15. %       vector with the following order:
  16. %
  17. %               Format(1)       Data format (always PCM) 
  18. %               Format(2)       Number of channels
  19. %               Format(3)       Sample Rate (Fs)
  20. %               Format(4)       Average bytes per second (sampled)
  21. %               Format(5)       Block alignment of data
  22. %               Format(6)       Bits per sample
  23. %
  24. %  
  25. % Note : WREAD16 loads 16 bit samples correctly both on PC's and Workstations, 
  26. %        where the byte orderings differ. 
  27. % Copyright (c) 1984-94 by The MathWorks, Inc.
  28. %       10:55PM  25/11/96 Modified by Ali Taylan Cemgil
  29. if nargin~=1
  30. error('WREAD16 takes one argument, which is the name of the .WAV file');
  31. end
  32. if findstr(wavefile,'.')==[]
  33. wavefile=[wavefile,'.wav'];
  34. end
  35. fid=fopen(wavefile,'rb','l');
  36. if fid ~= -1 
  37. % read riff chunk
  38. header=fread(fid,4,'uchar');
  39. header=fread(fid,1,'ulong');
  40. header=fread(fid,4,'uchar');
  41. % read format sub-chunk
  42. header=fread(fid,4,'uchar');
  43. header=fread(fid,1,'ulong');
  44. Format(1)=fread(fid,1,'ushort');       % PCM format 
  45. Format(2)=fread(fid,1,'ushort');       % 1 or 2 channel
  46. Fs=fread(fid,1,'ulong');               % samples per second
  47. Format(3)=Fs;               
  48. Format(4)=fread(fid,1,'ulong');        % average bytes per second
  49. Format(5)=fread(fid,1,'ushort');       % block alignment
  50. Format(6)=fread(fid,1,'ushort');       % bits per sample
  51. % read data sub-chunck
  52. header=fread(fid,4,'uchar');
  53. nsamples=fread(fid,1,'ulong');
  54.         if Format(2)==1                         % Mono
  55.   if Format(6)==8  
  56.              y=fread(fid,nsamples,'uchar');     % 8 bit
  57.      y=y-128;
  58.           else
  59. if strcmp(computer,'PCWIN'),
  60.              y = fread(fid,nsamples/2,'int16');  % 16 bit
  61. else
  62.      y=fread(fid,nsamples,'uchar');  % 16 bit
  63.              y = y(2:2:length(y))*256 +  y(1:2:length(y));
  64.      indx = find(y>2^15);
  65.      y(indx) = y(indx)-2^16;
  66. end;
  67.           end;
  68.           
  69. elseif Format(2)==2                     % stereo
  70.           if Format(6)==8
  71.      y=fread(fid,nsamples,'uchar');     % 8 bit
  72.      y=y-128;
  73.   else
  74. if strcmp(computer,'PCWIN'),
  75.              y = fread(fid,nsamples/2,'int16');  % 16 bit
  76. else
  77.      y=fread(fid,nsamples,'uchar');  % 16 bit
  78.              y = y(2:2:length(y))*256 +  y(1:2:length(y));
  79.      indx = find(y>2^15);
  80.      y(indx) = y(indx)-2^16;
  81. end;
  82.   end;  
  83.   
  84.           
  85.           y=y';
  86.           r1=y(1:2:(nsamples-1)/2);
  87.   l1=y(2:2:nsamples/2);    
  88.           y=[r1;l1];
  89.         end;     
  90.     
  91. fclose(fid);
  92. end     
  93.  
  94. if fid == -1
  95. error('Can''t open .WAV file for input!');
  96. end;