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
|