/* Copyright (C) 2006 Christian Schneider
*
* This file is part of Nomad.
*
* Nomad 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.
*
* Nomad 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 Nomad; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
/*
* Created on Apr 5, 2006
*/
package net.sf.nmedit.jpatch.clavia.nordmodular;
import java.util.HashMap;
import java.util.Map;
/**
* Constants of the Clavia Nord Modular patch file format 3.0
*
* TODO defined section constants are different than the
* {@link net.sf.nmedit.jnmprotocol2.PatchMessage} constants
*
* @author Christian Schneider
*/
public class Format
{
/**
* Patch version string
*/
public static final String VERSION_NORD_MODULAR_PATCH_3_0 = "Version=Nord Modular patch 3.0";
/**
* section id - for unknown sections
*/
public final static int SEC_UNKOWN_SECTION = 1 << 1;
/**
* section id - cable dump
*/
public final static int SEC_CABLE_DUMP = 1 << 2;
/**
* section id - control map dump
*/
public final static int SEC_CTRLMAP_DUMP = 1 << 3;
/**
* section id - current note dump
*/
public final static int SEC_CURRENTNOTE_DUMP = 1 << 4;
/**
* section id - custom dump
*/
public final static int SEC_CUSTOM_DUMP = 1 << 5;
/**
* section id - header
*/
public final static int SEC_HEADER = 1 << 6;
/**
* section id - keyboard assignment
*/
public final static int SEC_KEYBOARDASSIGNMENT = 1 << 7;
/**
* section id - knobmap dump
*/
public final static int SEC_KNOBMAP_DUMP = 1 << 8;
/**
* section id - module dump
*/
public final static int SEC_MODULE_DUMP = 1 << 9;
/**
* section id - morphmap dump
*/
public final static int SEC_MORPHMAP_DUMP = 1 << 10;
/**
* section id - name dump
*/
public final static int SEC_NAME_DUMP = 1 << 11;
/**
* section id - user notes
*/
public final static int SEC_NOTE = 1 << 12;
/**
* section id - parameter dump
*/
public final static int SEC_PARAMETER_DUMP = 1 << 13;
/**
* Dummy section id for the patch name.
* Some sources do not have this section - for example
* a patch file has no patch name in it.
*/
public final static int SEC_DUMMY_PATCH_NAME = 1 << 14;
// PatchMessage section IDs
public final static int S_NAME_1 = 55;
public final static int S_NAME_2 = 39;
public final static int S_HEADER = 33;
public final static int S_MODULE = 74;
public final static int S_NOTE = 105;
public final static int S_CABLE = 82;
public final static int S_MORPHMAP = 101;
public final static int S_KNOBMAP = 98;
public final static int S_CTRLMAP = 96;
public final static int S_CUSTOM = 91;
public final static int S_NAMEDUMP = 90;
public final static int S_PARAMETER = 77;
/**
* section name
*/
public final static String NAME_CABLE_DUMP = "CableDump";
/**
* section name
*/
public final static String NAME_CTRLMAP_DUMP = "CtrlMapDump";
/**
* section name
*/
public final static String NAME_CURRENTNOTE_DUMP = "CurrentNoteDump";
/**
* section name
*/
public final static String NAME_CUSTOM_DUMP = "CustomDump";
/**
* section name
*/
public final static String NAME_HEADER = "Header";
/**
* section name
*/
public final static String NAME_KEYBOARDASSIGNMENT = "KeyboardAssignment";
/**
* section name
*/
public final static String NAME_KNOBMAP_DUMP = "KnobMapDump";
/**
* section name
*/
public final static String NAME_MODULE_DUMP = "ModuleDump";
/**
* section name
*/
public final static String NAME_MORPHMAP_DUMP = "MorphMapDump";
/**
* section name
*/
public final static String NAME_NAME_DUMP = "NameDump";
/**
* section name
*/
public final static String NAME_NOTE = "Notes";
/**
* section name
*/
public final static String NAME_PARAMETER_DUMP = "ParameterDump";
/**
* constant: common voice area
* @see #VALUE_SECTION_VOICE_AREA_POLY
* @see #VALUE_SECTION_MORPH
*/
public final static int VALUE_SECTION_VOICE_AREA_COMMON = 0;
/**
* constant: poly voice area
* @see #VALUE_SECTION_VOICE_AREA_COMMON
* @see #VALUE_SECTION_MORPH
*/
public final static int VALUE_SECTION_VOICE_AREA_POLY = 1;
/**
* constant: morph section
* @see #VALUE_SECTION_VOICE_AREA_POLY
* @see #VALUE_SECTION_VOICE_AREA_COMMON
*/
public final static int VALUE_SECTION_MORPH = 2;
/**
* header-value index
*/
public final static int HEADER_KEYBOARD_RANGE_MIN = 0;
public final static int HEADER_KEYBOARD_RANGE_MIN_DEFAULT = 0;
/**
* header-value index
*/
public final static int HEADER_KEYBOARD_RANGE_MAX = 1;
public final static int HEADER_KEYBOARD_RANGE_MAX_DEFAULT = 127;
/**
* header-value index
*/
public final static int HEADER_VELOCITY_RANGE_MIN = 2;
public final static int HEADER_VELOCITY_RANGE_MIN_DEFAULT = 0;
/**
* header-value index
*/
public final static int HEADER_VELOCITY_RANGE_MAX = 3;
public final static int HEADER_VELOCITY_RANGE_MAX_DEFAULT = 127;
/**
* header-value index
*/
public final static int HEADER_BEND_RANGE = 4;
public final static int HEADER_BEND_RANGE_MIN = 0;
public final static int HEADER_BEND_RANGE_MAX = 24;
public final static int HEADER_BEND_RANGE_DEFAULT = 2;
/**
* header-value index
*/
public final static int HEADER_PORTAMENTO_TIME = 5;
public final static int HEADER_PORTAMENTO_TIME_DEFAULT = 0;
/**
* header-value index
*/
public final static int HEADER_PORTAMENTO = 6;
public final static int HEADER_PORTAMENTO_DEFAULT = 0;
/**
* header-value index
*/
public final static int HEADER_REQUESTED_VOICES = 7;
public final static int HEADER_REQUESTED_VOICES_DEFAULT = 1-1;
/**
* header-value index
*/
public final static int HEADER_SECTION_SEPARATOR_POSITION = 8;
public final static int HEADER_SECTION_SEPARATOR_POSITION_TOP_MOST = 0;
public final static int HEADER_SECTION_SEPARATOR_POSITION_BOTTOM_MOST = 4000;
public final static int HEADER_SECTION_SEPARATOR_POSITION_DEFAULT =
HEADER_SECTION_SEPARATOR_POSITION_BOTTOM_MOST;
/**
* header-value index
*/
public final static int HEADER_OCTAVE_SHIFT = 9;
public final static int HEADER_OCTAVE_SHIFT_DEFAULT = 2;
/**
* header-value index
*/
public final static int HEADER_VOICE_RETRIGGER_POLY = 10;
public final static int HEADER_VOICE_RETRIGGER_POLY_DEFAULT = 1;
/**
* header-value index
*/
public final static int HEADER_VOICE_RETRIGGER_COMMON = 11;
public final static int HEADER_VOICE_RETRIGGER_COMMON_DEFAULT = 1;
/**
* header-value index
*/
public final static int HEADER_UNKNOWN1 = 12;
public final static int HEADER_UNKNOWN1_DEFAULT = 0; // TODO right value
/**
* header-value index
*/
public final static int HEADER_UNKNOWN2 = 13;
public final static int HEADER_UNKNOWN2_DEFAULT = 0; // TODO right value
/**
* header-value index
*/
public final static int HEADER_UNKNOWN3 = 14;
public final static int HEADER_UNKNOWN3_DEFAULT = 0; // TODO right value
/**
* header-value index
*/
public final static int HEADER_UNKNOWN4 = 15;
public final static int HEADER_UNKNOWN4_DEFAULT = 0; // TODO right value
public final static int HEADER_CABLE_VISIBLE = 1;
public final static int HEADER_CABLE_INVISIBLE = 0;
/**
* header-value index
*/
public final static int HEADER_CABLE_VISIBILITY_RED = 16;
/**
* header-value index
*/
public final static int HEADER_CABLE_VISIBILITY_BLUE = 17;
/**
* header-value index
*/
public final static int HEADER_CABLE_VISIBILITY_YELLOW = 18;
/**
* header-value index
*/
public final static int HEADER_CABLE_VISIBILITY_GRAY = 19;
/**
* header-value index
*/
public final static int HEADER_CABLE_VISIBILITY_GREEN = 20;
/**
* header-value index
*/
public final static int HEADER_CABLE_VISIBILITY_PURPLE = 21;
/**
* header-value index
*/
public final static int HEADER_CABLE_VISIBILITY_WHITE = 22;
/**
* number of values in the header
*/
public final static int VALUE_COUNT_HEADER = 23;
/**
* module dump value index
*/
public final static int MODULE_DUMP_MODULE_INDEX = 0;
/**
* module dump value index
*/
public final static int MODULE_DUMP_MODULE_TYPE = 1;
/**
* module dump value index
*/
public final static int MODULE_DUMP_MODULE_XPOS = 2;
/**
* module dump value index
*/
public final static int MODULE_DUMP_MODULE_YPOS = 3;
/**
* current note dump value index
*/
public final static int CURRENT_NOTE_DUMP_NOTE = 0;
/**
* current note dump value index
*/
public final static int CURRENT_NOTE_DUMP_ATTACK_VELOCITY = 1;
/**
* current note dump value index
*/
public final static int CURRENT_NOTE_DUMP_RELEASE_VELOCITY = 2;
/**
* cable dump value index
*/
public final static int CABLE_DUMP_COLOR = 0;
/**
* cable dump value index
*/
public final static int CABLE_DUMP_MODULE_INDEX_DESTINATION = 1;
/**
* cable dump value index
*/
public final static int CABLE_DUMP_CONNECTOR_INDEX_DESTINATION = 2;
/**
* cable dump value index
*/
public final static int CABLE_DUMP_CONNECTOR_TYPE_DESTINATION = 3;
/**
* cable dump value index
*/
public final static int CABLE_DUMP_MODULE_INDEX_SOURCE = 4;
/**
* cable dump value index
*/
public final static int CABLE_DUMP_CONNECTOR_INDEX_SOURCE = 5;
/**
* cable dump value index
*/
public final static int CABLE_DUMP_CONNECTOR_TYPE_SOURCE = 6;
/**
* cable dump value index
*/
public final static int VALUE_COUNT_CABLE_DUMP = 7;
/**
* cable dump value index
*/
public final static int VALUE_CABLE_DUMP_INPUT = 0;
/**
* cable dump value index
*/
public final static int VALUE_CABLE_DUMP_OUTPUT = 1;
/**
* Returns the output ID of a connector.
*
* <ul>
* <li>{@link #VALUE_CABLE_DUMP_INPUT} - if the connector is an input</li>
* <li>{@link #VALUE_CABLE_DUMP_OUTPUT} - if the connector is an output</li>
* </ul>
*
* @param isOutput if the connector is an output
* @return connector output ID
*
* @see #VALUE_CABLE_DUMP_INPUT
* @see #VALUE_CABLE_DUMP_OUTPUT
*/
public final static int getOutputID(boolean isOutput)
{
return isOutput ? VALUE_CABLE_DUMP_OUTPUT : VALUE_CABLE_DUMP_INPUT;
}
/**
* parameter dump value index
*/
public final static int PARAMETER_DUMP_MODULE_INDEX = 0;
/**
* parameter dump value index
*/
public final static int PARAMETER_DUMP_MODULE_TYPE = 1;
/**
* parameter dump value index
*/
public final static int PARAMETER_DUMP_PARAMETER_COUNT = 2;
/**
* Offset of the parameter values in the <b>parameter dump</b>
* section. For example the <code>n</code>-th parameter value has the index
* <code>PARAMETER_DUMP_BASE+n</code>.
*/
public final static int PARAMETER_DUMP_PARAMETER_BASE = 3; // index of first parameter
/**
* custom dump value index
*/
public final static int CUSTOM_DUMP_MODULE_INDEX = 0;
/**
* custom dump value index
*/
public final static int CUSTOM_DUMP_PARAMETER_COUNT = 1;
/**
* Offset of the custom values in the <b>custom dump</b>
* section. For example the <code>n</code>-th custom value has the index
* <code>CUSTOM_DUMP_PARAMETER_BASE+n</code>.
*/
public final static int CUSTOM_DUMP_PARAMETER_BASE = 2; // index of first parameter
/**
* morphmap dump / morph values
*/
public final static int MORPH_MAP_DUMP_VALUES_MORPH1 = 0;
/**
* morphmap dump / morph values
*/
public final static int MORPH_MAP_DUMP_VALUES_MORPH2 = 1;
/**
* morphmap dump / morph values
*/
public final static int MORPH_MAP_DUMP_VALUES_MORPH3 = 2;
/**
* morphmap dump / morph values
*/
public final static int MORPH_MAP_DUMP_VALUES_MORPH4 = 3;
/**
* morphmap dump / morph settings
*/
public final static int MORPH_MAP_DUMP_SECTION = 0;
/**
* morphmap dump / morph settings
*/
public final static int MORPH_MAP_DUMP_MODULE_INDEX = 1;
/**
* morphmap dump / morph settings
*/
public final static int MORPH_MAP_DUMP_PARAMETER_INDEX = 2;
/**
* morphmap dump / morph settings
*/
public final static int MORPH_MAP_DUMP_MORPH_INDEX = 3;
/**
* morphmap dump / morph settings
*/
public final static int MORPH_MAP_DUMP_MORPH_RANGE = 4;
/**
* morphmap dump / morph values : number of values
* @see #VALUE_COUNT_MORPH_MAP_DUMP
*/
public final static int VALUE_COUNT_MORPH_MAP_DUMP_VALUES = 4;
/**
* morphmap dump / morph settings : number of values
* @see #VALUE_COUNT_MORPH_MAP_DUMP_VALUES
*/
public final static int VALUE_COUNT_MORPH_MAP_DUMP = 5;
/**
* keyboard assignment - value index
* @see #VALUE_KEYBOARD_ASSIGNMENT_NONE
* @see #VALUE_KEYBOARD_ASSIGNMENT_NOTE
* @see #VALUE_KEYBOARD_ASSIGNMENT_VELOCITY
*/
public final static int KEYBOARD_ASSIGNMENT_MORPH1 = 0;
/**
* keyboard assignment - value index
* @see #VALUE_KEYBOARD_ASSIGNMENT_NONE
* @see #VALUE_KEYBOARD_ASSIGNMENT_NOTE
* @see #VALUE_KEYBOARD_ASSIGNMENT_VELOCITY
*/
public final static int KEYBOARD_ASSIGNMENT_MORPH2 = 1;
/**
* keyboard assignment - value index
* @see #VALUE_KEYBOARD_ASSIGNMENT_NONE
* @see #VALUE_KEYBOARD_ASSIGNMENT_NOTE
* @see #VALUE_KEYBOARD_ASSIGNMENT_VELOCITY
*/
public final static int KEYBOARD_ASSIGNMENT_MORPH3 = 2;
/**
* keyboard assignment - value index
* @see #VALUE_KEYBOARD_ASSIGNMENT_NONE
* @see #VALUE_KEYBOARD_ASSIGNMENT_NOTE
* @see #VALUE_KEYBOARD_ASSIGNMENT_VELOCITY
*/
public final static int KEYBOARD_ASSIGNMENT_MORPH4 = 3;
/**
* keyboard assignment value
*/
public final static int VALUE_KEYBOARD_ASSIGNMENT_NONE = 0;
/**
* keyboard assignment value
*/
public final static int VALUE_KEYBOARD_ASSIGNMENT_VELOCITY = 1;
/**
* keyboard assignment value
*/
public final static int VALUE_KEYBOARD_ASSIGNMENT_NOTE = 2;
// knobMapDump
/**
* knob map dump - value index
*/
public final static int KNOB_MAP_DUMP_SECTION_INDEX = 0;
/**
* knob map dump - value index
*/
public final static int KNOB_MAP_DUMP_MODULE_INDEX = 1;
/**
* knob map dump - value index
*/
public final static int KNOB_MAP_DUMP_PARAMETER_INDEX = 2;
/**
* knob map dump - value index
*/
public final static int KNOB_MAP_DUMP_KNOB_INDEX = 3;
/**
* knob map dump - number of values
*/
public final static int VALUE_COUNT_KNOBMAP_DUMP = 4;
/**
* control map dump - value index
*/
public final static int CTRL_MAP_DUMP_SECTION_INDEX = 0;
/**
* control map dump - value index
*/
public final static int CTRL_MAP_DUMP_MODULE_INDEX = 1;
/**
* control map dump - value index
*/
public final static int CTRL_MAP_DUMP_PARAMETER_INDEX = 2;
/**
* control map dump - value index
*/
public final static int CTRL_MAP_DUMP_CC_INDEX = 3;
/**
* control map dump - number of values
*/
public static final int VALUE_COUNT_CTRL_MAP_DUMP = 4;
/**
* name dump - value index
*/
public final static int NAME_DUMP_MODULE_INDEX = 0;
/**
* name dump - value index; note that this value is a string
*/
public final static int NAME_DUMP_MODULE_NAME = 1;
/**
* map containing the pairs (name, ID) of a section
*/
private final static Map<String, Integer> sectionIDMap;
static
{
sectionIDMap = new HashMap<String, Integer>();
sectionIDMap.put(NAME_CABLE_DUMP , SEC_CABLE_DUMP);
sectionIDMap.put(NAME_CTRLMAP_DUMP , SEC_CTRLMAP_DUMP);
sectionIDMap.put(NAME_CURRENTNOTE_DUMP , SEC_CURRENTNOTE_DUMP);
sectionIDMap.put(NAME_CUSTOM_DUMP , SEC_CUSTOM_DUMP);
sectionIDMap.put(NAME_HEADER , SEC_HEADER);
sectionIDMap.put(NAME_KEYBOARDASSIGNMENT , SEC_KEYBOARDASSIGNMENT);
sectionIDMap.put(NAME_KNOBMAP_DUMP , SEC_KNOBMAP_DUMP);
sectionIDMap.put(NAME_MODULE_DUMP , SEC_MODULE_DUMP);
sectionIDMap.put(NAME_MORPHMAP_DUMP , SEC_MORPHMAP_DUMP);
sectionIDMap.put(NAME_NAME_DUMP , SEC_NAME_DUMP);
sectionIDMap.put(NAME_NOTE , SEC_NOTE);
sectionIDMap.put(NAME_PARAMETER_DUMP , SEC_PARAMETER_DUMP);
}
/**
* Returns the ID of the section.
* @param name name of the section
* @return the ID of the section
*/
public static int getSectionID(String name)
{
Integer id = sectionIDMap.get(name);
if (id != null)
{
return id.intValue();
}
else
{
return -1;
}
}
/**
* Returns the name of the section.
* @param ID ID of the section
* @return the name of the section
*/
public static String getSectionName(int ID)
{
switch (ID)
{
case SEC_CABLE_DUMP : return NAME_CABLE_DUMP;
case SEC_CTRLMAP_DUMP : return NAME_CTRLMAP_DUMP;
case SEC_CURRENTNOTE_DUMP : return NAME_CURRENTNOTE_DUMP;
case SEC_CUSTOM_DUMP : return NAME_CUSTOM_DUMP;
case SEC_HEADER : return NAME_HEADER;
case SEC_KEYBOARDASSIGNMENT : return NAME_KEYBOARDASSIGNMENT;
case SEC_KNOBMAP_DUMP : return NAME_KNOBMAP_DUMP;
case SEC_MODULE_DUMP : return NAME_MODULE_DUMP;
case SEC_MORPHMAP_DUMP : return NAME_MORPHMAP_DUMP;
case SEC_NAME_DUMP : return NAME_NAME_DUMP;
case SEC_NOTE : return NAME_NOTE;
case SEC_PARAMETER_DUMP : return NAME_PARAMETER_DUMP;
default:
throw new RuntimeException("unknown section[ID="+ID+"]");
//return null;
}
}
public static String getSectionName2(int ID)
{
switch (ID)
{
// PatchMessage section IDs
case S_NAME_1: return "Name 1";
case S_NAME_2: return "Name 2";
case S_HEADER: return NAME_HEADER;
case S_MODULE: return NAME_MODULE_DUMP;
case S_NOTE: return NAME_CURRENTNOTE_DUMP;
case S_CABLE: return NAME_CABLE_DUMP;
case S_MORPHMAP: return NAME_MORPHMAP_DUMP;
case S_KNOBMAP: return NAME_KNOBMAP_DUMP;
case S_CTRLMAP: return NAME_CTRLMAP_DUMP;
case S_CUSTOM: return NAME_CUSTOM_DUMP;
case S_NAMEDUMP: return NAME_NAME_DUMP;
case S_PARAMETER: return NAME_PARAMETER_DUMP;
default:
return null;
}
}
/**
* Returns the voice area ID.
*
* @param polyVoiceArea true if the ID of the poly voice area is expected and
* false if the ID of the common voice area is expected
* @return the voice area ID
*/
public static int getVoiceAreaID( boolean polyVoiceArea )
{
return polyVoiceArea ? VALUE_SECTION_VOICE_AREA_POLY : VALUE_SECTION_VOICE_AREA_COMMON;
}
/*
public static String getUnescapedNote(String s)
{
// replaces '\[' with '['
if (s.startsWith("["))
return null;
return s.replaceAll("\\\\\\[", "[");
}
public static String getEscapedNote(String s)
{
// replaces '[' with '\['
return s.replaceAll("\\[", "\\\\[");
}*/
public static String getUnescapedNote(String s)
{
// replaces '\[/' with '[/'
return s.replaceAll("\\\\\\[/", "[/");
}
public static String getEscapedNote(String s)
{
// replaces '[/' with '\[/'
return s.replaceAll("\\[/", "\\\\[/");
}
}