annotate audio/@wavdata/wavdata.m @ 61:eff6bddf82e3 tip

Finally implemented perceptual brightness thing.
author samer
date Sun, 11 Oct 2015 10:20:42 +0100
parents f7fb679637ff
children
rev   line source
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