LMMS
Loading...
Searching...
No Matches
lmms::VibratingString Class Reference

#include <VibratingString.h>

Classes

struct  DelayLine

Public Member Functions

 VibratingString ()=default
 VibratingString (float pitch, float pick, float pickup, const float *impulse, int len, sample_rate_t sampleRate, int oversample, float randomize, float stringLoss, float detune, bool state)
 ~VibratingString ()=default
 VibratingString (const VibratingString &)=delete
VibratingStringoperator= (const VibratingString &)=delete
 VibratingString (VibratingString &&) noexcept=delete
VibratingStringoperator= (VibratingString &&) noexcept=default
sample_t nextSample ()

Private Member Functions

std::unique_ptr< DelayLineinitDelayLine (int len)
void resample (const float *src, f_cnt_t srcFrames, f_cnt_t dstFrames)
void setDelayLine (DelayLine *dl, int pick, const float *values, int len, float scale, bool state)
void toBridgeUpdate (DelayLine *dl, sample_t insamp)
void fromBridgeUpdate (DelayLine *dl, sample_t insamp)
sample_t bridgeReflection (sample_t insamp)

Static Private Member Functions

static sample_t dlAccess (DelayLine *dl, int position)
static sample_t fromBridgeAccess (DelayLine *dl, int position)
static sample_t toBridgeAccess (DelayLine *dl, int position)

Private Attributes

std::unique_ptr< DelayLinem_fromBridge
std::unique_ptr< DelayLinem_toBridge
int m_pickupLoc
int m_oversample
float m_randomize
float m_stringLoss
std::unique_ptr< float[]> m_impulse
int m_choice
float m_state
std::unique_ptr< sample_t[]> m_outsamp

Constructor & Destructor Documentation

◆ VibratingString() [1/4]

lmms::VibratingString::VibratingString ( )
default

◆ VibratingString() [2/4]

lmms::VibratingString::VibratingString ( float pitch,
float pick,
float pickup,
const float * impulse,
int len,
sample_rate_t sampleRate,
int oversample,
float randomize,
float stringLoss,
float detune,
bool state )

◆ ~VibratingString()

lmms::VibratingString::~VibratingString ( )
default

◆ VibratingString() [3/4]

lmms::VibratingString::VibratingString ( const VibratingString & )
delete

◆ VibratingString() [4/4]

lmms::VibratingString::VibratingString ( VibratingString && )
deletenoexcept

Member Function Documentation

◆ bridgeReflection()

sample_t lmms::VibratingString::bridgeReflection ( sample_t insamp)
inlineprivate

◆ dlAccess()

sample_t lmms::VibratingString::dlAccess ( DelayLine * dl,
int position )
inlinestaticprivate

dlAccess(dl, position); Returns sample "position" samples into delay-line's past. Position "0" points to the most recently inserted sample.

◆ fromBridgeAccess()

sample_t lmms::VibratingString::fromBridgeAccess ( DelayLine * dl,
int position )
inlinestaticprivate

fromBridgeAccess(dl, position); Returns spatial sample at position "position", where position zero is equal to the current upper delay-line pointer position (x = 0). In a right-going delay-line, position increases to the right, and delay increases to the right => left = past and right = future.

◆ fromBridgeUpdate()

void lmms::VibratingString::fromBridgeUpdate ( DelayLine * dl,
sample_t insamp )
inlineprivate

fromBridgeUpdate(dl, insamp); Decrements current upper delay-line pointer position (i.e. the wave travels one sample to the right), moving it to the "effective" x = 0 position for the next iteration. The "bridge-reflected" sample from lower delay-line is then placed into this position.

◆ initDelayLine()

std::unique_ptr< VibratingString::DelayLine > lmms::VibratingString::initDelayLine ( int len)
private

◆ nextSample()

sample_t lmms::VibratingString::nextSample ( )
inline

◆ operator=() [1/2]

VibratingString & lmms::VibratingString::operator= ( const VibratingString & )
delete

◆ operator=() [2/2]

VibratingString & lmms::VibratingString::operator= ( VibratingString && )
defaultnoexcept

◆ resample()

void lmms::VibratingString::resample ( const float * src,
f_cnt_t srcFrames,
f_cnt_t dstFrames )
private

◆ setDelayLine()

void lmms::VibratingString::setDelayLine ( DelayLine * dl,
int pick,
const float * values,
int len,
float scale,
bool state )
inlineprivate

setDelayLine initializes the string with an impulse at the pick position unless the impulse is longer than the string, in which case the impulse gets truncated.

◆ toBridgeAccess()

sample_t lmms::VibratingString::toBridgeAccess ( DelayLine * dl,
int position )
inlinestaticprivate

toBridgeAccess(dl, position); Returns spatial sample at position "position", where position zero is equal to the current lower delay-line pointer position (x = 0). In a left-going delay-line, position increases to the right, and delay DEcreases to the right => left = future and right = past.

◆ toBridgeUpdate()

void lmms::VibratingString::toBridgeUpdate ( DelayLine * dl,
sample_t insamp )
inlineprivate

toBridgeUpdate(dl, insamp); Places "nut-reflected" sample from upper delay-line into current lower delay-line pointer position (which represents x = 0 position). The pointer is then incremented (i.e. the wave travels one sample to the left), turning the previous position into an "effective" x = L position for the next iteration.

Member Data Documentation

◆ m_choice

int lmms::VibratingString::m_choice
private

◆ m_fromBridge

std::unique_ptr<DelayLine> lmms::VibratingString::m_fromBridge
private

◆ m_impulse

std::unique_ptr<float[]> lmms::VibratingString::m_impulse
private

◆ m_outsamp

std::unique_ptr<sample_t[]> lmms::VibratingString::m_outsamp
private

◆ m_oversample

int lmms::VibratingString::m_oversample
private

◆ m_pickupLoc

int lmms::VibratingString::m_pickupLoc
private

◆ m_randomize

float lmms::VibratingString::m_randomize
private

◆ m_state

float lmms::VibratingString::m_state
private

◆ m_stringLoss

float lmms::VibratingString::m_stringLoss
private

◆ m_toBridge

std::unique_ptr<DelayLine> lmms::VibratingString::m_toBridge
private

The documentation for this class was generated from the following files: