/**
 * This file is part of HARMONICARIUM, a web app which allows users to play
 * the Harmonic Series dynamically by changing its fundamental tone in real-time.
 * It is available in its latest version from:
 * https://github.com/IndustrieCreative/Harmonicarium
 * 
 * @license
 * Copyright (C) 2017-2018 by Walter Mantovani (http://armonici.it).
 * Written by Walter Mantovani.
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
 * 
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

/* globals HUM */

"use strict";

/** 
 * The CtrlKeymapPreset class
 *     A container for the Controller Keymaps Preset
 */
HUM.CtrlKeymapPreset = class {
     /**
     * @param {HUM.DHC} dhc - The DHC instance to which it belongs
     */
	constructor(dhc) {
        /**
        * The DHC instance
        *
        * @member {HUM.DHC}
        */
		this.dhc = dhc;
        /**
         * Slots for storing the current selected Controller keymap for each Tuning System 
         *
         * @member {Object}
         * 
		 * @property {number} eEDx - Current selected Controller keymap for the n-EDx FT Tuning System 
		 * @property {number} h_s  - Current selected Controller keymap for the Harmonic/Subharmonic FT Tuning System 
         */
		this.current = {
			nEDx: 0,
			h_s: 0,
			// tsnap: 0
		};
        /**
        * Controller keymaps presets for the n-EDx FT Tuning System
        *
        * @member {Object.<number, CtrlKeymap>}
        */
		this.nEDx = {
			/**
			 * A Controller keymap preset
			 * 
			 * @typedef  {Object} CtrlKeymapPreset
			 *
			 * @global
			 *
			 * @property {string}     name  - Original filename of the Controller keymap (without extension)
			 * @property {string}     notes - User-friendly description of the Controller keymap
			 * @property {CtrlKeymap} map   - The Controller keymap
			 */
			0: {
				name: "ctrl_nEDx(7-7)_bonkaA(16h)_p",
				notes: "FT: 1-octave / HT: 16 bonka A Harmonics / Piper",
				/**
				 * A Controller keymap; each key of the Object is a MIDI Note number 
				 * 
				 * @typedef {Object.<midinnum, CtrlKeymapKey>} CtrlKeymap
				 */
			    map: {
					/**
					 * A single key of the Controller keymap
					 * 
					 * @typedef  {Object} CtrlKeymapKey
					 *
					 * @property {xtnum} ft - Fundamental Tone (FT) relative number; +/-64, FT0 is the FM, 129 is no FT
					 * @property {xtnum} ht - Harmonic/Subharmonic Tone (HT) relative number; +/-128, 0 is Piper feature, 129 is no HT
					 */
			        41: { ft: -7, ht: 129 },
			        42: { ft: -6, ht: 129 },
			        43: { ft: -5, ht: 129 },
			        44: { ft: -4, ht: 129 },
			        45: { ft: -3, ht: 129 },
			        46: { ft: -2, ht: 129 },
			        47: { ft: -1, ht: 129 },
			        48: { ft: 0, ht: 129 },
			        49: { ft: 1, ht: 129 },
			        50: { ft: 2, ht: 129 },
			        51: { ft: 3, ht: 129 },
			        52: { ft: 4, ht: 129 },
			        53: { ft: 5, ht: 129 },
			        54: { ft: 6, ht: 129 },
			        55: { ft: 7, ht: 129 },
			        56: { ft: 129, ht: 0 },
			        57: { ft: 129, ht: 1 },
			        58: { ft: 129, ht: 2 },
			        59: { ft: 129, ht: 3 },
			        60: { ft: 129, ht: 4 },
			        61: { ft: 129, ht: 5 },
			        62: { ft: 129, ht: 6 },
			        63: { ft: 129, ht: 7 },
			        64: { ft: 129, ht: 8 },
			        65: { ft: 129, ht: 8 },
			        66: { ft: 129, ht: 9 },
			        67: { ft: 129, ht: 10 },
			        68: { ft: 129, ht: 11 },
			        69: { ft: 129, ht: 12 },
			        70: { ft: 129, ht: 13 },
			        71: { ft: 129, ht: 14 },
			        72: { ft: 129, ht: 16 },
			        73: { ft: 129, ht: 15 },
			        74: { ft: 129, ht: 16 }
			    }
			},
			1: {
				name: "ctrl_nEDx(7-7)_bonkaA(16s)i_p",
				notes: "FT: 1-octave / HT: 16 bonka A inverted Subharmonics / Piper",
			    map: {
			        41: { ft: -7, ht: 129 },
			        42: { ft: -6, ht: 129 },
			        43: { ft: -5, ht: 129 },
			        44: { ft: -4, ht: 129 },
			        45: { ft: -3, ht: 129 },
			        46: { ft: -2, ht: 129 },
			        47: { ft: -1, ht: 129 },
			        48: { ft: 0, ht: 129 },
			        49: { ft: 1, ht: 129 },
			        50: { ft: 2, ht: 129 },
			        51: { ft: 3, ht: 129 },
			        52: { ft: 4, ht: 129 },
			        53: { ft: 5, ht: 129 },
			        54: { ft: 6, ht: 129 },
			        55: { ft: 7, ht: 129 },
			        56: { ft: 129, ht: 0 },
			        57: { ft: 129, ht: -1 },
			        58: { ft: 129, ht: -2 },
			        59: { ft: 129, ht: -3 },
			        60: { ft: 129, ht: -4 },
			        61: { ft: 129, ht: -5 },
			        62: { ft: 129, ht: -6 },
			        63: { ft: 129, ht: -7 },
			        64: { ft: 129, ht: -8 },
			        65: { ft: 129, ht: -8 },
			        66: { ft: 129, ht: -9 },
			        67: { ft: 129, ht: -10 },
			        68: { ft: 129, ht: -11 },
			        69: { ft: 129, ht: -12 },
			        70: { ft: 129, ht: -13 },
			        71: { ft: 129, ht: -14 },
			        72: { ft: 129, ht: -16 },
			        73: { ft: 129, ht: -15 },
			        74: { ft: 129, ht: -16 }
			    }
			},
			2: {
				name: "ctrl_nEDx(12-12)_bonkaA(16h)_2p",
				notes: "FT: 2-octave / HT: 16 bonka A Harmonics / 2 Piper",
			    map: {
					36: {ft: -12, ht: 129},
					37: {ft: -11, ht: 129},
					38: {ft: -10, ht: 129},
					39: {ft: -9, ht: 129},
					40: {ft: -8, ht: 129},
					41: {ft: -7, ht: 129},
					42: {ft: -6, ht: 129},
					43: {ft: -5, ht: 129},
					44: {ft: -4, ht: 129},
					45: {ft: -3, ht: 129},
					46: {ft: -2, ht: 129},
					47: {ft: -1, ht: 129},
					48: {ft: 0, ht: 129},
					49: {ft: 1, ht: 129},
					50: {ft: 2, ht: 129},
					51: {ft: 3, ht: 129},
					52: {ft: 4, ht: 129},
					53: {ft: 5, ht: 129},
					54: {ft: 6, ht: 129},
					55: {ft: 7, ht: 129},
					56: {ft: 8, ht: 129},
					57: {ft: 9, ht: 129},
					58: {ft: 10, ht: 129},
					59: {ft: 11, ht: 129},
					60: {ft: 12, ht: 129},
					64: {ft: 129, ht: 0},
					65: {ft: 129, ht: 0},
					69: {ft: 129, ht: 1},
					70: {ft: 129, ht: 2},
					71: {ft: 129, ht: 3},
					72: {ft: 129, ht: 4},
					73: {ft: 129, ht: 5},
					74: {ft: 129, ht: 6},
					75: {ft: 129, ht: 7},
					76: {ft: 129, ht: 8},
					77: {ft: 129, ht: 8},
					78: {ft: 129, ht: 9},
					79: {ft: 129, ht: 10},
					80: {ft: 129, ht: 11},
					81: {ft: 129, ht: 12},
					82: {ft: 129, ht: 13},
					83: {ft: 129, ht: 14},
					84: {ft: 129, ht: 16},
					85: {ft: 129, ht: 15},
					86: {ft: 129, ht: 16}
			    }
			},
			3: {
				name: "ctrl_nEDx(7-7)_bonkaB(16h)_p",
				notes: "FT: 1-octave / HT: 16 bonka B Harmonics / Piper",
			    map: {
			        41: { ft: -7, ht: 129 },
			        42: { ft: -6, ht: 129 },
			        43: { ft: -5, ht: 129 },
			        44: { ft: -4, ht: 129 },
			        45: { ft: -3, ht: 129 },
			        46: { ft: -2, ht: 129 },
			        47: { ft: -1, ht: 129 },
			        48: { ft: 0, ht: 129 },
			        49: { ft: 1, ht: 129 },
			        50: { ft: 2, ht: 129 },
			        51: { ft: 3, ht: 129 },
			        52: { ft: 4, ht: 129 },
			        53: { ft: 5, ht: 129 },
			        54: { ft: 6, ht: 129 },
			        55: { ft: 7, ht: 129 },
			        56: { ft: 129, ht: 0 },
			        57: { ft: 129, ht: 1 },
			        58: { ft: 129, ht: 2 },
			        59: { ft: 129, ht: 3 },
			        60: { ft: 129, ht: 4 },
			        61: { ft: 129, ht: 5 },
			        62: { ft: 129, ht: 6 },
			        63: { ft: 129, ht: 7 },
			        64: { ft: 129, ht: 8 },
			        65: { ft: 129, ht: 8 },
			        66: { ft: 129, ht: 9 },
			        67: { ft: 129, ht: 10 },
			        68: { ft: 129, ht: 11 },
			        69: { ft: 129, ht: 12 },
			        70: { ft: 129, ht: 13 },
			        71: { ft: 129, ht: 14 },
			        72: { ft: 129, ht: 14 },
			        73: { ft: 129, ht: 15 },
			        74: { ft: 129, ht: 16 }
			    }
			},
			4: {
				name: "ctrl_nEDx(7-7)_bonkaB(32h)_p",
				notes: "FT: 1-octave / HT: 32 bonka B Harmonics / Piper",
			    map: {
			    	41: {ft: -7, ht: 129},
					42: {ft: -6, ht: 129},
					43: {ft: -5, ht: 129},
					44: {ft: -4, ht: 129},
					45: {ft: -3, ht: 129},
					46: {ft: -2, ht: 129},
					47: {ft: -1, ht: 129},
					48: {ft: 0, ht: 129},
					49: {ft: 1, ht: 129},
					50: {ft: 2, ht: 129},
					51: {ft: 3, ht: 129},
					52: {ft: 4, ht: 129},
					53: {ft: 5, ht: 129},
					54: {ft: 6, ht: 129},
					55: {ft: 7, ht: 129},
					56: {ft: 129, ht: 0},
					57: {ft: 129, ht: 1},
					58: {ft: 129, ht: 2},
					59: {ft: 129, ht: 3},
					60: {ft: 129, ht: 4},
					61: {ft: 129, ht: 5},
					62: {ft: 129, ht: 6},
					63: {ft: 129, ht: 7},
					64: {ft: 129, ht: 8},
					65: {ft: 129, ht: 8},
					66: {ft: 129, ht: 9},
					67: {ft: 129, ht: 10},
					68: {ft: 129, ht: 11},
					69: {ft: 129, ht: 12},
					70: {ft: 129, ht: 13},
					71: {ft: 129, ht: 14},
					72: {ft: 129, ht: 14},
					73: {ft: 129, ht: 15},
					74: {ft: 129, ht: 16},
					75: {ft: 129, ht: 17},
					76: {ft: 129, ht: 18},
					77: {ft: 129, ht: 18},
					78: {ft: 129, ht: 19},
					79: {ft: 129, ht: 20},
					80: {ft: 129, ht: 21},
					81: {ft: 129, ht: 22},
					82: {ft: 129, ht: 23},
					83: {ft: 129, ht: 24},
					84: {ft: 129, ht: 24},
					85: {ft: 129, ht: 25},
					86: {ft: 129, ht: 26},
					87: {ft: 129, ht: 27},
					88: {ft: 129, ht: 28},
					89: {ft: 129, ht: 28},
					90: {ft: 129, ht: 29},
					91: {ft: 129, ht: 30},
					92: {ft: 129, ht: 31},
					93: {ft: 129, ht: 32}
			    }
			},
			5: {
				name: "ctrl_nEDx(12-12)_sanga(16h)_p",
				notes: "FT: 2-octave / HT: 16 sanga Harmonics / Piper",
			    map: {
					36: {ft: -12, ht: 129},
					37: {ft: -11, ht: 129},
					38: {ft: -10, ht: 129},
					39: {ft: -9, ht: 129},
					40: {ft: -8, ht: 129},
					41: {ft: -7, ht: 129},
					42: {ft: -6, ht: 129},
					43: {ft: -5, ht: 129},
					44: {ft: -4, ht: 129},
					45: {ft: -3, ht: 129},
					46: {ft: -2, ht: 129},
					47: {ft: -1, ht: 129},
					48: {ft: 0, ht: 129},
					49: {ft: 1, ht: 129},
					50: {ft: 2, ht: 129},
					51: {ft: 3, ht: 129},
					52: {ft: 4, ht: 129},
					53: {ft: 5, ht: 129},
					54: {ft: 6, ht: 129},
					55: {ft: 7, ht: 129},
					56: {ft: 8, ht: 129},
					57: {ft: 9, ht: 129},
					58: {ft: 10, ht: 129},
					59: {ft: 11, ht: 129},
					60: {ft: 12, ht: 129},
					62: {ft: 129, ht: 0},
					64: {ft: 129, ht: 1},
					65: {ft: 129, ht: 2},
					66: {ft: 129, ht: 3},
					67: {ft: 129, ht: 4},
					68: {ft: 129, ht: 5},
					69: {ft: 129, ht: 6},
					70: {ft: 129, ht: 7},
					71: {ft: 129, ht: 8},
					72: {ft: 129, ht: 8},
					73: {ft: 129, ht: 9},
					74: {ft: 129, ht: 10},
					75: {ft: 129, ht: 11},
					76: {ft: 129, ht: 12},
					77: {ft: 129, ht: 12},
					78: {ft: 129, ht: 13},
					79: {ft: 129, ht: 14},
					80: {ft: 129, ht: 15},
					81: {ft: 129, ht: 16}
			    }
			},
			6: {
				name: "ctrl_nEDx(12-12)_sanga(16s)i_p",
				notes: "FT: 2-octave / HT: 16 sanga inverted Subharmonics / Piper",
			    map: {
					36: {ft: -12, ht: 129},
					37: {ft: -11, ht: 129},
					38: {ft: -10, ht: 129},
					39: {ft: -9, ht: 129},
					40: {ft: -8, ht: 129},
					41: {ft: -7, ht: 129},
					42: {ft: -6, ht: 129},
					43: {ft: -5, ht: 129},
					44: {ft: -4, ht: 129},
					45: {ft: -3, ht: 129},
					46: {ft: -2, ht: 129},
					47: {ft: -1, ht: 129},
					48: {ft: 0, ht: 129},
					49: {ft: 1, ht: 129},
					50: {ft: 2, ht: 129},
					51: {ft: 3, ht: 129},
					52: {ft: 4, ht: 129},
					53: {ft: 5, ht: 129},
					54: {ft: 6, ht: 129},
					55: {ft: 7, ht: 129},
					56: {ft: 8, ht: 129},
					57: {ft: 9, ht: 129},
					58: {ft: 10, ht: 129},
					59: {ft: 11, ht: 129},
					60: {ft: 12, ht: 129},
					62: {ft: 129, ht: 0},
					64: {ft: 129, ht: -1},
					65: {ft: 129, ht: -2},
					66: {ft: 129, ht: -3},
					67: {ft: 129, ht: -4},
					68: {ft: 129, ht: -5},
					69: {ft: 129, ht: -6},
					70: {ft: 129, ht: -7},
					71: {ft: 129, ht: -8},
					72: {ft: 129, ht: -8},
					73: {ft: 129, ht: -9},
					74: {ft: 129, ht: -10},
					75: {ft: 129, ht: -11},
					76: {ft: 129, ht: -12},
					77: {ft: 129, ht: -12},
					78: {ft: 129, ht: -13},
					79: {ft: 129, ht: -14},
					80: {ft: 129, ht: -15},
					81: {ft: 129, ht: -16}
			    }
			},
			7: {
				name: "ctrl_nEDx(7-7)_giora(4-16h)_p",
				notes: "FT: 1-octave / HT: 4-16 giora Harmonics / Piper",
			    map: {
					41: {ft: -7, ht: 129},
					42: {ft: -6, ht: 129},
					43: {ft: -5, ht: 129},
					44: {ft: -4, ht: 129},
					45: {ft: -3, ht: 129},
					46: {ft: -2, ht: 129},
					47: {ft: -1, ht: 129},
					48: {ft: 0, ht: 129},
					49: {ft: 1, ht: 129},
					50: {ft: 2, ht: 129},
					51: {ft: 3, ht: 129},
					52: {ft: 4, ht: 129},
					53: {ft: 5, ht: 129},
					54: {ft: 6, ht: 129},
					55: {ft: 7, ht: 129},
					56: {ft: 129, ht: 0},
					57: {ft: 129, ht: 4},
					58: {ft: 129, ht: 5},
					59: {ft: 129, ht: 6},
					60: {ft: 129, ht: 8},
					61: {ft: 129, ht: 9},
					62: {ft: 129, ht: 7},
					63: {ft: 129, ht: 10},
					64: {ft: 129, ht: 12},
					65: {ft: 129, ht: 11},
					66: {ft: 129, ht: 13},
					67: {ft: 129, ht: 13},
					68: {ft: 129, ht: 14},
					69: {ft: 129, ht: 15},
					70: {ft: 129, ht: 16},
					71: {ft: 129, ht: 13},
					72: {ft: 129, ht: 14},
					73: {ft: 129, ht: 15},
					74: {ft: 129, ht: 16}
			    }
			},
			8: {
				name: "ctrl_nEDx(12-12)_bonkaA(16-16hs)_2p",
				notes: "FT: 2-octave / HT: -16+16 bonka A Harm+Subharmonics / 2 Piper",
			    map: {
					36: {ft: -12, ht: 129},
					37: {ft: -11, ht: 129},
					38: {ft: -10, ht: 129},
					39: {ft: -9, ht: 129},
					40: {ft: -8, ht: 129},
					41: {ft: -7, ht: 129},
					42: {ft: -6, ht: 129},
					43: {ft: -5, ht: 129},
					44: {ft: -4, ht: 129},
					45: {ft: -3, ht: 129},
					46: {ft: -2, ht: 129},
					47: {ft: -1, ht: 129},
					48: {ft: 0, ht: 129},
					49: {ft: 1, ht: 129},
					50: {ft: 2, ht: 129},
					51: {ft: 3, ht: 129},
					52: {ft: 4, ht: 129},
					53: {ft: 5, ht: 129},
					54: {ft: 6, ht: 129},
					55: {ft: 7, ht: 129},
					56: {ft: 8, ht: 129},
					57: {ft: 9, ht: 129},
					58: {ft: 10, ht: 129},
					59: {ft: 11, ht: 129},
					60: {ft: 12, ht: 129},
					61: {ft: 129, ht: 0},
					62: {ft: 129, ht: -16},
					63: {ft: 129, ht: -15},
					64: {ft: 129, ht: -16},
					65: {ft: 129, ht: -14},
					66: {ft: 129, ht: -13},
					67: {ft: 129, ht: -12},
					68: {ft: 129, ht: -11},
					69: {ft: 129, ht: -10},
					70: {ft: 129, ht: -9},
					71: {ft: 129, ht: -8},
					72: {ft: 129, ht: -8},
					73: {ft: 129, ht: -7},
					74: {ft: 129, ht: -6},
					75: {ft: 129, ht: -5},
					76: {ft: 129, ht: -4},
					77: {ft: 129, ht: -3},
					78: {ft: 129, ht: -2},
					79: {ft: 129, ht: -1},
					80: {ft: 129, ht: 0},
					81: {ft: 129, ht: 1},
					82: {ft: 129, ht: 2},
					83: {ft: 129, ht: 3},
					84: {ft: 129, ht: 4},
					85: {ft: 129, ht: 5},
					86: {ft: 129, ht: 6},
					87: {ft: 129, ht: 7},
					88: {ft: 129, ht: 8},
					89: {ft: 129, ht: 8},
					90: {ft: 129, ht: 9},
					91: {ft: 129, ht: 10},
					92: {ft: 129, ht: 11},
					93: {ft: 129, ht: 12},
					94: {ft: 129, ht: 13},
					95: {ft: 129, ht: 14},
					96: {ft: 129, ht: 16},
					97: {ft: 129, ht: 15},
					98: {ft: 129, ht: 16}
			    }
			},
			9: {
				name: "ctrl_nEDx(12-16)_sanga(16-16hs)_3p",
				notes: "FT: 2-octave+ / HT: -16+16 sanga Harm+Subharmonics / 3 Piper",
			    map: {
					36: {ft: -12, ht: 129},
					37: {ft: -11, ht: 129},
					38: {ft: -10, ht: 129},
					39: {ft: -9, ht: 129},
					40: {ft: -8, ht: 129},
					41: {ft: -7, ht: 129},
					42: {ft: -6, ht: 129},
					43: {ft: -5, ht: 129},
					44: {ft: -4, ht: 129},
					45: {ft: -3, ht: 129},
					46: {ft: -2, ht: 129},
					47: {ft: -1, ht: 129},
					48: {ft: 0, ht: 129},
					49: {ft: 1, ht: 129},
					50: {ft: 2, ht: 129},
					51: {ft: 3, ht: 129},
					52: {ft: 4, ht: 129},
					53: {ft: 5, ht: 129},
					54: {ft: 6, ht: 129},
					55: {ft: 7, ht: 129},
					56: {ft: 8, ht: 129},
					57: {ft: 9, ht: 129},
					58: {ft: 10, ht: 129},
					59: {ft: 11, ht: 129},
					60: {ft: 12, ht: 129},
					61: {ft: 13, ht: 129},
					62: {ft: 14, ht: 129},
					63: {ft: 15, ht: 129},
					64: {ft: 16, ht: 129},
					67: {ft: 129, ht: -16},
					68: {ft: 129, ht: -15},
					69: {ft: 129, ht: -14},
					70: {ft: 129, ht: -13},
					71: {ft: 129, ht: -12},
					72: {ft: 129, ht: -12},
					73: {ft: 129, ht: -11},
					74: {ft: 129, ht: -10},
					75: {ft: 129, ht: -9},
					76: {ft: 129, ht: -8},
					77: {ft: 129, ht: -8},
					78: {ft: 129, ht: -7},
					79: {ft: 129, ht: -6},
					80: {ft: 129, ht: -5},
					81: {ft: 129, ht: -4},
					82: {ft: 129, ht: -3},
					83: {ft: 129, ht: -2},
					84: {ft: 129, ht: -1},
					85: {ft: 129, ht: 0},
					86: {ft: 129, ht: 0},
					87: {ft: 129, ht: 0},
					88: {ft: 129, ht: 1},
					89: {ft: 129, ht: 2},
					90: {ft: 129, ht: 3},
					91: {ft: 129, ht: 4},
					92: {ft: 129, ht: 5},
					93: {ft: 129, ht: 6},
					94: {ft: 129, ht: 7},
					95: {ft: 129, ht: 8},
					96: {ft: 129, ht: 8},
					97: {ft: 129, ht: 9},
					98: {ft: 129, ht: 10},
					99: {ft: 129, ht: 11},
					100: {ft: 129, ht: 12},
					101: {ft: 129, ht: 12},
					102: {ft: 129, ht: 13},
					103: {ft: 129, ht: 14},
					104: {ft: 129, ht: 15},
					105: {ft: 129, ht: 16}
			    }
			},
			10: {
				name: "ctrl_nEDx_(-31+31)_(-32+32h)_p_tsnap",
				notes: "FT: 5-octave / HT: -32+32 Harmonics / Piper / [TSNAP]",
			    map: {
					0: {ft: -31, ht: 129},
					1: {ft: -30, ht: 129},
					2: {ft: -29, ht: 129},
					3: {ft: -28, ht: 129},
					4: {ft: -27, ht: 129},
					5: {ft: -26, ht: 129},
					6: {ft: -25, ht: 129},
					7: {ft: -24, ht: 129},
					8: {ft: -23, ht: 129},
					9: {ft: -22, ht: 129},
					10: {ft: -21, ht: 129},
					11: {ft: -20, ht: 129},
					12: {ft: -19, ht: 129},
					13: {ft: -18, ht: 129},
					14: {ft: -17, ht: 129},
					15: {ft: -16, ht: 129},
					16: {ft: -15, ht: 129},
					17: {ft: -14, ht: 129},
					18: {ft: -13, ht: 129},
					19: {ft: -12, ht: 129},
					20: {ft: -11, ht: 129},
					21: {ft: -10, ht: 129},
					22: {ft: -9, ht: 129},
					23: {ft: -8, ht: 129},
					24: {ft: -7, ht: 129},
					25: {ft: -6, ht: 129},
					26: {ft: -5, ht: 129},
					27: {ft: -4, ht: 129},
					28: {ft: -3, ht: 129},
					29: {ft: -2, ht: 129},
					30: {ft: -1, ht: 129},
					31: {ft: 0, ht: 129},
					32: {ft: 1, ht: 129},
					33: {ft: 2, ht: 129},
					34: {ft: 3, ht: 129},
					35: {ft: 4, ht: 129},
					36: {ft: 5, ht: 129},
					37: {ft: 6, ht: 129},
					38: {ft: 7, ht: 129},
					39: {ft: 8, ht: 129},
					40: {ft: 9, ht: 129},
					41: {ft: 10, ht: 129},
					42: {ft: 11, ht: 129},
					43: {ft: 12, ht: 129},
					44: {ft: 13, ht: 129},
					45: {ft: 14, ht: 129},
					46: {ft: 15, ht: 129},
					47: {ft: 16, ht: 129},
					48: {ft: 17, ht: 129},
					49: {ft: 18, ht: 129},
					50: {ft: 19, ht: 129},
					51: {ft: 20, ht: 129},
					52: {ft: 21, ht: 129},
					53: {ft: 22, ht: 129},
					54: {ft: 23, ht: 129},
					55: {ft: 24, ht: 129},
					56: {ft: 25, ht: 129},
					57: {ft: 26, ht: 129},
					58: {ft: 27, ht: 129},
					59: {ft: 28, ht: 129},
					60: {ft: 29, ht: 129},
					61: {ft: 30, ht: 129},
					62: {ft: 31, ht: 129},
					63: {ft: 129, ht: -32},
					64: {ft: 129, ht: -31},
					65: {ft: 129, ht: -30},
					66: {ft: 129, ht: -29},
					67: {ft: 129, ht: -28},
					68: {ft: 129, ht: -27},
					69: {ft: 129, ht: -26},
					70: {ft: 129, ht: -25},
					71: {ft: 129, ht: -24},
					72: {ft: 129, ht: -23},
					73: {ft: 129, ht: -22},
					74: {ft: 129, ht: -21},
					75: {ft: 129, ht: -20},
					76: {ft: 129, ht: -19},
					77: {ft: 129, ht: -18},
					78: {ft: 129, ht: -17},
					79: {ft: 129, ht: -16},
					80: {ft: 129, ht: -15},
					81: {ft: 129, ht: -14},
					82: {ft: 129, ht: -13},
					83: {ft: 129, ht: -12},
					84: {ft: 129, ht: -11},
					85: {ft: 129, ht: -10},
					86: {ft: 129, ht: -9},
					87: {ft: 129, ht: -8},
					88: {ft: 129, ht: -7},
					89: {ft: 129, ht: -6},
					90: {ft: 129, ht: -5},
					91: {ft: 129, ht: -4},
					92: {ft: 129, ht: -3},
					93: {ft: 129, ht: -2},
					94: {ft: 129, ht: -1},
					95: {ft: 129, ht: 0},
					96: {ft: 129, ht: 1},
					97: {ft: 129, ht: 2},
					98: {ft: 129, ht: 3},
					99: {ft: 129, ht: 4},
					100: {ft: 129, ht: 5},
					101: {ft: 129, ht: 6},
					102: {ft: 129, ht: 7},
					103: {ft: 129, ht: 8},
					104: {ft: 129, ht: 9},
					105: {ft: 129, ht: 10},
					106: {ft: 129, ht: 11},
					107: {ft: 129, ht: 12},
					108: {ft: 129, ht: 13},
					109: {ft: 129, ht: 14},
					110: {ft: 129, ht: 15},
					111: {ft: 129, ht: 16},
					112: {ft: 129, ht: 17},
					113: {ft: 129, ht: 18},
					114: {ft: 129, ht: 19},
					115: {ft: 129, ht: 20},
					116: {ft: 129, ht: 21},
					117: {ft: 129, ht: 22},
					118: {ft: 129, ht: 23},
					119: {ft: 129, ht: 24},
					120: {ft: 129, ht: 25},
					121: {ft: 129, ht: 26},
					122: {ft: 129, ht: 27},
					123: {ft: 129, ht: 28},
					124: {ft: 129, ht: 29},
					125: {ft: 129, ht: 30},
					126: {ft: 129, ht: 31},
					127: {ft: 129, ht: 32}
			    }
			}
		};
        /**
        * Controller keymaps presets for the Harmonic/Subharmonic FT Tuning System
        *
        * @member {Object.<number, CtrlKeymap>}
        */
		this.h_s = {
			0: {
				name: "ctrl_HSt(8-4-8hs)_bonkaA(16h)_p",
				notes: "FT: -8<4>8 Harm+Subharmonics Same Octave / HT: 16 bonka A Harmonics / Piper",
			    map: {
					45: {ft: -64, ht: 129},
					46: {ft: -7, ht: 129},
					47: {ft: -6, ht: 129},
					48: {ft: -5, ht: 129},
					49: {ft: -4, ht: 129},
					50: {ft: 0, ht: 129},
					51: {ft: 4, ht: 129},
					52: {ft: 5, ht: 129},
					53: {ft: 6, ht: 129},
					54: {ft: 7, ht: 129},
					55: {ft: 64, ht: 129},
					56: {ft: 129, ht: 0},
					57: {ft: 129, ht: 1},
					58: {ft: 129, ht: 2},
					59: {ft: 129, ht: 3},
					60: {ft: 129, ht: 4},
					61: {ft: 129, ht: 5},
					62: {ft: 129, ht: 6},
					63: {ft: 129, ht: 7},
					64: {ft: 129, ht: 8},
					65: {ft: 129, ht: 8},
					66: {ft: 129, ht: 9},
					67: {ft: 129, ht: 10},
					68: {ft: 129, ht: 11},
					69: {ft: 129, ht: 12},
					70: {ft: 129, ht: 13},
					71: {ft: 129, ht: 14},
					72: {ft: 129, ht: 16},
					73: {ft: 129, ht: 15},
					74: {ft: 129, ht: 16}
			    }
			},
			1: {
				name: "ctrl_HSt(16-8-16hs)_bonkaA(16h)_p",
				notes: "FT: -16<8>16 Harm+Subharmonics Same Octave / HT: 16 bonka A Harmonics / Piper",
			    map: {
					36: {ft: -64, ht: 129},
					37: {ft: -15, ht: 129},
					38: {ft: -14, ht: 129},
					39: {ft: -13, ht: 129},
					40: {ft: -12, ht: 129},
					41: {ft: -11, ht: 129},
					42: {ft: -10, ht: 129},
					43: {ft: -9, ht: 129},
					44: {ft: 8, ht: 129},
					45: {ft: 9, ht: 129},
					46: {ft: 10, ht: 129},
					47: {ft: 11, ht: 129},
					48: {ft: 12, ht: 129},
					49: {ft: 13, ht: 129},
					50: {ft: 14, ht: 129},
					51: {ft: 15, ht: 129},
					52: {ft: 64, ht: 129},
					56: {ft: 129, ht: 0},
					57: {ft: 129, ht: 1},
					58: {ft: 129, ht: 2},
					59: {ft: 129, ht: 3},
					60: {ft: 129, ht: 4},
					61: {ft: 129, ht: 5},
					62: {ft: 129, ht: 6},
					63: {ft: 129, ht: 7},
					64: {ft: 129, ht: 8},
					65: {ft: 129, ht: 8},
					66: {ft: 129, ht: 9},
					67: {ft: 129, ht: 10},
					68: {ft: 129, ht: 11},
					69: {ft: 129, ht: 12},
					70: {ft: 129, ht: 13},
					71: {ft: 129, ht: 14},
					72: {ft: 129, ht: 16},
					73: {ft: 129, ht: 15},
					74: {ft: 129, ht: 16}
			    }
			},
			3: {
				name: "ctrl_HSt(32-16-32hs)_bonkaA(16h)_p",
				notes: "FT: -32<16>32 Harm+Subharmonics Same Octave / HT: 16 bonka A Harmonics / Piper",
			    map: {
					21: {ft: -64, ht: 129},
					22: {ft: -31, ht: 129},
					23: {ft: -30, ht: 129},
					24: {ft: -29, ht: 129},
					25: {ft: -28, ht: 129},
					26: {ft: -27, ht: 129},
					27: {ft: -26, ht: 129},
					28: {ft: -25, ht: 129},
					29: {ft: -24, ht: 129},
					30: {ft: -23, ht: 129},
					31: {ft: -22, ht: 129},
					32: {ft: -21, ht: 129},
					33: {ft: -20, ht: 129},
					34: {ft: -19, ht: 129},
					35: {ft: -18, ht: 129},
					36: {ft: -17, ht: 129},
					37: {ft: -16, ht: 129},
					38: {ft: 0, ht: 129},
					39: {ft: 16, ht: 129},
					40: {ft: 17, ht: 129},
					41: {ft: 18, ht: 129},
					42: {ft: 19, ht: 129},
					43: {ft: 20, ht: 129},
					44: {ft: 21, ht: 129},
					45: {ft: 22, ht: 129},
					46: {ft: 23, ht: 129},
					47: {ft: 24, ht: 129},
					48: {ft: 25, ht: 129},
					49: {ft: 26, ht: 129},
					50: {ft: 27, ht: 129},
					51: {ft: 28, ht: 129},
					52: {ft: 29, ht: 129},
					53: {ft: 30, ht: 129},
					54: {ft: 31, ht: 129},
					55: {ft: 64, ht: 129},
					56: {ft: 129, ht: 0},
					57: {ft: 129, ht: 1},
					58: {ft: 129, ht: 2},
					59: {ft: 129, ht: 3},
					60: {ft: 129, ht: 4},
					61: {ft: 129, ht: 5},
					62: {ft: 129, ht: 6},
					63: {ft: 129, ht: 7},
					64: {ft: 129, ht: 8},
					65: {ft: 129, ht: 8},
					66: {ft: 129, ht: 9},
					67: {ft: 129, ht: 10},
					68: {ft: 129, ht: 11},
					69: {ft: 129, ht: 12},
					70: {ft: 129, ht: 13},
					71: {ft: 129, ht: 14},
					72: {ft: 129, ht: 16},
					73: {ft: 129, ht: 15},
					74: {ft: 129, ht: 16}
			    }
			},
			4: {
				name: "ctrl_HSt(16-8-16hs)m_bonkaA(16h)_p",
				notes: "FT: -16<8>16 Harm+Subharmonics Same Octave mixed / HT: 16 bonka A Harmonics / Piper",
			    map: {
					40: {ft: -64, ht: 129},
					41: {ft: -15, ht: 129},
					42: {ft: 9, ht: 129},
					43: {ft: -14, ht: 129},
					44: {ft: -13, ht: 129},
					45: {ft: 10, ht: 129},
					46: {ft: -12, ht: 129},
					47: {ft: 11, ht: 129},
					48: {ft: -11, ht: 129},
					49: {ft: 12, ht: 129},
					50: {ft: -10, ht: 129},
					51: {ft: 13, ht: 129},
					52: {ft: 14, ht: 129},
					53: {ft: -9, ht: 129},
					54: {ft: 15, ht: 129},
					55: {ft: 64, ht: 129},
					56: {ft: 129, ht: 0},
					57: {ft: 129, ht: 1},
					58: {ft: 129, ht: 2},
					59: {ft: 129, ht: 3},
					60: {ft: 129, ht: 4},
					61: {ft: 129, ht: 5},
					62: {ft: 129, ht: 6},
					63: {ft: 129, ht: 7},
					64: {ft: 129, ht: 8},
					65: {ft: 129, ht: 8},
					66: {ft: 129, ht: 9},
					67: {ft: 129, ht: 10},
					68: {ft: 129, ht: 11},
					69: {ft: 129, ht: 12},
					70: {ft: 129, ht: 13},
					71: {ft: 129, ht: 14},
					72: {ft: 129, ht: 16},
					73: {ft: 129, ht: 15},
					74: {ft: 129, ht: 16}
			    }
			}
		};
    } // end class Constructor
}; // end Class