samer@10
|
1 % wavdata - fsignal object for functional access to WAV file
|
samer@10
|
2 %
|
samer@10
|
3 % wavdata :: string ~'file name',
|
samer@10
|
4 % -> fsignal(R,C) ~'functional signal at some rate R with C channels'.
|
samer@10
|
5 classdef wavdata < fsignal
|
samer@10
|
6 properties (GetAccess=public, SetAccess=immutable)
|
samer@10
|
7 file
|
samer@10
|
8 end
|
samer@10
|
9 methods
|
samer@10
|
10 function a=wavdata(fn)
|
samer@10
|
11 sz = mywavread(fn,'size');
|
samer@10
|
12 [y,fs] = mywavread(fn,[1 1]);
|
samer@10
|
13 a=a@fsignal(fs, sz(2), floor(sz(1)));
|
samer@10
|
14 a.file = fn;
|
samer@10
|
15 end
|
samer@10
|
16
|
samer@10
|
17 function X=data(a), X=mywavread(a.file)'; end
|
samer@10
|
18 function s=tostring(a), s=sprintf('wavdata(''%s'')', a.file); end
|
samer@10
|
19
|
samer@10
|
20 function y=extract(a,dim,range)
|
samer@10
|
21 if dim~=2, error('Can only subrange times, not channels'); end
|
samer@10
|
22 y=mywavread(a.file,range)';
|
samer@10
|
23 end
|
samer@10
|
24 end
|
samer@10
|
25 end
|
samer@10
|
26
|
samer@10
|
27 % mywavread - wrapper around wavread to handle extensionless files
|
samer@10
|
28 %
|
samer@10
|
29 % See WAVREAD for usage.
|
samer@10
|
30 % Note: this only works on systems which have file system links
|
samer@10
|
31 function varargout=mywavread(file,varargin)
|
samer@10
|
32 varargout=cell(nargout);
|
samer@10
|
33 if ~isempty(strfind(file,'.')) % has extension
|
samer@10
|
34 [varargout{:}]=wavread(file,varargin{:});
|
samer@10
|
35 else
|
samer@10
|
36 tmp=uniquefile(0,pwd,'','_tmp%s.wav'); % temp file in current directory
|
samer@10
|
37 system(['ln -s "' file '" ' tmp]);
|
samer@10
|
38 [varargout{:}]=wavread(tmp,varargin{:});
|
samer@10
|
39 system(['rm ' tmp]);
|
samer@10
|
40 end
|
samer@10
|
41 end
|
samer@10
|
42
|