diff --git a/core/src/channel/mod.rs b/core/src/channel/mod.rs index 3992b4c..1a8bb26 100644 --- a/core/src/channel/mod.rs +++ b/core/src/channel/mod.rs @@ -149,6 +149,22 @@ impl Default for ChannelInitOptions { /// Represents a single MIDI channel within XSynth. /// /// Keeps track and manages MIDI events and the active voices of a channel. +/// +/// MIDI CC Support Chart: +/// - `CC0`: Bank Select +/// - `CC6`, `CC38`, `CC100`, `CC101`: RPN & NRPN +/// - `CC7`: Volume +/// - `CC8`: Balance +/// - `CC10`: Pan +/// - `CC11`: Expression +/// - `CC64`: Damper pedal +/// - `CC71`: Cutoff resonance +/// - `CC72`: Release time multiplier +/// - `CC73`: Attack time multiplier +/// - `CC74`: Cutoff frequency +/// - `CC120`: All sounds off +/// - `CC121`: Reset all controllers +/// - `CC123`: All notes off pub struct VoiceChannel { key_voices: Vec, @@ -391,7 +407,7 @@ impl VoiceChannel { let vol: f32 = value as f32 / 128.0; self.control_event_data.volume.set_end(vol); } - 0x0A => { + 0x0A | 0x08 => { // Pan let pan: f32 = value as f32 / 128.0; self.control_event_data.pan.set_end(pan); diff --git a/core/src/channel_group/mod.rs b/core/src/channel_group/mod.rs index 2eb5bac..06630f7 100644 --- a/core/src/channel_group/mod.rs +++ b/core/src/channel_group/mod.rs @@ -16,7 +16,8 @@ const MAX_EVENT_CACHE_SIZE: u32 = 1024 * 1024; /// Represents a MIDI synthesizer within XSynth. /// -/// Manages multiple VoiceChannel objects at once. +/// Manages multiple VoiceChannel objects at once. For info about MIDI CC +/// support, please see the documentation of the `VoiceChannel` struct. pub struct ChannelGroup { thread_pool: Option, cached_event_count: u32,