Mercurial > hg > camir-aes2014
diff toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirread.m @ 0:e9a9cd732c1e tip
first hg version after svn
author | wolffd |
---|---|
date | Tue, 10 Feb 2015 15:05:51 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirread.m Tue Feb 10 15:05:51 2015 +0000 @@ -0,0 +1,138 @@ +function [d,tp,fp,f,b,n,ch] = mirread(extract,orig,load,folder,verbose) +% Read the audio file ORIG, at temporal position indicated by EXTRACT. If +% EXTRACT is empty, all the audio file is loaded. +% If LOAD is set to 0, just the meta-data is collected, and the actual +% audio data is not taken into consideration. If it is set to 1, the +% data are loaded from the current directory. If LOAD is a string, it +% is considered as the path of the directory. +% If FOLDER is set to 1, no error is returned if an audio file cannot be +% loaded. +% Output: +% D is the audio signal, +% TP are the temporal positions, +% FP are the two extreme temporal positions (used for frame positions), +% F is the sampling rate, +% B is the resolution in number of bits, +% N is the file name. +% CH are the channel index. + +if nargin < 5 + verbose = 0; +end +d = {}; +f = {}; +b = {}; +tp = {}; +fp = {}; +n = {}; +ch = {}; +try + [d,f,b,tp,fp,n,ch] = audioread(extract,@wavread,orig,load,verbose,folder); +catch + err.wav = lasterr; + try + [d,f,b,tp,fp,n,ch] = audioread(extract,@auread,orig,load,verbose,folder); + catch + err.au = lasterr; + try + [d,f,b,tp,fp,n,ch] = audioread(extract,@mp3read,orig,load,verbose,folder); + catch + err.mp3 = lasterr; + try + [d,f,b,tp,fp,n,ch] = audioread(extract,@aiffread,orig,load,verbose,folder); + catch + err.aiff = lasterr; + if length(orig)>4 && strcmpi(orig(end-3:end),'.bdf') + try + [d,f,b,tp,fp,n,ch] = audioread(extract,@bdfread,orig,load,verbose,folder); + catch + if not(strcmp(err.wav(1:16),'Error using ==> ') && folder) + misread(orig, err); + end + end + else + if not(strcmp(err.wav(1:16),'Error using ==> ') && folder) + misread(orig, err); + end + end + end + end + end +end + + +function [d,f,b,tp,fp,n,ch] = audioread(extract,reader,file,load,verbose,folder) +n = file; +if folder + file = ['./',file]; +end +if load + if isempty(extract) + [s,f,b] = reader(file); + else + [unused,f,b] = reader(file,1); + s = reader(file,extract(1:2)); + if length(extract) > 3 + s = s(:,extract(4)); + end + end + if verbose + disp([file,' loaded.']); + end + d{1} = reshape(s,size(s,1),1,size(s,2)); %channels along dim 3 + ch = 1:size(s,2); + if isempty(extract) || extract(3) + tp{1} = (0:size(s,1)-1)'/f; + else + tp{1} = (extract(1)-1+(0:size(s,1)-1))'/f; + end + if isempty(s) + fp{1} = 0; + else + fp{1} = tp{1}([1 end]); + end +else + [unused,f,b] = reader(file,1); + dsize = reader(file,'size'); + d = dsize(1); + tp = {}; + fp = {}; + ch = dsize(2); +end + + +function [y,fs,nbits] = bdfread(file,check) +DAT = openbdf(file); +NRec = DAT.Head.NRec; +if not(length(check)==2) + b = readbdf(DAT,1); + y = length(b.Record(43,:)) * NRec; +else + y = []; + if mirwaitbar + handle = waitbar(0,'Loading BDF channel...'); + else + handle = 0; + end + for i = 1:NRec + b = readbdf(DAT,i); + y = [y;b.Record(43,:)']; + if handle + waitbar(i/NRec,handle); + end + end + if handle + delete(handle) + end +end +fs = DAT.Head.SampleRate(43); +nbits = NaN; + + +function misread(file,err) +display('Here are the error message returned by each reader:'); +display(err.wav); +display(err.au); +display(err.mp3); +display(err.aiff); +mirerror('MIRREAD',['Cannot open file ',file]); \ No newline at end of file