samer@10: % wavdata - fsignal object for functional access to WAV file samer@10: % samer@10: % wavdata :: string ~'file name', samer@10: % -> fsignal(R,C) ~'functional signal at some rate R with C channels'. samer@10: classdef wavdata < fsignal samer@10: properties (GetAccess=public, SetAccess=immutable) samer@10: file samer@10: end samer@10: methods samer@10: function a=wavdata(fn) samer@10: sz = mywavread(fn,'size'); samer@10: [y,fs] = mywavread(fn,[1 1]); samer@10: a=a@fsignal(fs, sz(2), floor(sz(1))); samer@10: a.file = fn; samer@10: end samer@10: samer@10: function X=data(a), X=mywavread(a.file)'; end samer@10: function s=tostring(a), s=sprintf('wavdata(''%s'')', a.file); end samer@10: samer@10: function y=extract(a,dim,range) samer@10: if dim~=2, error('Can only subrange times, not channels'); end samer@10: y=mywavread(a.file,range)'; samer@10: end samer@10: end samer@10: end samer@10: samer@10: % mywavread - wrapper around wavread to handle extensionless files samer@10: % samer@10: % See WAVREAD for usage. samer@10: % Note: this only works on systems which have file system links samer@10: function varargout=mywavread(file,varargin) samer@10: varargout=cell(nargout); samer@10: if ~isempty(strfind(file,'.')) % has extension samer@10: [varargout{:}]=wavread(file,varargin{:}); samer@10: else samer@10: tmp=uniquefile(0,pwd,'','_tmp%s.wav'); % temp file in current directory samer@10: system(['ln -s "' file '" ' tmp]); samer@10: [varargout{:}]=wavread(tmp,varargin{:}); samer@10: system(['rm ' tmp]); samer@10: end samer@10: end samer@10: