|
Next revision
Both sides next revision
|
dev:control_changes [2020/04/22 02:06] tedfelix created |
dev:control_changes [2020/04/22 02:12] tedfelix |
====== Control Changes ====== | ====== Control Changes ====== |
| |
| The code that sends out control Changes in Rosegarden is pretty convoluted. This document points out the key areas of interest. Hopefully this will ease future maintenance. |
| |
===== Allow Reset All Controllers (CC 121) ===== | ===== Allow Reset All Controllers (CC 121) ===== |
Edit > Preferences... > MIDI > General tab | Edit > Preferences... > MIDI > General tab |
| |
The MIDI preferences are displayed by the MIDIConfigurationPage class. The preference itself is stored in Rosegarden.conf as follows: | The MIDI preferences are displayed by the ''MIDIConfigurationPage'' class. The preference itself is stored in Rosegarden.conf as follows: |
| |
[Sequencer_Options] | [Sequencer_Options] |
===== Manage Controllers dialog ===== | ===== Manage Controllers dialog ===== |
| |
The ControlEditorDialog class is the "Manage Controllers" dialog. | The ''ControlEditorDialog'' class is the "Manage Controllers" dialog. |
| |
//A better name for this class might be "ManageControllers".// | //A better name for this class might be "''ManageControllers''".// |
| |
Controllers can be added, modified and deleted here. Deleting a controller here will prevent it from ever being sent out at composition load time, and playback time. | Controllers can be added, modified and deleted here. Deleting a controller here will prevent it from ever being sent out at composition load time, and playback time. |
===== MIDI Instrument Parameters ===== | ===== MIDI Instrument Parameters ===== |
| |
The MIDIInstrumentParameterPanel class is the "Instrument Parameters" panel that appears in the lower left when a MIDI track is selected. Here the user can adjust the initial settings for the various controllers that were configured in the "Manage Controllers" dialog for a Device. | The ''MIDIInstrumentParameterPanel'' class is the "Instrument Parameters" panel that appears in the lower left when a MIDI track is selected. Here the user can adjust the initial settings for the various controllers that were configured in the "Manage Controllers" dialog for a Device. |
| |
===== Controller Rulers ===== | ===== Controller Rulers ===== |
| |
The ControllerEventsRuler class provides the controller rulers that can be displayed in both the Matrix and Notation editors. These can be enabled from both editors by: | The ''ControllerEventsRuler'' class provides the controller rulers that can be displayed in both the Matrix and Notation editors. These can be enabled from both editors by: |
| |
View > Rulers > Add Control Ruler > ... | View > Rulers > Add Control Ruler > ... |
===== Controller Sequence dialog ===== | ===== Controller Sequence dialog ===== |
| |
The PitchbendSequenceDialog class provides both the controller sequence dialogs and the "PitchBend Sequence" dialog. | The ''PitchbendSequenceDialog'' class provides both the controller sequence dialogs and the "PitchBend Sequence" dialog. |
| |
These dialogs are accessible from both the Matrix and Notation editors: | These dialogs are accessible from both the Matrix and Notation editors: |
| |
* Called when a new Composition is loaded. | * Called when a new Composition is loaded. |
* Calls RosegardenDocument::initialiseStudio() | * Calls ''RosegardenDocument::initialiseStudio()'' |
| |
==== RosegardenDocument::initialiseStudio() ==== | ==== RosegardenDocument::initialiseStudio() ==== |
| |
* Calls Instrument::sendChannelSetup() | * Calls ''Instrument::sendChannelSetup()'' |
| |
==== Instrument::sendChannelSetup() ==== | ==== Instrument::sendChannelSetup() ==== |
==== InternalSegmentMapper::makeReady() ==== | ==== InternalSegmentMapper::makeReady() ==== |
| |
* Calls InternalSegmentMapper::getControllers() to get the controllers that are needed for a channel setup. | * Calls ''InternalSegmentMapper::getControllers()'' to get the controllers that are needed for a channel setup. |
* Calls ChannelManager::makeReady() to set up the channel. | * Calls ''ChannelManager::makeReady()'' to set up the channel. |
| |
==== InternalSegmentMapper::getControllers() ==== | ==== InternalSegmentMapper::getControllers() ==== |
| |
* Eventually calls ControllerContextMap::getControllerValue() which gets the current CC values when in the middle of a Segment. | * Eventually calls ''ControllerContextMap::getControllerValue()'' which gets the current CC values when in the middle of a Segment. |
| |
==== ControllerContextMap ==== | ==== ControllerContextMap ==== |
| |
* A map of CC values over the course of a Segment. | * A map of CC values over the course of a ''Segment''. |
* Can be queried to find out the last CC that was sent prior to a given time. | * Can be queried to find out the last CC that was sent prior to a given time. |
| |
==== ChannelManager::makeReady() ==== | ==== ChannelManager::makeReady() ==== |
| |
* If playback is starting in the middle of the Segment, sends out a channel setup. | * If playback is starting in the middle of the ''Segment'', sends out a channel setup. |
| |
===== Control Changes at MIDI File Export ===== | ===== Control Changes at MIDI File Export ===== |