TEAP (Toolbox for Emotion Analysis using Physiological Signals) doc
openiff.m
Go to the documentation of this file.
1 function [IFF]=openiff(fid,LEN)
2 % OPENIFF is an auxillary function to SOPEN for
3 % opening of IFF files
4 %
5 % Use SOPEN instead of OPENIFF
6 %
7 % See also: fopen, SOPEN
8 %
9 % References:
10 
11 % This program is free software; you can redistribute it and/or
12 % modify it under the terms of the GNU General Public License
13 % as published by the Free Software Foundation; either version 3
14 % of the License, or (at your option) any later version.
15 
16 % $Id: openiff.m 2205 2009-10-27 12:18:15Z schloegl $
17 % Copyright (C) 2004,2005,2007 by Alois Schloegl <a.schloegl@ieee.org>
18 % This is part of the BIOSIG-toolbox http://biosig.sf.net/
19 
20 
21 FLAG.CLOSE = 0;
22 if ischar(fid)
23  fid = fopen(fid,'r');
24  FLAG.CLOSE = 1;
25 end;
26 
27 if nargin<2,
28  LEN = 8;
29 end;
30 
31 IFF = [];
32 K = 0;
33 K1 = 0;
34 
35 [tmp,c] = fread(fid,[1,4],'uint8');
36 while ((LEN>0) | isnan(LEN)) & (c>0),
37  tag = char(tmp);
38  tagsize = fread(fid,1,'uint32'); % which size
39  tagsize0= tagsize + rem(tagsize,2);
40  filepos = ftell(fid);
41  LEN = LEN - 8;
42 
43 % fprintf(1,'tag: %6s\tpos: %8i\tsize: %8i\n',tag,filepos,tagsize);
44 
45  if 0,
46  VAL = openiff(fid,tagsize);
47  elseif strcmp(tag,'FORM')
48  [tmp,c] = fread(fid,[1,4],'uint8');tag,
49  VAL = setfield([],char(tmp),openiff(fid,tagsize-4));
50  elseif 0,strcmp(tag,'RIFF')
51  VAL = openiff(fid,tagsize);
52  elseif strcmp(tag,'RIFF')
53  [tmp,c] = fread(fid,[1,4],'uint8');
54  %val = fread(fid,tagsize-4,'uint8');
55  val = openiff(fid,tagsize-4);
56  VAL = setfield([],char(tmp),val);
57  elseif strcmp(tag,'MThd')
58  VAL.MThd = fread(fid,tagsize,'uchar');
59  VAL.MIDI = openiff(fid,NaN);
60  %LEN = NaN;
61  %VAL.MIDI = tmp;
62 
63  elseif strcmp(tag,'LIST'); % CNT_RIFF (EEP 3.1)
64  [tmp,c] = fread(fid,[1,4],'uint8');
65  VAL = setfield([],char(tmp),openiff(fid,tagsize-4));
66 
67  elseif strcmp(tag,'chan') % CNT_RIFF (EEP 3.1)
68  VAL = fread(fid,[1,tagsize/2],'uint16');
69  elseif strcmp(tag,'info') % CNT_RIFF (EEP 3.1)
70  VAL = fread(fid,[1,tagsize],'*char');
71  elseif strcmp(tag,'eeph') % CNT_RIFF (EEP 3.1)
72  VAL = fread(fid,[1,tagsize],'*char');
73  elseif strncmp(tag,'ep ',4), % CNT_RIFF (EEP 3.1)
74  VAL = fread(fid,[1,tagsize/4],'uint32');
75  elseif strcmp(tag,'hdrl')
76  [tmp,c] = fread(fid,[1,4],'uint8');
77  VAL = setfield([],char(tmp),openiff(fid,tagsize-4));
78 
79  elseif strcmp(tag,'CAT ')
80  VAL = openiff(fid,tagsize);
81 
82  elseif strcmp(tag,'data')
83  % LEN = fread(fid,1,'uint32');
84  VAL = fread(fid,[1,LEN],'*uint8');
85  %[tmp,c] = fread(fid,[1,4],'*char');
86  %LEN = fread(fid,1,'int32');
87  %VAL.data = fread(fid,LEN,'uint8');
88  %VAL = openiff(fid,tagsize);
89  elseif strncmp(tag,'(c)',3)
90  tag = 'Copyright';
91  VAL = char(fread(fid,tagsize,'uchar')');
92  %VAL.CopyRight = char(VAL);
93  else
94  if 0,tagsize<1024*2,
95  VAL = fread(fid,tagsize,'uchar');
96  else
97  VAL = [];
98  VAL.handle = ftell(fid);
99  VAL.size = tagsize;
100  status = fseek(fid,tagsize,'cof');
101  if status, return; end;
102  end
103  end;
104 
105  if strcmp(tag(3:4),'dc')
106  K = K+1;
107  ix = (tag(1:2)-48)*[16;1]+1;
108  IFF.dc{K,ix} = VAL;
109  elseif strcmp(tag(3:4),'wb')
110  K1 = K1+1;
111  ix = (tag(1:2)-48)*[16;1]+1;
112  IFF.wb{K1,ix} = VAL;
113  else
114  %try,
115  IFF = setfield(IFF,deblank(tag),VAL);
116  %catch,
117  %end;
118  end;
119  status = fseek(fid,filepos+tagsize0,'bof');
120  LEN = LEN - tagsize0;
121  [tmp,c] = fread(fid,[1,4],'uint8');
122 end;
123 
124 if ~isfield(IFF,'MThd'), % do not check MIDI files
125  if ((LEN ~= 0) & c),
126  fprintf(2,'Warning OPENIFF: LEN=%i %i %i %i %s %i\n',LEN,filepos,tagsize0,ftell(fid),char(tmp),c);
127  end;
128 end;
129 
130 if FLAG.CLOSE,
131  fclose(fid);
132 end;
openiff
function openiff(in fid, in LEN)