/[svn]/linuxsampler/trunk/src/engines/LFO.h
ViewVC logotype

Annotation of /linuxsampler/trunk/src/engines/LFO.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3625 - (hide annotations) (download) (as text)
Thu Oct 3 13:37:25 2019 UTC (4 years, 7 months ago) by schoenebeck
File MIME type: text/x-c++hdr
File size: 4538 byte(s)
* gig format extension: Added support for different LFO wave forms
  (currently either sine [default], triangle, saw or square).

* gig format extension: Added support for LFO phase displacement
  (0°..360°).

* gig format extension: Added support for flipping LFO polarity on LFO 3
  (in the original gig format this was only available for LFO 1 and LFO 2).

* Bumped version (2.1.1.svn22).

1 schoenebeck 3612 /*
2     * Copyright (c) 2019 Christian Schoenebeck
3     *
4     * http://www.linuxsampler.org
5     *
6     * This file is part of LinuxSampler and released under the same terms.
7     * See README file for details.
8     */
9    
10     #ifndef LS_LFO_H
11     #define LS_LFO_H
12    
13     #include "../common/global.h"
14     #include "../common/optional.h"
15    
16     namespace LinuxSampler {
17    
18     // *************** types ***************
19     // *
20    
21     /** @brief Low Frequency Oscillator (public API class)
22     *
23     * Generalized, convenient cluster class encapsulating all the sampler's
24     * Low Frequency Oscillator implementations.
25     *
26     * @b NOTE: This class is @b NOT used by the sampler at all! This class is
27     * solely exported to the sampler's public API to allow third-party apps
28     * (e.g. Gigedit) to use our LFO implementations (e.g. for visualizing an
29     * LFO's wave form in an instrument editor GUI application) in a convenient
30     * way and by an unified API, and exactly with same LFO wave form values
31     * that would be generated by the sampler at playback time.
32 schoenebeck 3625 *
33     * @b NOTE: For sampler internal purposes use the template variant class
34     * LFOCluster for efficiency reasons instead! See the discussion on
35     * LFOCluster for details why.
36 schoenebeck 3612 */
37     class LFO {
38     public:
39     /**
40     * Oscillator's fundamental function type / wave form type.
41     */
42     enum wave_t {
43     wave_sine,
44     wave_triangle,
45     wave_saw,
46     wave_square,
47     };
48    
49     /**
50     * Whether the LFO should have positive AND negative value range
51     * (signed) or only a positive value range (unsigned).
52     */
53     enum range_type_t {
54     range_signed, ///< LFO's level will wave between -max ... +max
55     range_unsigned ///< LFO's level will wave between 0 ... +max
56     };
57    
58     /**
59     * Defines the start level of the LFO wave within the given value range.
60     */
61     enum start_level_t {
62     start_level_max, ///< wave starts from given maximum level
63     start_level_mid, ///< wave starts from the middle of the given value range
64     start_level_min ///< wave starts from given minimum level
65     };
66    
67     struct SetupOpt {
68     optional<wave_t> waveType; ///< LFO's fundamental function type, that its wave form type, e.g. sine, triangle, saw, etc. (default: sine)
69     optional<range_type_t> rangeType;
70     optional<float> frequency; ///< frequency of the oscillator in Hz (default: 1 Hz)
71     optional<float> phase; ///< optional phase displacement of the LFO function in degrees, between 0��..360�� (default: 0��)
72     optional<start_level_t> startLevel; ///< on which initial value level the LFO wave should start (default: start_level_mid)
73     optional<uint16_t> internalDepth; ///< firm, internal oscillator's amplitude (0..1200, default: 0)
74     optional<uint16_t> midiControllerDepth; ///< defines how strong the external MIDI controller has influence on the oscillator's amplitude (0..1200, default: 0)
75     optional<bool> flipPolarity; ///< if true: inverts the oscillator wave vertically (default: false)
76     optional<float> samplerate; ///< sample rate to be assumed by the LFO (default: 44100)
77     optional<float> maxValue;
78     };
79    
80     /** @brief Constructs LFO with default values.
81     *
82     * Initializes the LFO with default values for all LFO parameters
83     * (that is for e.g. frequency, sample rate, wave form type, etc.).
84     *
85     * You should call setup() afterwards to actually initialize the LFO
86     * with the desired parameters.
87     */
88     LFO();
89    
90     /** @brief Frees LFO's resources.
91     *
92     * De-allocates all resources previously been allocated by this LFO
93     * object.
94     */
95     virtual ~LFO();
96    
97     /**
98     * Setup the LFO with the relevant parameters (e.g. frequency, wave
99     * form type, etc.).
100     */
101     void setup(const SetupOpt& opt);
102    
103     /**
104     * Calculates exactly one sample point of the LFO wave.
105     *
106     * @returns next LFO level
107     */
108     float render();
109    
110     /**
111     * Update LFO depth with a new external MIDI controller value.
112     *
113     * @param midiCCValue - new MIDI controller value (0..127)
114     */
115     void setMIDICtrlValue(uint8_t midiCCValue);
116    
117     private:
118     struct LFOPriv* SELF;
119     };
120    
121     } // namespace LinuxSampler
122    
123     #endif // LS_LFO_H

  ViewVC Help
Powered by ViewVC