Chris@0: function [f_audio,sideinfo] = wav_to_audio(dirAbs,dirRel,wavfilename,parameter) Chris@0: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Chris@0: % Name: wav_to_audio Chris@0: % Date of Revision: 2011-03 Chris@0: % Programmer: Meinard Mueller, Sebastian Ewert Chris@0: % Chris@0: % Description: Chris@0: % Loads a Wav file and fills a sideinfo variable according to AGtoolbox Chris@0: % specifications. Resampling and single channel conversion is default, but Chris@0: % optional. Chris@0: % Chris@0: % Input: Chris@0: % dirAbs Chris@0: % dirRel Chris@0: % wavfilename Chris@0: % parameter.useResampling = 1; Chris@0: % parameter.destSamplerate = 22050; Chris@0: % parameter.convertToMono = 1; Chris@0: % parameter.monoConvertMode = 'downmix'; Chris@0: % parameter.message = 0; Chris@0: % parameter.vis = 0; Chris@0: % parameter.save = 0; Chris@0: % parameter.saveDir = [dirAbs,dirRel]; Chris@0: % parameter.saveFilename = wavfilename; Chris@0: % Chris@0: % Output: Chris@0: % f_audio Chris@0: % sideinfo.wav.version Chris@0: % sideinfo.wav.filename Chris@0: % sideinfo.wav.dirRel Chris@0: % sideinfo.wav.size Chris@0: % sideinfo.wav.duration Chris@0: % sideinfo.wav.energy Chris@0: % sideinfo.wav.fs Chris@0: % sideinfo.wav.nbits Chris@0: % sideinfo.wav.channels Chris@0: % sideinfo.wav.resampled Chris@0: % sideinfo.wav.monoConverted Chris@0: % sideinfo.wav.monoConvertMode Chris@0: % Chris@0: % Chris@0: % License: Chris@0: % This file is part of 'Chroma Toolbox'. Chris@0: % Chris@0: % 'Chroma Toolbox' is free software: you can redistribute it and/or modify Chris@0: % it under the terms of the GNU General Public License as published by Chris@0: % the Free Software Foundation, either version 2 of the License, or Chris@0: % (at your option) any later version. Chris@0: % Chris@0: % 'Chroma Toolbox' is distributed in the hope that it will be useful, Chris@0: % but WITHOUT ANY WARRANTY; without even the implied warranty of Chris@0: % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Chris@0: % GNU General Public License for more details. Chris@0: % Chris@0: % You should have received a copy of the GNU General Public License Chris@0: % along with 'Chroma Toolbox'. If not, see . Chris@0: % Chris@0: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Chris@0: Chris@0: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Chris@0: % Check parameters Chris@0: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Chris@0: Chris@0: if nargin<4 Chris@0: parameter=[]; Chris@0: end Chris@0: if nargin<3 Chris@0: error('Please specify at least the path and filename of the wav file') Chris@0: end Chris@0: Chris@0: if isfield(parameter,'useResampling')==0 Chris@0: parameter.useResampling = 1; Chris@0: end Chris@0: if isfield(parameter,'destSamplerate')==0 Chris@0: parameter.destSamplerate = 22050; Chris@0: end Chris@0: if isfield(parameter,'convertToMono')==0 Chris@0: parameter.convertToMono = 1; Chris@0: end Chris@0: if isfield(parameter,'monoConvertMode')==0 Chris@0: parameter.monoConvertMode = 'downmix'; Chris@0: end Chris@0: if isfield(parameter,'message')==0 Chris@0: parameter.message = 0; Chris@0: end Chris@0: if isfield(parameter,'vis')==0 Chris@0: parameter.vis = 0; Chris@0: end Chris@0: if isfield(parameter,'save')==0 Chris@0: parameter.save = 0; Chris@0: end Chris@0: if isfield(parameter,'saveDir')==0 Chris@0: parameter.saveDir = [dirAbs,dirRel]; Chris@0: end Chris@0: if isfield(parameter,'saveFilename')==0 Chris@0: parameter.saveFilename = wavfilename; Chris@0: end Chris@0: Chris@0: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Chris@0: % Main program Chris@0: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Chris@0: if parameter.message == 1 Chris@0: fprintf('wav_to_audio: processing %s, ',wavfilename); Chris@0: end Chris@0: Chris@0: [pathstr,name,ext] = fileparts(wavfilename); Chris@0: if strcmp(ext,'.wav') Chris@0: [f_audio,fs,nbits] = wavread(strcat(dirAbs,dirRel,wavfilename)); Chris@0: else Chris@0: error(['Unknown file format ' ext]); Chris@0: end Chris@0: Chris@0: Chris@0: bConverted_to_mono = 0; Chris@0: if parameter.convertToMono Chris@0: if size(f_audio,2)>1 Chris@0: bConverted_to_mono = 1; Chris@0: if parameter.message == 1 Chris@0: fprintf('converting to mono, '); Chris@0: end Chris@0: switch parameter.monoConvertMode Chris@0: case 'leftmost_channel' Chris@0: f_audio= f_audio(:,1); Chris@0: case 'rightmost_channel' Chris@0: f_audio= f_audio(:,size(f_audio,2)); Chris@0: case 'downmix' Chris@0: % pay attention to energy loss due to differences in phase Chris@0: % when using this method. This is often the case for bad Chris@0: % stereo mixes Chris@0: nChannels = size(f_audio,2); Chris@0: Chris@0: f_audio = sum(f_audio,2); Chris@0: f_audio = f_audio / nChannels; Chris@0: otherwise Chris@0: disp('wav_to_audio: monoConvertMode : Unknown method') Chris@0: end Chris@0: end Chris@0: end Chris@0: Chris@0: bResampled = 0; Chris@0: if parameter.useResampling Chris@0: if (fs ~= parameter.destSamplerate) Chris@0: bResampled = 1; Chris@0: if parameter.message == 1 Chris@0: fprintf('Resampling to %d, ', parameter.destSamplerate); Chris@0: end Chris@0: f_audio = resample (f_audio,parameter.destSamplerate,fs,100); Chris@0: fs = parameter.destSamplerate; Chris@0: end Chris@0: end Chris@0: Chris@0: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Chris@0: % Update sideinfo Chris@0: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Chris@0: sideinfo.wav.version = 1; Chris@0: sideinfo.wav.filename = wavfilename; Chris@0: sideinfo.wav.dirRel = dirRel; Chris@0: sideinfo.wav.size = size(f_audio,1); Chris@0: sideinfo.wav.duration = (sideinfo.wav.size-1)/fs; Chris@0: sideinfo.wav.energy = sum(f_audio.^2); Chris@0: sideinfo.wav.fs = fs; Chris@0: sideinfo.wav.nbits = nbits; Chris@0: sideinfo.wav.channels = size(f_audio,2); Chris@0: sideinfo.wav.resampled = bResampled; Chris@0: sideinfo.wav.monoConverted = bConverted_to_mono; Chris@0: if bConverted_to_mono Chris@0: sideinfo.wav.monoConvertMode = parameter.monoConvertMode; Chris@0: else Chris@0: sideinfo.wav.monoConvertMode = 'none'; Chris@0: end Chris@0: Chris@0: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Chris@0: % Saving data Chris@0: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Chris@0: if parameter.save == 1 Chris@0: if parameter.message == 1 Chris@0: fprintf('Saving to file, '); Chris@0: end Chris@0: filename = strcat(parameter.saveFilename,'_audio'); Chris@0: save(strcat(parameter.saveDir,filename),'f_audio','sideinfo'); Chris@0: end Chris@0: Chris@0: if parameter.message == 1 Chris@0: fprintf('Done\n'); Chris@0: end Chris@0: Chris@0: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Chris@0: % Visualization Chris@0: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Chris@0: if parameter.vis Chris@0: figure; Chris@0: for k=1:sideinfo.wav.channels Chris@0: if sideinfo.wav.channels > 1 Chris@0: subplot(sideinfo.wav.channels,1,k); Chris@0: end Chris@0: plot( [0:sideinfo.wav.size-1] / sideinfo.wav.fs , f_audio(:,k)); Chris@0: axis tight; Chris@0: end Chris@0: end Chris@0: Chris@0: end