override public bool bind(Dictionary <String, LogicalInputDevice> logicalInputDeviceDict, Dictionary <String, SoundGenerator> soundGenerators) { // Builds out an actual Mapping based on the SimpleMapping. Dictionary <String, int> soundGeneratorChannelAssignments = new Dictionary <string, int>(); perDeviceChannelMappings.Clear(); foreach (PerDeviceSimpleMapping perDeviceSimpleMapping in perDeviceSimpleMappings) { Mapping.PerDeviceChannelMapping perDeviceChannelMapping = new Mapping.PerDeviceChannelMapping(perDeviceSimpleMapping.inputDeviceName, perDeviceSimpleMapping.inputDeviceChannel); foreach (SimpleMappingDefinition simpleMappingDefinition in perDeviceSimpleMapping.simpleMappingDefinitions) { NoteMapping noteMapping = new NoteMapping(); String soundGeneratorName = simpleMappingDefinition.soundGeneratorName; noteMapping.soundGeneratorName = soundGeneratorName; int soundGeneratorRelativeChannel = 0; if (soundGeneratorChannelAssignments.ContainsKey(soundGeneratorName)) { soundGeneratorRelativeChannel = soundGeneratorChannelAssignments[soundGeneratorName] + 1; soundGeneratorChannelAssignments[soundGeneratorName] = soundGeneratorRelativeChannel; } else { soundGeneratorRelativeChannel = 0; soundGeneratorChannelAssignments.Add(soundGeneratorName, 0); } noteMapping.soundGeneratorRelativeChannel = soundGeneratorRelativeChannel; if (perDeviceSimpleMapping.splitPoint == -1) { noteMapping.highestNote = 127; noteMapping.lowestNote = 0; } else if (simpleMappingDefinition.bLower == true) { noteMapping.highestNote = perDeviceSimpleMapping.splitPoint - 1; noteMapping.lowestNote = 0; } else { noteMapping.highestNote = 127; noteMapping.lowestNote = perDeviceSimpleMapping.splitPoint; } noteMapping.pitchOffset = simpleMappingDefinition.transpose; perDeviceChannelMapping.noteMappings.Add(noteMapping); MappingPatch mappingPatch = new MappingPatch(); mappingPatch.patchName = simpleMappingDefinition.programName; mappingPatch.soundGeneratorName = soundGeneratorName; mappingPatch.soundGeneratorRelativeChannel = soundGeneratorRelativeChannel; perDeviceChannelMapping.mappingPatches.Add(mappingPatch); if (simpleMappingDefinition.pbScale != 0) { PitchBendMapping pitchBendMapping = new PitchBendMapping(); pitchBendMapping.soundGeneratorName = soundGeneratorName; pitchBendMapping.soundGeneratorRelativeChannel = soundGeneratorRelativeChannel; pitchBendMapping.scale = simpleMappingDefinition.pbScale; perDeviceChannelMapping.pitchBendMappings.Add(pitchBendMapping); } if (simpleMappingDefinition.bEnaVolControl == true || simpleMappingDefinition.initialVolume >= 0) { // This may be a mapping only, it may be an initial value setting only, or it may be both ControlMapping ctlMapping = new ControlMapping(); ctlMapping.soundGeneratorName = soundGeneratorName; ctlMapping.soundGeneratorRelativeChannel = soundGeneratorRelativeChannel; ctlMapping.sourceControlNumber = (simpleMappingDefinition.bEnaVolControl == true) ? 7 : -1; ctlMapping.mappedControlNumber = 7; ctlMapping.initialValue = (simpleMappingDefinition.initialVolume >= 0) ? simpleMappingDefinition.initialVolume : 127; perDeviceChannelMapping.controlMappings.Add(ctlMapping); } if (simpleMappingDefinition.bEnaModControl == true) { ControlMapping ctlMapping = new ControlMapping(); ctlMapping.soundGeneratorName = soundGeneratorName; ctlMapping.soundGeneratorRelativeChannel = soundGeneratorRelativeChannel; ctlMapping.sourceControlNumber = 1; ctlMapping.mappedControlNumber = 1; ctlMapping.initialValue = 0; perDeviceChannelMapping.controlMappings.Add(ctlMapping); } if (simpleMappingDefinition.bEnaDamperControl == true) { ControlMapping ctlMapping = new ControlMapping(); ctlMapping.soundGeneratorName = soundGeneratorName; ctlMapping.soundGeneratorRelativeChannel = soundGeneratorRelativeChannel; ctlMapping.sourceControlNumber = 64; ctlMapping.mappedControlNumber = simpleMappingDefinition.damperRemap; ctlMapping.bToggle = simpleMappingDefinition.bDamplerToggle; // Special option for damper: toggle mode: ie for Leslie ctl. ctlMapping.initialValue = 0; perDeviceChannelMapping.controlMappings.Add(ctlMapping); } { // Kurzweil Artis Variation Button ControlMapping ctlMapping = new ControlMapping(); ctlMapping.soundGeneratorName = soundGeneratorName; ctlMapping.soundGeneratorRelativeChannel = soundGeneratorRelativeChannel; ctlMapping.sourceControlNumber = 0x1D; ctlMapping.mappedControlNumber = 0x1D; ctlMapping.initialValue = 0; perDeviceChannelMapping.controlMappings.Add(ctlMapping); } } perDeviceChannelMappings.Add(perDeviceChannelMapping.key, perDeviceChannelMapping); } return(base.bind(logicalInputDeviceDict, soundGenerators)); }
public bool Equals(ControlMapping other) { return((base.Equals(other)) && (sourceControlNumber == other.sourceControlNumber) && (mappedControlNumber == other.mappedControlNumber)); }