matthiasm@8: % matthiasm@8: %DEGREES2SEMITONES convert a degree list to an array of semitone values matthiasm@8: % matthiasm@8: % [semitones, success, errormessage] = degrees2semitones(degreelist, {verbose}) matthiasm@8: % matthiasm@8: % Converts a list of degrees to corresponding semitone intervals matthiasm@8: % matthiasm@8: % Success = 1 if symbols parsed correctly, 0 otherwise. matthiasm@8: % matthiasm@8: % If optional argument 'verbose' is 1, function prints any errormessage to matthiasm@8: % the screen. matthiasm@8: % matthiasm@8: % calls degree2semitone matthiasm@8: % matthiasm@8: % returns: semitones (array of integers) matthiasm@8: % success (boolean) matthiasm@8: % errormessage (string) matthiasm@8: % matthiasm@8: % matthiasm@8: % Author: Christopher Harte, August 2005 matthiasm@8: % matthiasm@8: % Copyright: Centre for Digital Music, Queen Mary University of London 2005 matthiasm@8: % matthiasm@8: % This file is part of the C4DM Chord Toolkit. matthiasm@8: % matthiasm@8: % The C4DM Chord Toolkit is free software; you can redistribute it and/or matthiasm@8: % modify it under the terms of the GNU General Public License as published matthiasm@8: % by the Free Software Foundation; either version 2 of the License, or matthiasm@8: % (at your option) any later version. matthiasm@8: % matthiasm@8: % The C4DM Chord Toolkit is distributed in the hope that it will be useful, matthiasm@8: % but WITHOUT ANY WARRANTY; without even the implied warranty of matthiasm@8: % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the matthiasm@8: % GNU General Public License for more details. matthiasm@8: % matthiasm@8: % You should have received a copy of the GNU General Public License matthiasm@8: % along with the C4DM Toolkit; if not, write to the Free Software matthiasm@8: % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA matthiasm@8: % matthiasm@8: matthiasm@8: function [semitones, success, errormessage] = degrees2semitones(degreelist, verbose) matthiasm@8: matthiasm@8: % set verbose default to 0 matthiasm@8: if nargin < 2 matthiasm@8: verbose = 0; matthiasm@8: end matthiasm@8: matthiasm@8: errormessage = ''; matthiasm@8: matthiasm@8: ilength = length(degreelist); matthiasm@8: matthiasm@8: index = 1; matthiasm@8: matthiasm@8: tempindex = 1; matthiasm@8: matthiasm@8: tempstring = ''; matthiasm@8: matthiasm@8: success = 1; matthiasm@8: matthiasm@8: parindex = 1; matthiasm@8: matthiasm@8: semitones = []; matthiasm@8: matthiasm@8: matthiasm@8: while index <= ilength matthiasm@8: matthiasm@8: matthiasm@8: while (degreelist(index) ~= ',') matthiasm@8: matthiasm@8: tempstring(tempindex) = degreelist(index); matthiasm@8: tempindex = tempindex +1; matthiasm@8: index = index + 1; matthiasm@8: matthiasm@8: if(index > ilength) matthiasm@8: break; matthiasm@8: end matthiasm@8: matthiasm@8: if (degreelist(index) == ',') && (index == ilength) matthiasm@8: success = 0; matthiasm@8: errormessage = sprintf(['Error in degrees2semitones: degree list finishes with a comma "' degreelist '"\n']); matthiasm@8: end matthiasm@8: matthiasm@8: matthiasm@8: end matthiasm@8: matthiasm@8: [semitones(parindex),ok, error] = degree2semitone(tempstring); matthiasm@8: % concatenate error messages if there are any... matthiasm@8: errormessage = [errormessage error]; matthiasm@8: matthiasm@8: if(ok == 1) matthiasm@8: tempstring = ''; matthiasm@8: tempindex = 1; matthiasm@8: parindex = parindex + 1; matthiasm@8: index = index + 1; matthiasm@8: else matthiasm@8: matthiasm@8: errormessage = [errormessage sprintf(['Error in degrees2semitones: incorrect degree in list "' degreelist '"\n'])]; matthiasm@8: success = 0; matthiasm@8: index = ilength +1; matthiasm@8: end matthiasm@8: matthiasm@8: matthiasm@8: end matthiasm@8: matthiasm@8: if (success == 0) && (verbose == 1) matthiasm@8: matthiasm@8: fprintf(1,errormessage) matthiasm@8: matthiasm@8: end matthiasm@8: matthiasm@8: matthiasm@8: matthiasm@8: matthiasm@8: matthiasm@8: matthiasm@8: matthiasm@8: