Mercurial > hg > touchkeys
changeset 36:0deac2806a7b
Preset support for the rest of the mappings.
author | Andrew McPherson <andrewm@eecs.qmul.ac.uk> |
---|---|
date | Fri, 21 Mar 2014 12:53:50 +0000 |
parents | 3f948746885a |
children | 239b039d3000 |
files | Source/Mappings/KeyDivision/TouchkeyKeyDivisionMappingFactory.cpp Source/Mappings/KeyDivision/TouchkeyKeyDivisionMappingFactory.h Source/Mappings/MultiFingerTrigger/TouchkeyMultiFingerTriggerMappingFactory.cpp Source/Mappings/MultiFingerTrigger/TouchkeyMultiFingerTriggerMappingFactory.h Source/Mappings/OnsetAngle/TouchkeyOnsetAngleMappingFactory.cpp Source/Mappings/OnsetAngle/TouchkeyOnsetAngleMappingFactory.h Source/Mappings/PitchBend/TouchkeyPitchBendMappingFactory.cpp Source/Mappings/PitchBend/TouchkeyPitchBendMappingFactory.h Source/Mappings/ReleaseAngle/TouchkeyReleaseAngleMappingFactory.cpp Source/Mappings/ReleaseAngle/TouchkeyReleaseAngleMappingFactory.h |
diffstat | 10 files changed, 194 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/Source/Mappings/KeyDivision/TouchkeyKeyDivisionMappingFactory.cpp Fri Mar 21 00:23:32 2014 +0000 +++ b/Source/Mappings/KeyDivision/TouchkeyKeyDivisionMappingFactory.cpp Fri Mar 21 12:53:50 2014 +0000 @@ -131,6 +131,38 @@ setBendParameters(); } + +// ****** Preset Save/Load ****** +XmlElement* TouchkeyKeyDivisionMappingFactory::getPreset() { + PropertySet properties; + + storeCommonProperties(properties); + + // No properties for now + + XmlElement* preset = properties.createXml("MappingFactory"); + preset->setAttribute("type", "KeyDivision"); + + return preset; +} + +bool TouchkeyKeyDivisionMappingFactory::loadPreset(XmlElement const* preset) { + if(preset == 0) + return false; + + PropertySet properties; + properties.restoreFromXml(*preset); + + if(!loadCommonProperties(properties)) + return false; + + // Nothing specific to do for now + + return true; +} + +// ***** Private Methods ***** + // Set the initial parameters for a new mapping void TouchkeyKeyDivisionMappingFactory::initializeMappingParameters(int noteNumber, TouchkeyKeyDivisionMapping *mapping) { // KLUDGE: testing Maqam tunings. Go from absolute tunings in cents to pitch bends in semitones
--- a/Source/Mappings/KeyDivision/TouchkeyKeyDivisionMappingFactory.h Fri Mar 21 00:23:32 2014 +0000 +++ b/Source/Mappings/KeyDivision/TouchkeyKeyDivisionMappingFactory.h Fri Mar 21 12:53:50 2014 +0000 @@ -83,6 +83,10 @@ globalOffsetCents_ = offsetCents; } + // ****** Preset Save/Load ****** + XmlElement* getPreset(); + bool loadPreset(XmlElement const* preset); + private: // ***** Private Methods ***** void initializeMappingParameters(int noteNumber, TouchkeyKeyDivisionMapping *mapping);
--- a/Source/Mappings/MultiFingerTrigger/TouchkeyMultiFingerTriggerMappingFactory.cpp Fri Mar 21 00:23:32 2014 +0000 +++ b/Source/Mappings/MultiFingerTrigger/TouchkeyMultiFingerTriggerMappingFactory.cpp Fri Mar 21 12:53:50 2014 +0000 @@ -23,3 +23,32 @@ */ #include "TouchkeyMultiFingerTriggerMappingFactory.h" + +// ****** Preset Save/Load ****** +XmlElement* TouchkeyMultiFingerTriggerMappingFactory::getPreset() { + PropertySet properties; + + storeCommonProperties(properties); + + // No properties for now + + XmlElement* preset = properties.createXml("MappingFactory"); + preset->setAttribute("type", "MultiFingerTrigger"); + + return preset; +} + +bool TouchkeyMultiFingerTriggerMappingFactory::loadPreset(XmlElement const* preset) { + if(preset == 0) + return false; + + PropertySet properties; + properties.restoreFromXml(*preset); + + if(!loadCommonProperties(properties)) + return false; + + // Nothing specific to do for now + + return true; +}
--- a/Source/Mappings/MultiFingerTrigger/TouchkeyMultiFingerTriggerMappingFactory.h Fri Mar 21 00:23:32 2014 +0000 +++ b/Source/Mappings/MultiFingerTrigger/TouchkeyMultiFingerTriggerMappingFactory.h Fri Mar 21 12:53:50 2014 +0000 @@ -46,6 +46,10 @@ // ***** Accessors / Modifiers ***** virtual const std::string factoryTypeName() { return "Multi-Finger\nTrigger"; } + + // ****** Preset Save/Load ****** + XmlElement* getPreset(); + bool loadPreset(XmlElement const* preset); }; #endif /* defined(__TouchKeys__TouchkeyMultiFingerTriggerMappingFactory__) */
--- a/Source/Mappings/OnsetAngle/TouchkeyOnsetAngleMappingFactory.cpp Fri Mar 21 00:23:32 2014 +0000 +++ b/Source/Mappings/OnsetAngle/TouchkeyOnsetAngleMappingFactory.cpp Fri Mar 21 12:53:50 2014 +0000 @@ -34,6 +34,35 @@ setMidiParameters(MidiKeyboardSegment::kControlPitchWheel, -2.0, 2.0, 0.0); } +// ****** Preset Save/Load ****** +XmlElement* TouchkeyOnsetAngleMappingFactory::getPreset() { + PropertySet properties; + + storeCommonProperties(properties); + + // No properties for now + + XmlElement* preset = properties.createXml("MappingFactory"); + preset->setAttribute("type", "OnsetAngle"); + + return preset; +} + +bool TouchkeyOnsetAngleMappingFactory::loadPreset(XmlElement const* preset) { + if(preset == 0) + return false; + + PropertySet properties; + properties.restoreFromXml(*preset); + + if(!loadCommonProperties(properties)) + return false; + + // Nothing specific to do for now + + return true; +} + // MIDI note ended: see whether the mapping was suspended and if not, execute the angle calculation void TouchkeyOnsetAngleMappingFactory::midiNoteOn(int noteNumber, bool touchIsOn, bool keyMotionActive, Node<KeyTouchFrame>* touchBuffer,
--- a/Source/Mappings/OnsetAngle/TouchkeyOnsetAngleMappingFactory.h Fri Mar 21 00:23:32 2014 +0000 +++ b/Source/Mappings/OnsetAngle/TouchkeyOnsetAngleMappingFactory.h Fri Mar 21 12:53:50 2014 +0000 @@ -47,6 +47,10 @@ virtual const std::string factoryTypeName() { return "Onset\nAngle"; } + // ****** Preset Save/Load ****** + XmlElement* getPreset(); + bool loadPreset(XmlElement const* preset); + // ***** State Updaters ***** // Override the MIDI note on method to process the onset angle
--- a/Source/Mappings/PitchBend/TouchkeyPitchBendMappingFactory.cpp Fri Mar 21 00:23:32 2014 +0000 +++ b/Source/Mappings/PitchBend/TouchkeyPitchBendMappingFactory.cpp Fri Mar 21 12:53:50 2014 +0000 @@ -126,6 +126,61 @@ return new TouchkeyPitchBendMappingShortEditor(*this); } +// ****** Preset Save/Load ****** +XmlElement* TouchkeyPitchBendMappingFactory::getPreset() { + PropertySet properties; + + storeCommonProperties(properties); + + properties.setValue("bendRangeSemitones", bendRangeSemitones_); + properties.setValue("bendThresholdSemitones", bendThresholdSemitones_); + properties.setValue("bendThresholdKeyLength", bendThresholdKeyLength_); + properties.setValue("bendMode", bendMode_); + properties.setValue("fixedModeMinEnableDistance", fixedModeMinEnableDistance_); + properties.setValue("fixedModeBufferDistance", fixedModeBufferDistance_); + properties.setValue("bendIgnoresTwoFingers", bendIgnoresTwoFingers_); + properties.setValue("bendIgnoresThreeFingers", bendIgnoresThreeFingers_); + + XmlElement* preset = properties.createXml("MappingFactory"); + preset->setAttribute("type", "PitchBend"); + + return preset; +} + +bool TouchkeyPitchBendMappingFactory::loadPreset(XmlElement const* preset) { + if(preset == 0) + return false; + + PropertySet properties; + properties.restoreFromXml(*preset); + + if(!loadCommonProperties(properties)) + return false; + if(!properties.containsKey("bendRangeSemitones") || + !properties.containsKey("bendThresholdSemitones") || + !properties.containsKey("bendThresholdKeyLength") || + !properties.containsKey("bendMode") || + !properties.containsKey("fixedModeMinEnableDistance") || + !properties.containsKey("fixedModeBufferDistance") || + !properties.containsKey("bendIgnoresTwoFingers") || + !properties.containsKey("bendIgnoresThreeFingers")) + return false; + + bendRangeSemitones_ = properties.getDoubleValue("bendRangeSemitones"); + bendThresholdSemitones_ = properties.getDoubleValue("bendThresholdSemitones"); + bendThresholdKeyLength_ = properties.getDoubleValue("bendThresholdKeyLength"); + bendMode_ = properties.getIntValue("bendMode"); + fixedModeMinEnableDistance_ = properties.getDoubleValue("fixedModeMinEnableDistance"); + fixedModeBufferDistance_ = properties.getDoubleValue("fixedModeBufferDistance"); + bendIgnoresTwoFingers_ = properties.getBoolValue("bendIgnoresTwoFingers"); + bendIgnoresThreeFingers_ = properties.getBoolValue("bendIgnoresThreeFingers"); + + // Update MIDI information + setBendParameters(); + + return true; +} + // ***** Private Methods ***** // Set the initial parameters for a new mapping
--- a/Source/Mappings/PitchBend/TouchkeyPitchBendMappingFactory.h Fri Mar 21 00:23:32 2014 +0000 +++ b/Source/Mappings/PitchBend/TouchkeyPitchBendMappingFactory.h Fri Mar 21 12:53:50 2014 +0000 @@ -74,6 +74,10 @@ bool hasExtendedEditor() { return false; } MappingEditorComponent* createExtendedEditor() { return nullptr; } + // ****** Preset Save/Load ****** + XmlElement* getPreset(); + bool loadPreset(XmlElement const* preset); + private: // ***** Private Methods ***** void initializeMappingParameters(int noteNumber, TouchkeyPitchBendMapping *mapping);
--- a/Source/Mappings/ReleaseAngle/TouchkeyReleaseAngleMappingFactory.cpp Fri Mar 21 00:23:32 2014 +0000 +++ b/Source/Mappings/ReleaseAngle/TouchkeyReleaseAngleMappingFactory.cpp Fri Mar 21 12:53:50 2014 +0000 @@ -31,6 +31,35 @@ TouchkeyReleaseAngleMappingFactory::TouchkeyReleaseAngleMappingFactory(PianoKeyboard &keyboard, MidiKeyboardSegment& segment) : TouchkeyBaseMappingFactory<TouchkeyReleaseAngleMapping>(keyboard, segment) {} +// ****** Preset Save/Load ****** +XmlElement* TouchkeyReleaseAngleMappingFactory::getPreset() { + PropertySet properties; + + storeCommonProperties(properties); + + // No properties for now + + XmlElement* preset = properties.createXml("MappingFactory"); + preset->setAttribute("type", "ReleaseAngle"); + + return preset; +} + +bool TouchkeyReleaseAngleMappingFactory::loadPreset(XmlElement const* preset) { + if(preset == 0) + return false; + + PropertySet properties; + properties.restoreFromXml(*preset); + + if(!loadCommonProperties(properties)) + return false; + + // Nothing specific to do for now + + return true; +} + // MIDI note ended: see whether the mapping was suspended and if not, execute the angle calculation void TouchkeyReleaseAngleMappingFactory::midiNoteOff(int noteNumber, bool touchIsOn, bool keyMotionActive, Node<KeyTouchFrame>* touchBuffer,
--- a/Source/Mappings/ReleaseAngle/TouchkeyReleaseAngleMappingFactory.h Fri Mar 21 00:23:32 2014 +0000 +++ b/Source/Mappings/ReleaseAngle/TouchkeyReleaseAngleMappingFactory.h Fri Mar 21 12:53:50 2014 +0000 @@ -46,6 +46,10 @@ // ***** Accessors / Modifiers ***** virtual const std::string factoryTypeName() { return "Release\nAngle"; } + // ****** Preset Save/Load ****** + XmlElement* getPreset(); + bool loadPreset(XmlElement const* preset); + // ***** State Updaters ***** // Override the MIDI note off method to process the release angle