www.pudn.com > LPCToolbox.rar > READDAT.M


> readdat(filelist)
>
> READDAT takes a list of sound filenames and collates the
> information from the DAT files of the sounds. The information is
> written to LPCINFO.CSV (a comma-separated-value file), which
> can be imported into spreadsheet and statistical programs like
> MS-Excel, SPSS, and SAS. Each line of the CSV file ("one record")
> contains info from one file; the first field is the sound filename.
> The first line of the file gives the labels of the fields.
>
> filelist: the list of sound filenames (can be a array of strings,
> or a cell. If a single filename is given and it has an extension of
> .DAT or .TXT, it is taken to be a file containing the list of
> sound filenames (one on each line). Basically, this parameter
> any file specification that is accepted by LPCTOOL.
>
> [fnamelist, info, key] = readdat(filelist)
>
> If READDAT is invoked as above, the collected information is NOT written
> to LPCINFO.CSV, but is instead returned in the three variables.
>
> info: an MxN matrix, where M=# of DAT files that were successfully
> read, N=# of fields read from a single DAT file.
>
> key: cell array of length N. key{i} is the label for the i'th field.
>
> fnamelist: cell array of length M. fnamelist{i} is the name of the
> i'th soundfile whose DAT file was successfully read in.
>
> Gautam Vallabha (vallabha@walt.ccs.fau.edu), NOV-20-2000
> Center for Complex Systems, Florida Atlantic University.

function [fnamelistx,infox,keyx] = readdat(filelst);

if nargout > 0
fnamelistx={}; infox=[]; keyx={};
end

Filelist = loadfilelist(filelst);
if length(Filelist)==0,
fprintf(1, 'No sound files!\n');
return;
end

fnamelist = {}; info=[];
for i=1:length(Filelist),
[sndfilename, datfilename, ext] = fixfilename(Filelist{i});
ret = readfile(datfilename);
if ~isempty(ret),
info(end+1,:) = ret;
fnamelist{end+1} = sndfilename;
end
end

> the filename field is a hack for writecsv
key = {'Filename', ...
'Starting frame', 'Ending frame', ...
'Sampling rate', 'Analysis window', 'Update', 'Preemphasis', ...
'Hamming', 'filter order', 'FFT length', '3-point interp', ...
'Mean F1', 'Mean F2', 'Mean F3' };

if nargout == 0,
writecsv(key, fnamelist, info, 'lpcinfo.csv');
else
fnamelistx = fnamelist; infox = info;
keyx = {key{2:end}}; > remove the hacked first field
end

>---------------------------

function [ret] = readfile(fname)

ret = [];
fid = fopen(fname, 'r');
if fid < 0,
fprintf(1, 'Unable to open >s\n', fname);
return;
end

s = [];
while isempty(s), s = fgetl(fid); end
d1 = sscanf(s, 'Frames: >d - >d');
nframes = d1(2) - d1(1) + 1;

s = fgetl(fid);
d2 = sscanf(s, 'p: sf=>d aw=>d cw=>d pr=>f');

s = fgetl(fid);
d3 = sscanf(s, 'p: hm=>d nc=>d fft=>d tpi=>d');


fmts = zeros(3,nframes);
for i=1:nframes,
s = fgetl(fid);
fmts(:,i) = sscanf(s, 'f: >d >d >d');
end
dd = round(mean(fmts,2));

ret = [d1(:) ; d2(:) ; d3(:) ; dd(:)].';

fclose(fid);

>---------------------------

function writecsv(key, fnamelist, info, outfname)

fid = fopen(outfname, 'w');
if fid < 0,
fprintf(1, 'Unable to open >s', outfname); return;
end

for i=1:length(key)-1, fprintf(fid, '>s,', key{i}); end
fprintf(fid, '>s\n', key{end});

for i=1:size(info,1),
> fprintf(fid, '>s,>d,>d, >d,>d,>d,>f, >d,>d,>d,>d, >d,>d,>d\n', ...
> fnamelist{i}, info(i,:));

fprintf(fid, '>s,', fnamelist{i});
fprintf(fid, '>f,', info(i,1:end-1));
fprintf(fid, '>f\n', info(i,end));
end

fclose(fid);

fprintf(1, 'Output written to >s\n', outfname);