% - - - - - - - - - - ~/matlab/sws-1996aug/readswi.m - - - - - - - - - -
function [F,M] = readswi(NAME)
% [F,M] = readswi(NAME) Read a Haskins-format sinewave speech data file
% NAME is the name of a text data file containing the frequency
% and magnitude parameters for sinewave synthesis. Result is
% F and M matrices suitable for synthtrax.m
% dpwe@icsi.berkeley.edu 1996aug22
%
% SWI files are downloaded from
% http://www.haskins.yale.edu/Haskins/MISC/SWS/sentences.html
% and have the format:
% Number of oscillators
% Time0
% frq,mag for 1st oscillator
% frq,mag for 2nd oscillator
% .. for as many oscillators as specified
% Time1
% frq,mag ... etc.
% Times are in ms, frq in Hz, mag in linear units
%
% Here, we're assuming the times are uniformly spaced, and it is
% up to the user to know the correct interpolation factor to
% give to synthtrax.
%
% BE SURE TO TRIM OFF THE TEXT AT THE TOP AND BOTTOM OF THE FILES
% IF YOU SAVE DIRECTLY FROM THE WEB PAGES!
colchunk = 100;
col = 0;
fid = fopen(NAME, 'r');
if (fid == -1)
fprintf(1, 'readswi: unable to read %s\n', NAME);
else
nOscs = fscanf(fid, '%d', 1);
% Increase the arrays in chunks of colchunk cols to avoid slow
% matrix growing.
emptyF = zeros(nOscs, colchunk);
F = emptyF;
M = emptyF;
Fcols = colchunk;
endoffile = 0;
while (endoffile == 0)
[time,count] = fscanf(fid, '%f', 1);
if (count == 0)
endoffile = 1;
else
col = col+1;
if(col > Fcols)
% We ran out of empty columns - grow the matrices
F = [F, emptyF];
M = [M, emptyF];
Fcols = Fcols + colchunk;
end
for osc = 1:nOscs
F(osc,col) = fscanf(fid, '%f,', 1);
M(osc,col) = fscanf(fid, '%f',1);
end
end
end
fclose(fid);
% Trim off excess empty columns
F = F(:,1:col);
M = M(:,1:col);
end