MCPcopy Create free account
hub / github.com/LMMS/lmms / playNote

Method playNote

plugins/kicker/kicker.cpp:164–209  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

162
163
164void kickerInstrument::playNote( NotePlayHandle * _n,
165 sampleFrame * _working_buffer )
166{
167 const fpp_t frames = _n->framesLeftForCurrentPeriod();
168 const f_cnt_t offset = _n->noteOffset();
169 const float decfr = m_decayModel.value() *
170 Engine::mixer()->processingSampleRate() / 1000.0f;
171 const f_cnt_t tfp = _n->totalFramesPlayed();
172
173 if ( tfp == 0 )
174 {
175 _n->m_pluginData = new SweepOsc(
176 DistFX( m_distModel.value(),
177 m_gainModel.value() ),
178 m_startNoteModel.value() ? _n->frequency() : m_startFreqModel.value(),
179 m_endNoteModel.value() ? _n->frequency() : m_endFreqModel.value(),
180 m_noiseModel.value() * m_noiseModel.value(),
181 m_clickModel.value() * 0.25f,
182 m_slopeModel.value(),
183 m_envModel.value(),
184 m_distModel.value(),
185 m_distEndModel.value(),
186 decfr );
187 }
188 else if( tfp > decfr && !_n->isReleased() )
189 {
190 _n->noteOff();
191 }
192
193 SweepOsc * so = static_cast<SweepOsc *>( _n->m_pluginData );
194 so->update( _working_buffer + offset, frames, Engine::mixer()->processingSampleRate() );
195
196 if( _n->isReleased() )
197 {
198 const float done = _n->releaseFramesDone();
199 const float desired = desiredReleaseFrames();
200 for( fpp_t f = 0; f < frames; ++f )
201 {
202 const float fac = ( done+f < desired ) ? ( 1.0f - ( ( done+f ) / desired ) ) : 0;
203 _working_buffer[f+offset][0] *= fac;
204 _working_buffer[f+offset][1] *= fac;
205 }
206 }
207
208 instrumentTrack()->processAudioBuffer( _working_buffer, frames + offset, _n );
209}
210
211
212

Callers

nothing calls this directly

Calls 10

mixerFunction · 0.85
desiredReleaseFramesFunction · 0.85
processingSampleRateMethod · 0.80
frequencyMethod · 0.80
instrumentTrackFunction · 0.50
valueMethod · 0.45
noteOffMethod · 0.45
updateMethod · 0.45
processAudioBufferMethod · 0.45

Tested by

no test coverage detected