From b4d6b888bb90bf9edd16e3c213ab3fff324de88c Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 8 Nov 2021 09:35:04 -0700 Subject: [PATCH] initial data structure for musical scales (derived from mode) This is built around a MIDI-like assumption that we have a fixed (integer) number of note IDs and a semitone between them. We will need to expand this definition in the future to handle Bohlen-Pierce, maqams and various other non-12TET scale systems --- libs/ardour/ardour/scale.h | 38 ++++++++++++++++++++++++++++++++++++++ libs/ardour/scale.cc | 26 ++++++++++++++++++++++++++ libs/ardour/wscript | 3 ++- 3 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 libs/ardour/ardour/scale.h create mode 100644 libs/ardour/scale.cc diff --git a/libs/ardour/ardour/scale.h b/libs/ardour/ardour/scale.h new file mode 100644 index 0000000000..cc561cbcb9 --- /dev/null +++ b/libs/ardour/ardour/scale.h @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2021 Paul Davis + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef __ardour_scale_h__ +#define __ardour_scale_h__ + +#include "ardour/mode.h" + +class MusicalScale : MusicalMode +{ + public: + MusicalScale (Type t, int root) : MusicalMode (t), _root (root) {} + ~MusicalScale (); + + int root () const { return _root; } + void set_root (int); + + private: + int _root; + +}; + +#endif /* __ardour_scale_h__ */ diff --git a/libs/ardour/scale.cc b/libs/ardour/scale.cc new file mode 100644 index 0000000000..908ca54285 --- /dev/null +++ b/libs/ardour/scale.cc @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2021 Paul Davis + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "ardour/scale.h" + +void +MusicalScale::set_root (int r) +{ + _root = r; +} + diff --git a/libs/ardour/wscript b/libs/ardour/wscript index 4be9caae82..7e64b1ccc4 100644 --- a/libs/ardour/wscript +++ b/libs/ardour/wscript @@ -206,7 +206,8 @@ libardour_sources = [ 'route_group_member.cc', 'rb_effect.cc', 'rt_tasklist.cc', - 'scene_change.cc', + 'scale.cc', + 'scene_change.cc', 'search_paths.cc', 'selection.cc', 'send.cc',