Differences

This shows you the differences between two versions of the page.

Link to this comparison view

dev:control_changes [2021/01/31 00:19]
tedfelix
dev:control_changes [2022/05/06 16:07]
Line 1: Line 1:
-====== 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. 
- 
-Note that code related to sending out Bank Selects and Program Changes can be found along with the code related to Control Changes.  This will be pointed out below. 
- 
-===== Allow Reset All Controllers (CC 121) ===== 
- 
-This preference sends a CC 121 at file load and at playback in the middle of a Segment.  The 121 happens prior to sending any other controllers to set up the channel. 
- 
-The user can turn this on and off in the MIDI preferences: 
- 
-  Edit > Preferences... > MIDI > General tab 
- 
-The MIDI preferences are displayed by the ''MIDIConfigurationPage'' class.  The preference itself is stored in Rosegarden.conf as follows: 
- 
-  [Sequencer_Options] 
-  allowresetallcontrollers=true 
- 
-===== Force Channel Setups ===== 
- 
-This is a preference that is only available via the Rosegarden.conf file. 
- 
-  [Sequencer_Options] 
-  forceChannelSetups=false 
- 
-When set to true, channel setups will be sent out every time play is pressed.  If outside of a Segment, the channel setups will be based on the track values in the Instrument Parameters panel (MIPP). 
- 
-The default for this preference is false. 
- 
-===== Manage Controllers dialog ===== 
- 
-To get there: Studio > Manage MIDI Devices > pick a playback device > Controllers... 
- 
-The ''ControlEditorDialog'' class is the "Manage Controllers" dialog. 
-     
-//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. 
- 
-===== 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. 
- 
-===== 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: 
- 
-  View > Rulers > Add Control Ruler > ... 
- 
-Or for the pitchbend ruler: 
- 
-  View > Rulers > Show Pitch Bend Ruler 
- 
-===== Controller 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: 
- 
-  Controllers > Insert Controller Sequence... 
-  Controllers > Insert Pitch Bend Sequence... 
- 
-Both of these dialogs require that a note be selected in order to launch them.  The menu items will be disabled if no note is selected.  Also, for the controller sequence dialog, a controller ruler must be enabled and selected. 
- 
-===== Control Changes at Composition Load ===== 
- 
-Call diagram.  ">" means "calls". 
- 
-<file> 
-- RosegardenMainWindow::setDocument() 
-  > RosegardenDocument::initialiseStudio() 
-    > RosegardenDocument::sendChannelSetups()  (added January 2021) 
-      > Instrument::sendChannelSetup() 
-</file> 
- 
-==== RosegardenMainWindow::setDocument() ==== 
- 
-  * Called when a new Composition is loaded. 
-  * Calls ''RosegardenDocument::initialiseStudio()'' 
- 
-==== RosegardenDocument::initialiseStudio() ==== 
- 
-  * Calls ''RosegardenDocument::sendChannelSetups()'' 
- 
-==== RosegardenDocument::sendChannelSetups() ==== 
- 
-  * Added January 2021. 
-  * Calls ''Instrument::sendChannelSetup()'' 
- 
-==== Instrument::sendChannelSetup() ==== 
- 
-  * Sends the channel setups at file load time. 
-  * Sends BS/PC for the channel as well. 
-  * This also might be the code that sends channel setups at the beginning of a MIDI File export. 
- 
-===== Control Changes at Playback ===== 
- 
-<file> 
-- InternalSegmentMapper::makeReady() 
-  > InternalSegmentMapper::getControllers() 
-    > InternalSegmentMapper::getControllerValue() 
-      > ControllerContextMap::getControllerValue() 
-  > ChannelManager::makeReady() 
-</file> 
- 
-==== InternalSegmentMapper::makeReady() ==== 
- 
-  * Calls ''InternalSegmentMapper::getControllers()'' to get the controllers that are needed for a channel setup. 
-  * Calls ''ChannelManager::makeReady()'' to set up the channel. 
- 
-==== InternalSegmentMapper::getControllers() ==== 
- 
-  * Eventually calls ''ControllerContextMap::getControllerValue()'' which gets the current CC values when in the middle of a Segment. 
- 
-==== ControllerContextMap ==== 
- 
-  * 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. 
- 
-==== ChannelManager::makeReady() ==== 
- 
-  * If playback is starting in the middle of the ''Segment'', sends out a channel setup. 
- 
-===== Control Changes at MIDI File Export ===== 
- 
-If changes are made to the way CCs are sent, MIDI export needs to be regression tested to make sure nothing breaks. 
- 
-//I need to expand this at some point.  MIDI Export reuses some portion of the above.// 
  
 
 
dev/control_changes.txt ยท Last modified: 2022/05/06 16:07 (external edit)
Recent changes RSS feed Creative Commons License Valid XHTML 1.0 Valid CSS Driven by DokuWiki