|
lmms
Cross-platform music production software
|
#include <Oscillator.h>
Classes | |
| struct | wtSampleControl |
Public Types | |
| enum class | WaveShape { Sine , Triangle , Saw , Square , MoogSaw , Exponential , WhiteNoise , UserDefined , Count } |
| enum class | ModulationAlgo { PhaseModulation , AmplitudeModulation , SignalMix , SynchronizedBySubOsc , FrequencyModulation , Count } |
Public Member Functions | |
| Oscillator (const IntModel *wave_shape_model, const IntModel *mod_algo_model, const float &freq, const float &detuning_div_samplerate, const float &phase_offset, const float &volume, Oscillator *m_subOsc=nullptr) | |
| virtual | ~Oscillator () |
| void | setUseWaveTable (bool n) |
| void | setUserWave (std::shared_ptr< const SampleBuffer > _wave) |
| void | setUserAntiAliasWaveTable (std::shared_ptr< const OscillatorConstants::waveform_t > waveform) |
| void | update (SampleFrame *ab, const f_cnt_t frames, const ch_cnt_t chnl, bool modulator=false) |
| wtSampleControl | getWtSampleControl (const float sample) const |
| sample_t | wtSample (const sample_t table[OscillatorConstants::WAVE_TABLES_PER_WAVEFORM_COUNT][OscillatorConstants::WAVETABLE_LENGTH], const float sample) const |
| sample_t | wtSample (const OscillatorConstants::waveform_t *table, const float sample) const |
| sample_t | wtSample (sample_t **table, const float sample) const |
Static Public Member Functions | |
| static void | waveTableInit () |
| static void | destroyFFTPlans () |
| static std::unique_ptr< OscillatorConstants::waveform_t > | generateAntiAliasUserWaveTable (const SampleBuffer *sampleBuffer) |
| static sample_t | sinSample (const float _sample) |
| static sample_t | triangleSample (const float _sample) |
| static sample_t | sawSample (const float _sample) |
| static sample_t | squareSample (const float _sample) |
| static sample_t | moogSawSample (const float _sample) |
| static sample_t | expSample (const float _sample) |
| static sample_t | noiseSample (const float) |
| static sample_t | userWaveSample (const SampleBuffer *buffer, const float sample) |
| static int | waveTableBandFromFreq (float freq) |
| static float | freqFromWaveTableBand (int band) |
Static Public Attributes | |
| static constexpr auto | NumWaveShapes = static_cast<std::size_t>(WaveShape::Count) |
| static constexpr auto | FirstWaveShapeTable = static_cast<std::size_t>(WaveShape::Triangle) |
| First wave shape that has a pre-generated table. | |
| static constexpr auto | NumWaveShapeTables = static_cast<std::size_t>(WaveShape::WhiteNoise) - FirstWaveShapeTable |
| Number of band-limited wave shapes to be generated. | |
| static constexpr auto | NumModulationAlgos = static_cast<std::size_t>(ModulationAlgo::Count) |
Private Member Functions | |
| void | updateNoSub (SampleFrame *_ab, const f_cnt_t _frames, const ch_cnt_t _chnl) |
| void | updatePM (SampleFrame *_ab, const f_cnt_t _frames, const ch_cnt_t _chnl) |
| void | updateAM (SampleFrame *_ab, const f_cnt_t _frames, const ch_cnt_t _chnl) |
| void | updateMix (SampleFrame *_ab, const f_cnt_t _frames, const ch_cnt_t _chnl) |
| void | updateSync (SampleFrame *_ab, const f_cnt_t _frames, const ch_cnt_t _chnl) |
| void | updateFM (SampleFrame *_ab, const f_cnt_t _frames, const ch_cnt_t _chnl) |
| float | syncInit (SampleFrame *_ab, const f_cnt_t _frames, const ch_cnt_t _chnl) |
| bool | syncOk (float _osc_coeff) |
| template<WaveShape W> | |
| void | updateNoSub (SampleFrame *_ab, const f_cnt_t _frames, const ch_cnt_t _chnl) |
| template<WaveShape W> | |
| void | updatePM (SampleFrame *_ab, const f_cnt_t _frames, const ch_cnt_t _chnl) |
| template<WaveShape W> | |
| void | updateAM (SampleFrame *_ab, const f_cnt_t _frames, const ch_cnt_t _chnl) |
| template<WaveShape W> | |
| void | updateMix (SampleFrame *_ab, const f_cnt_t _frames, const ch_cnt_t _chnl) |
| template<WaveShape W> | |
| void | updateSync (SampleFrame *_ab, const f_cnt_t _frames, const ch_cnt_t _chnl) |
| template<WaveShape W> | |
| void | updateFM (SampleFrame *_ab, const f_cnt_t _frames, const ch_cnt_t _chnl) |
| template<WaveShape W> | |
| sample_t | getSample (const float _sample) |
| void | recalcPhase () |
Static Private Member Functions | |
| static void | generateSawWaveTable (int bands, sample_t *table, int firstBand=1) |
| static void | generateTriangleWaveTable (int bands, sample_t *table, int firstBand=1) |
| static void | generateSquareWaveTable (int bands, sample_t *table, int firstBand=1) |
| static void | generateFromFFT (int bands, sample_t *table) |
| static void | generateWaveTables () |
| static void | createFFTPlans () |
Private Attributes | |
| const IntModel * | m_waveShapeModel |
| const IntModel * | m_modulationAlgoModel |
| const float & | m_freq |
| const float & | m_detuning_div_samplerate |
| const float & | m_volume |
| const float & | m_ext_phaseOffset |
| Oscillator * | m_subOsc |
| float | m_phaseOffset |
| float | m_phase |
| std::shared_ptr< const SampleBuffer > | m_userWave = SampleBuffer::emptyBuffer() |
| std::shared_ptr< const OscillatorConstants::waveform_t > | m_userAntiAliasWaveTable |
| bool | m_useWaveTable |
| bool | m_isModulator |
Static Private Attributes | |
| static sample_t | s_waveTables [NumWaveShapeTables][OscillatorConstants::WAVE_TABLES_PER_WAVEFORM_COUNT][OscillatorConstants::WAVETABLE_LENGTH] |
| static fftwf_plan | s_fftPlan |
| static fftwf_plan | s_ifftPlan |
| static fftwf_complex * | s_specBuf |
| static std::array< float, OscillatorConstants::WAVETABLE_LENGTH > | s_sampleBuffer |
|
strong |
|
strong |
| lmms::Oscillator::Oscillator | ( | const IntModel * | wave_shape_model, |
| const IntModel * | mod_algo_model, | ||
| const float & | freq, | ||
| const float & | detuning_div_samplerate, | ||
| const float & | phase_offset, | ||
| const float & | volume, | ||
| Oscillator * | m_subOsc = nullptr ) |
|
inlinevirtual |
|
staticprivate |
|
static |
|
inlinestatic |
|
inlinestatic |
|
static |
|
staticprivate |
|
staticprivate |
|
staticprivate |
|
staticprivate |
|
staticprivate |
|
inline |
|
inlinestatic |
|
inlinestatic |
|
inlineprivate |
|
inlinestatic |
|
inline |
|
inline |
|
inline |
|
inlinestatic |
|
inlinestatic |
|
private |
|
inlineprivate |
|
inlinestatic |
| void lmms::Oscillator::update | ( | SampleFrame * | ab, |
| const f_cnt_t | frames, | ||
| const ch_cnt_t | chnl, | ||
| bool | modulator = false ) |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
inlinestatic |
|
inlinestatic |
|
static |
|
inline |
|
inline |
|
staticconstexpr |
First wave shape that has a pre-generated table.
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
Number of band-limited wave shapes to be generated.
|
staticprivate |
|
staticprivate |
|
staticprivate |
|
staticprivate |
|
staticprivate |