annotate aim-mat/tools/aifcwrite.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
bleeck@3 9
tomwalters@0 10
tomwalters@0 11 function ok=aifcwrite(x,fs,nbits,fname)
tomwalters@0 12
tomwalters@0 13 % function ok=aiffwrite(x,fs,nbits,fname)
tomwalters@0 14 % Write AIFF and AIFF-C file
tomwalters@0 15 % This is a reduced version and does not fulfill the
tomwalters@0 16 % AIFF-C standard.
tomwalters@0 17
tomwalters@0 18 % Coded by Hideki Kawahara based on "Audio Interchange file format AIFF-C draft"
tomwalters@0 19 % by Apple Computer inc. 8/26/91
tomwalters@0 20 % 14/Feb./1998
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');
tomwalters@0 34 fwrite(fid,'FORM','char')
tomwalters@0 35 cksize=82+nr*nc*(nbits/8);
tomwalters@0 36 fwrite(fid,cksize,'int32');
tomwalters@0 37 fwrite(fid,'AIFC','char');
tomwalters@0 38
tomwalters@0 39 fwrite(fid,'FVER','char');
tomwalters@0 40 fwrite(fid,4,'int32');
tomwalters@0 41 fwrite(fid,2726318400,'uint32');
tomwalters@0 42
tomwalters@0 43 fwrite(fid,'COMM','char');
tomwalters@0 44 fwrite(fid,38,'int32');
tomwalters@0 45 fwrite(fid,nc,'int16');
tomwalters@0 46 fwrite(fid,nr,'int32');
tomwalters@0 47 fwrite(fid,nbits,'int16');
tomwalters@0 48 fwrite(fid,nex2,'uint16');
tomwalters@0 49 fwrite(fid,vv,'uint64');
tomwalters@0 50 fwrite(fid,'NONE','char');
tomwalters@0 51 fwrite(fid,14,'uint8');
tomwalters@0 52 fwrite(fid,'not compressed','char');
tomwalters@0 53 fwrite(fid,0,'char');
tomwalters@0 54
tomwalters@0 55 fwrite(fid,'SSND','char');
tomwalters@0 56 fwrite(fid,nr*nc*(nbits/8)+8,'int32');
tomwalters@0 57 fwrite(fid,0,'int32');
tomwalters@0 58 fwrite(fid,0,'int32');
tomwalters@0 59 y=x';
tomwalters@0 60 switch(nbits)
tomwalters@0 61 case 8
tomwalters@0 62 fwrite(fid,y(:),'int8');
tomwalters@0 63 case 16
tomwalters@0 64 fwrite(fid,y(:),'int16');
tomwalters@0 65 end;
tomwalters@0 66 fclose(fid);
tomwalters@0 67