annotate aim-mat/tools/aiffwrite.m @ 4:537f939baef0 tip

various bug fixes and changed copyright message
author Stefan Bleeck <bleeck@gmail.com>
date Tue, 16 Aug 2011 14:37:17 +0100
parents 20ada0af3d7d
children
rev   line source
tomwalters@0 1 % support file for 'aim-mat'
tomwalters@0 2 %
tomwalters@0 3 % This external file is included as part of the 'aim-mat' distribution package
bleeck@3 4 % (c) 2011, University of Southampton
bleeck@3 5 % Maintained by Stefan Bleeck (bleeck@gmail.com)
bleeck@3 6 % download of current version is on the soundsoftware site:
bleeck@3 7 % http://code.soundsoftware.ac.uk/projects/aimmat
bleeck@3 8 % documentation and everything is on http://www.acousticscale.org
tomwalters@0 9
tomwalters@0 10 function ok=aiffwrite(x,fs,nbits,fname)
tomwalters@0 11
tomwalters@0 12 % function ok=aiffwrite(x,fs,nbits,fname)
tomwalters@0 13 % Write AIFF file
tomwalters@0 14 % This is a reduced version and does not fulfill the
tomwalters@0 15 % AIFF standard.
tomwalters@0 16
tomwalters@0 17 % Coded by Hideki Kawahara based on "Audio Interchange file format AIFF-C draft"
tomwalters@0 18 % by Apple Computer inc. 8/26/91
tomwalters@0 19 % 14/Feb./1998
tomwalters@0 20 % 14/Jan./1999 bug fix for Windows
tomwalters@0 21
tomwalters@0 22 ok=1;
tomwalters@0 23 [nr,nc]=size(x);
tomwalters@0 24 if nc>nr
tomwalters@0 25 ok=[];
tomwalters@0 26 disp('Data must be a set of column vector.');
tomwalters@0 27 return;
tomwalters@0 28 end;
tomwalters@0 29 nex=floor(log(fs)/log(2));
tomwalters@0 30 vv=fs/2^(nex+1)*2^(4*16);
tomwalters@0 31 nex2=nex+16383;
tomwalters@0 32
tomwalters@0 33 fid=fopen(fname,'w','ieee-be.l64');
tomwalters@0 34 fwrite(fid,'FORM','char');
tomwalters@0 35 cksize=46+nr*nc*(nbits/8);
tomwalters@0 36 fwrite(fid,cksize,'int32');
tomwalters@0 37 fwrite(fid,'AIFF','char');
tomwalters@0 38
tomwalters@0 39 fwrite(fid,'COMM','char');
tomwalters@0 40 fwrite(fid,18,'int32');
tomwalters@0 41 fwrite(fid,nc,'int16');
tomwalters@0 42 fwrite(fid,nr,'int32');
tomwalters@0 43 fwrite(fid,nbits,'int16');
tomwalters@0 44 fwrite(fid,nex2,'uint16');
tomwalters@0 45 fwrite(fid,vv,'uint64');
tomwalters@0 46
tomwalters@0 47 fwrite(fid,'SSND','char');
tomwalters@0 48 fwrite(fid,nr*nc*(nbits/8)+8,'int32');
tomwalters@0 49 fwrite(fid,0,'int32');
tomwalters@0 50 fwrite(fid,0,'int32');
tomwalters@0 51 y=x';
tomwalters@0 52 switch(nbits)
tomwalters@0 53 case 8
tomwalters@0 54 fwrite(fid,y(:),'int8');
tomwalters@0 55 case 16
tomwalters@0 56 fwrite(fid,y(:),'int16');
tomwalters@0 57 case 24
tomwalters@0 58 fwrite(fid,y(:),'bit24');
tomwalters@0 59 end;
tomwalters@0 60 fclose(fid);
tomwalters@0 61