From 92544a793286af01988028358d518ac8165abc33 Mon Sep 17 00:00:00 2001 From: Vesa Date: Thu, 26 Jun 2014 19:21:16 +0300 Subject: [PATCH] What's this strings for Monstro --- plugins/monstro/Monstro.cpp | 149 +++++++++++++++++++++++++++++++++++- 1 file changed, 145 insertions(+), 4 deletions(-) diff --git a/plugins/monstro/Monstro.cpp b/plugins/monstro/Monstro.cpp index aa61187bd..e34acc2fe 100644 --- a/plugins/monstro/Monstro.cpp +++ b/plugins/monstro/Monstro.cpp @@ -142,7 +142,7 @@ void MonstroSynth::renderOutput( fpp_t _frames, sampleFrame * _buf ) if( mod##_e1 != 0.0f ) car += m_env1_buf[f] * mod##_e1; \ if( mod##_e2 != 0.0f ) car += m_env2_buf[f] * mod##_e2; \ if( mod##_l1 != 0.0f ) car += m_lfo1_buf[f] * mod##_l1; \ - if( mod##_l2 != 0.0f ) car += m_lfo2_buf[f] * mod##_l2; + if( mod##_l2 != 0.0f ) car += m_lfo2_buf[f] * mod##_l2; #define modulatephs( car, mod ) \ if( mod##_e1 != 0.0f ) car += m_env1_buf[f] * mod##_e1; \ @@ -1673,12 +1673,29 @@ MonstroView::MonstroView( Instrument * _instrument, m_opViewButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "opview_active" ) ); m_opViewButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "opview_inactive" ) ); toolTip::add( m_opViewButton, tr( "Operators view" ) ); + m_opViewButton -> setWhatsThis( tr( "The Operators view contains all the operators. These include both audible " + "operators (oscillators) and inaudible operators, or modulators: " + "Low-frequency oscillators and Envelopes. " + "Knobs and other widgets in the Operators view have their own what's this -texts, " + "so you can get more specific help for them that way. " ) ); pixmapButton * m_matViewButton = new pixmapButton( this, NULL ); m_matViewButton -> move( 125,0 ); m_matViewButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "matview_active" ) ); m_matViewButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "matview_inactive" ) ); toolTip::add( m_matViewButton, tr( "Matrix view" ) ); + m_matViewButton -> setWhatsThis( tr( "The Matrix view contains the modulation matrix. Here you can define " + "the modulation relationships between the various operators: Each " + "audible operator (oscillators 1-3) has 3-4 properties that can be " + "modulated by any of the modulators. Using more modulations consumes " + "more CPU power. " + "The view is divided to modulation targets, grouped by the target oscillator. " + "Available targets are volume, pitch, phase, pulse width and sub-osc ratio. " + "Note: some targets are specific to one oscillator only. " + "Each modulation target has 4 knobs, one for each modulator. By default " + "the knobs are at 0, which means no modulation. Turning a knob to 1 causes " + "that modulator to affect the modulation target as much as possible. Turning " + "it to -1 does the same, but the modulation is inversed. " ) ); m_selectedViewGroup = new automatableButtonGroup( this ); m_selectedViewGroup -> addButton( m_opViewButton ); @@ -1850,7 +1867,7 @@ QWidget * MonstroView::setupOperatorsView( QWidget * _parent ) makeknob( m_osc1VolKnob, KNOBCOL1, O1ROW, "Volume", "%", "osc1Knob" ) makeknob( m_osc1PanKnob, KNOBCOL2, O1ROW, "Panning", "", "osc1Knob" ) - makeknob( m_osc1CrsKnob, KNOBCOL3, O1ROW, "Coarse detune", " seminotes", "osc1Knob" ) + makeknob( m_osc1CrsKnob, KNOBCOL3, O1ROW, "Coarse detune", " semitones", "osc1Knob" ) makeknob( m_osc1FtlKnob, KNOBCOL4, O1ROW, "Finetune left", " cents", "osc1Knob" ) makeknob( m_osc1FtrKnob, KNOBCOL5, O1ROW, "Finetune right", " cents", "osc1Knob" ) makeknob( m_osc1SpoKnob, KNOBCOL6, O1ROW, "Stereo phase offset", " deg", "osc1Knob" ) @@ -1863,7 +1880,7 @@ QWidget * MonstroView::setupOperatorsView( QWidget * _parent ) makeknob( m_osc2VolKnob, KNOBCOL1, O2ROW, "Volume", "%", "osc2Knob" ) makeknob( m_osc2PanKnob, KNOBCOL2, O2ROW, "Panning", "", "osc2Knob" ) - makeknob( m_osc2CrsKnob, KNOBCOL3, O2ROW, "Coarse detune", " seminotes", "osc2Knob" ) + makeknob( m_osc2CrsKnob, KNOBCOL3, O2ROW, "Coarse detune", " semitones", "osc2Knob" ) makeknob( m_osc2FtlKnob, KNOBCOL4, O2ROW, "Finetune left", " cents", "osc2Knob" ) makeknob( m_osc2FtrKnob, KNOBCOL5, O2ROW, "Finetune right", " cents", "osc2Knob" ) makeknob( m_osc2SpoKnob, KNOBCOL6, O2ROW, "Stereo phase offset", " deg", "osc2Knob" ) @@ -1879,7 +1896,7 @@ QWidget * MonstroView::setupOperatorsView( QWidget * _parent ) makeknob( m_osc3VolKnob, KNOBCOL1, O3ROW, "Volume", "%", "osc3Knob" ) makeknob( m_osc3PanKnob, KNOBCOL2, O3ROW, "Panning", "", "osc3Knob" ) - makeknob( m_osc3CrsKnob, KNOBCOL3, O3ROW, "Coarse detune", " seminotes", "osc3Knob" ) + makeknob( m_osc3CrsKnob, KNOBCOL3, O3ROW, "Coarse detune", " semitones", "osc3Knob" ) makeknob( m_osc3SpoKnob, KNOBCOL4, O3ROW, "Stereo phase offset", " deg", "osc3Knob" ) makeknob( m_osc3SubKnob, KNOBCOL5, O3ROW, "Sub-osc mix", "", "osc3Knob" ) @@ -1957,6 +1974,130 @@ QWidget * MonstroView::setupOperatorsView( QWidget * _parent ) m_o23ModGroup-> addButton( m_fmButton ); m_o23ModGroup-> addButton( m_pmButton ); + + +//////////////////////////////////// +// // +// whatsthis-information strings // +// // +//////////////////////////////////// + + m_osc1CrsKnob -> setWhatsThis( tr( "The CRS knob changes the tuning of oscillator 1 in semitone steps. " ) ); + m_osc2CrsKnob -> setWhatsThis( tr( "The CRS knob changes the tuning of oscillator 2 in semitone steps. " ) ); + m_osc3CrsKnob -> setWhatsThis( tr( "The CRS knob changes the tuning of oscillator 3 in semitone steps. " ) ); + m_osc1FtlKnob -> setWhatsThis( tr( "FTL and FTR change the finetuning of the oscillator for left and right " + "channels respectively. These can add stereo-detuning to the oscillator " + "which widens the stereo image and causes an illusion of space. " ) ); + m_osc1FtrKnob -> setWhatsThis( tr( "FTL and FTR change the finetuning of the oscillator for left and right " + "channels respectively. These can add stereo-detuning to the oscillator " + "which widens the stereo image and causes an illusion of space. " ) ); + m_osc2FtlKnob -> setWhatsThis( tr( "FTL and FTR change the finetuning of the oscillator for left and right " + "channels respectively. These can add stereo-detuning to the oscillator " + "which widens the stereo image and causes an illusion of space. " ) ); + m_osc2FtrKnob -> setWhatsThis( tr( "FTL and FTR change the finetuning of the oscillator for left and right " + "channels respectively. These can add stereo-detuning to the oscillator " + "which widens the stereo image and causes an illusion of space. " ) ); + m_osc1SpoKnob -> setWhatsThis( tr( "The SPO knob modifies the difference in phase between left and right " + "channels. Higher difference creates a wider stereo image. " ) ); + m_osc2SpoKnob -> setWhatsThis( tr( "The SPO knob modifies the difference in phase between left and right " + "channels. Higher difference creates a wider stereo image. " ) ); + m_osc3SpoKnob -> setWhatsThis( tr( "The SPO knob modifies the difference in phase between left and right " + "channels. Higher difference creates a wider stereo image. " ) ); + m_osc1PwKnob -> setWhatsThis( tr( "The PW knob controls the pulse width, also known as duty cycle, " + "of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, " + "it doesn't produce bandlimited output, which means that you can " + "use it as an audible oscillator but it will cause aliasing. You can " + "also use it as an inaudible source of a sync signal, which can be " + "used to synchronize oscillators 2 and 3. " ) ); + m_osc1SSRButton -> setWhatsThis( tr( "Send Sync on Rise: When enabled, the Sync signal is sent every time " + "the state of oscillator 1 changes from low to high, ie. when the amplitude " + "changes from -1 to 1. " + "Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, " + "but its volume has no effect on them. Sync signals are sent independently " + "for both left and right channels. " ) ); + m_osc1SSFButton -> setWhatsThis( tr( "Send Sync on Fall: When enabled, the Sync signal is sent every time " + "the state of oscillator 1 changes from high to low, ie. when the amplitude " + "changes from 1 to -1. " + "Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, " + "but its volume has no effect on them. Sync signals are sent independently " + "for both left and right channels. " ) ); + m_osc2SyncHButton -> setWhatsThis( tr( "Hard sync: Every time the oscillator receives a sync signal from oscillator 1, " + "its phase is reset to 0 + whatever its phase offset is. " ) ); + m_osc3SyncHButton -> setWhatsThis( tr( "Hard sync: Every time the oscillator receives a sync signal from oscillator 1, " + "its phase is reset to 0 + whatever its phase offset is. " ) ); + m_osc2SyncRButton -> setWhatsThis( tr( "Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, " + "the amplitude of the oscillator gets inverted. " ) ); + m_osc3SyncRButton -> setWhatsThis( tr( "Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, " + "the amplitude of the oscillator gets inverted. " ) ); + m_osc2WaveBox -> setWhatsThis( tr( "Choose waveform for oscillator 2. " ) ); + m_osc3Wave1Box -> setWhatsThis( tr( "Choose waveform for oscillator 3's first sub-osc. " + "Oscillator 3 can smoothly interpolate between two different waveforms. " ) ); + m_osc3Wave2Box -> setWhatsThis( tr( "Choose waveform for oscillator 3's second sub-osc. " + "Oscillator 3 can smoothly interpolate between two different waveforms. " ) ); + m_osc3SubKnob -> setWhatsThis( tr( "The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. " + "Each sub-osc can be set to produce a different waveform, and oscillator 3 " + "can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied " + "to both sub-oscs/waveforms in the exact same way. " ) ); + m_mixButton -> setWhatsThis( tr( "In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by " + "the output of oscillator 2. " + "Mix mode means no modulation: the outputs of the oscillators are simply mixed together. " ) ); + m_amButton -> setWhatsThis( tr( "In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by " + "the output of oscillator 2. " + "AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. " ) ); + m_fmButton -> setWhatsThis( tr( "In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by " + "the output of oscillator 2. " + "FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. " + "The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch " + "than \"pure\" frequency modulation. " ) ); + m_pmButton -> setWhatsThis( tr( "In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by " + "the output of oscillator 2. " + "PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. " + "It differs from frequency modulation in that the phase changes are not cumulative. " ) ); + m_lfo1WaveBox -> setWhatsThis( tr( "Select the waveform for LFO 1. " + "\"Random\" and \"Random smooth\" are special waveforms: " + "they produce random output, where the rate of the LFO controls how often " + "the state of the LFO changes. The smooth version interpolates between these " + "states with cosine interpolation. These random modes can be used to give " + "\"life\" to your presets - add some of that analog unpredictability... " ) ); + m_lfo2WaveBox -> setWhatsThis( tr( "Select the waveform for LFO 2. " + "\"Random\" and \"Random smooth\" are special waveforms: " + "they produce random output, where the rate of the LFO controls how often " + "the state of the LFO changes. The smooth version interpolates between these " + "states with cosine interpolation. These random modes can be used to give " + "\"life\" to your presets - add some of that analog unpredictability... " ) ); + m_lfo1AttKnob -> setWhatsThis( tr( "Attack causes the LFO to come on gradually from the start of the note. " ) ); + m_lfo2AttKnob -> setWhatsThis( tr( "Attack causes the LFO to come on gradually from the start of the note. " ) ); + m_lfo1RateKnob -> setWhatsThis( tr( "Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. " ) ); + m_lfo2RateKnob -> setWhatsThis( tr( "Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. " ) ); + m_lfo1PhsKnob -> setWhatsThis( tr( "PHS controls the phase offset of the LFO. " ) ); + m_lfo2PhsKnob -> setWhatsThis( tr( "PHS controls the phase offset of the LFO. " ) ); + + m_env1PreKnob -> setWhatsThis( tr( "PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. " ) ); + m_env2PreKnob -> setWhatsThis( tr( "PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. " ) ); + m_env1AttKnob -> setWhatsThis( tr( "ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. " + "A value of 0 means instant. " ) ); + m_env2AttKnob -> setWhatsThis( tr( "ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. " + "A value of 0 means instant. " ) ); + m_env1HoldKnob -> setWhatsThis( tr( "HOLD controls how long the envelope stays at peak after the attack phase. " ) ); + m_env2HoldKnob -> setWhatsThis( tr( "HOLD controls how long the envelope stays at peak after the attack phase. " ) ); + m_env1DecKnob -> setWhatsThis( tr( "DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds " + "it would take to go from peak to zero. The actual decay may be shorter if sustain is used. ") ); + m_env2DecKnob -> setWhatsThis( tr( "DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds " + "it would take to go from peak to zero. The actual decay may be shorter if sustain is used. ") ); + m_env1SusKnob -> setWhatsThis( tr( "SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level " + "as long as the note is held. " ) ); + m_env2SusKnob -> setWhatsThis( tr( "SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level " + "as long as the note is held. " ) ); + m_env1RelKnob -> setWhatsThis( tr( "REL, or release, controls how long the release is for the note, measured in how long it would take to " + "fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. ") ); + m_env2RelKnob -> setWhatsThis( tr( "REL, or release, controls how long the release is for the note, measured in how long it would take to " + "fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. ") ); + m_env1SlopeKnob -> setWhatsThis( tr( "The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. " + "Negative values create curves that start slowly, peak quickly and fall of slowly again. " + "Positive values create curves that start and end quickly, and stay longer near the peaks. " ) ); + m_env2SlopeKnob -> setWhatsThis( tr( "The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. " + "Negative values create curves that start slowly, peak quickly and fall of slowly again. " + "Positive values create curves that start and end quickly, and stay longer near the peaks. " ) ); return( view ); }