From 161e5265dc8d5f5c0b51985f8470829601cd687e Mon Sep 17 00:00:00 2001 From: Tobias Doerffel Date: Tue, 24 Jun 2008 14:10:11 +0000 Subject: [PATCH] removed obsolete plugins git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@1168 0778d3d1-df1d-0410-868b-ea421aaaa00d --- ChangeLog | 12 + plugins/plucked_string_synth/Makefile.am | 33 - plugins/plucked_string_synth/artwork.png | Bin 40780 -> 0 bytes plugins/plucked_string_synth/logo.png | Bin 3289 -> 0 bytes .../plucked_string_synth.cpp | 278 ------ .../plucked_string_synth.h | 238 ----- plugins/polyb302/Makefile.am | 33 - plugins/polyb302/artwork.png | Bin 75178 -> 0 bytes plugins/polyb302/logo.png | Bin 4538 -> 0 bytes plugins/polyb302/polyb302.cpp | 926 ------------------ plugins/polyb302/polyb302.h | 252 ----- 11 files changed, 12 insertions(+), 1760 deletions(-) delete mode 100644 plugins/plucked_string_synth/Makefile.am delete mode 100644 plugins/plucked_string_synth/artwork.png delete mode 100644 plugins/plucked_string_synth/logo.png delete mode 100644 plugins/plucked_string_synth/plucked_string_synth.cpp delete mode 100644 plugins/plucked_string_synth/plucked_string_synth.h delete mode 100644 plugins/polyb302/Makefile.am delete mode 100644 plugins/polyb302/artwork.png delete mode 100644 plugins/polyb302/logo.png delete mode 100644 plugins/polyb302/polyb302.cpp delete mode 100644 plugins/polyb302/polyb302.h diff --git a/ChangeLog b/ChangeLog index d9c4984f6..2139e0276 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,17 @@ 2008-06-24 Tobias Doerffel + * plugins/plucked_string_synth/logo.png: + * plugins/plucked_string_synth/plucked_string_synth.cpp: + * plugins/plucked_string_synth/plucked_string_synth.h: + * plugins/plucked_string_synth/Makefile.am: + * plugins/plucked_string_synth/artwork.png: + * plugins/polyb302/polyb302.h: + * plugins/polyb302/logo.png: + * plugins/polyb302/Makefile.am: + * plugins/polyb302/polyb302.cpp: + * plugins/polyb302/artwork.png: + removed obsolete plugins + * plugins/spectrum_analyzer/spectrumanalyzer_control_dialog.cpp: * plugins/spectrum_analyzer/spectrum_analyzer.cpp: * plugins/spectrum_analyzer/Makefile.am: diff --git a/plugins/plucked_string_synth/Makefile.am b/plugins/plucked_string_synth/Makefile.am deleted file mode 100644 index 47263f346..000000000 --- a/plugins/plucked_string_synth/Makefile.am +++ /dev/null @@ -1,33 +0,0 @@ -AUTOMAKE_OPTIONS = foreign 1.4 - - -INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/src/lib -I. - - -AM_CXXFLAGS := $(AM_CXXFLAGS) $(QT_CXXFLAGS) -DPLUGIN_NAME="pluckedstringsynth" - - -%.moc: ./%.h - $(MOC) -o $@ $< - - -MOC_FILES = ./plucked_string_synth.moc - -BUILT_SOURCES = $(MOC_FILES) ./embedded_resources.h -EMBEDDED_RESOURCES = $(wildcard *png) - -./embedded_resources.h: $(EMBEDDED_RESOURCES) - $(BIN2RES) $(EMBEDDED_RESOURCES) > $@ - -EXTRA_DIST = $(EMBEDDED_RESOURCES) - - -CLEANFILES = $(MOC_FILES) ./embedded_resources.h - - - -pkglib_LTLIBRARIES= libpluckedstringsynth.la - -libpluckedstringsynth_la_SOURCES = plucked_string_synth.cpp plucked_string_synth.h - -$(libpluckedstringsynth_la_SOURCES): ./embedded_resources.h diff --git a/plugins/plucked_string_synth/artwork.png b/plugins/plucked_string_synth/artwork.png deleted file mode 100644 index 88476ab09350c06c222212b48f99b53865f326fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40780 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 diff --git a/plugins/plucked_string_synth/logo.png b/plugins/plucked_string_synth/logo.png deleted file mode 100644 index 39455b5bf150916d46d64e1fd3787aa1b4a00306..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3289 zcmV;~3?}o5P)(`UN2(`sE>dq=CCdyaOzb9?J`I&Ip+>X=>D{3(`V1S zZSV$zVMR(x%I0{vGBG*R?C^=saz&<@5w0wTFg}0kSWI^BC*I`-fZf@djY<;b%%BSc|(@ZRTvvSt6hVX4~zurzdT3QaB?|2#kqeQ`Z_ zvNIt5LzYnib-oqmn)CQFIQ8;xH|^)YxOBxbw*#QcH2#lBVHo!nXF(8`55H3eh&83i zEpLJ(H5XrnsBXNzdQRuWv-6nAFBi}3~>6Ep!wA}CS??-laj!P`pyW)vDQeC;rJ5oEk z#&bu*?Af!Kz<1Jkk;ZJd2;Se{|7WMfVp+06KGxpej@H&z*lac=CdnuHQ7LzQqV;{7 z_XUZUuXyeF+_`f^8xtFf^W8G1cpB@&mvP&l%244peO}(jBsbH~K*m35}8J9pH=vudK-67)o&)ud-|MnqXzer~7C}n=Y>2$gX z1QO!npwnqxK|w*+-g)O8ule)mzdB>V?+H4+U~jNy?ZGhJs;@;E|4;@K0c$Ko}S!k+RTi?>=dN^Ctr4^DJi=e5oEFsg{efZ|JUm0 z|4!y#I1v=YrC?nZ6&0{rttcreq0H;1h&KK2zWeTBqRlU6j0!vWsY|{L*JazCeK_BH zi8Wcla^s!%Ht&4<$BID#E|f?lUPhyFu!1BqS)pKx6`7ftpuY{QU%%e>rI%h>F=LtE z##27KOQ`xXEx&fOf8;vMwe3(9)FL$5H2M4WTh>o&^>;cypQLgh>3VlvU7d?5*6ge- zqD?%6Lctgntj~1tGgq)gos~qLvW5$TE=OxW8+??y1iYBc#(DE!c;jzZAUrJWKyGgC zfWzT%RaREQWHK?dVKP5PoDW*CV8JhDw5#qAq&|NzRO^>vu7A)maD^;y9U_!P@J}ef zkr0KNru-{2kI(1N4G$0hG)8=KQm@mp#Yz-{N~Ln~c)Vev4QJuPh5t6=GPuiM^&i0s zQ=P532hOfxoIG6$jwAhibAJ@L+FAyBb$jG=r zoz=x;UQhNw6cGXLG0p_p1OC#bOJ92`O^WFAj9*MnUD>$~INJJAXl;XEi~)y4nczxu z$-9?K1xCh~g@%M&(d%?B(tG6OmEgx->Q1EYj$N3BWm*;g2URl~VeEpwekJs)K z|6$YDGUX{nw#HSITq=b?JX4FQj)iSh! zKc=qg%!hSAVIfLgK+j{tNaA*&MM2^mOAPD2)T*M#_Z zL=kQLxO{Bg&xe0}9$P1+jtea97~9d%J_uR?TpJyCS*mS*k4>vLw}s7HxBt{WQjv>o zle6%69Zty-A(O@7hz|#! zdI{j+B?cu0TYM5hs|g=*Hrp#s$j_pn%88q|@1n)ocA7$1{8#|q-VyPe!;u*sOqQoy zE=)X}#NGQ3FiIbA>G~M0##J(FBhvr|VK9-GF;&4(+K4y;Af`qZnOcNk>1lZTa`Bgg ze0+3R3XiX1L3G6Gog%!sEgb6)#;`z`!XKcdjE&zN&&oFVJ~n`@zVbk0mD4pfHHAqU zO!jZzxrb{v$Jy+6(sDBZTBZTS#L3~y6(UNW#R8CM%MnSdz&T~WZf-0-;Ur>3B5W`CC+3Hq?I=DGDe*0W~lYGO5jjJDfue;k{)o__IJvljr2NMr5e(w== zhOgd2AMw9);0kM(8{7MFzIzDeHBFEZT{y>u2#HnWl%|9^H3n^Hz#IpD%1vfzrUq z=<+B?>d?`D39Vg2usWL2)!hqc=ODEC7R1TZz!L_Ngv!7i!g>*aF9I0=DcI^K$KDef zM5GqO*3yICp{uu@7kX<==JJpY8$EtaAG_#@oigkars3+%+idpl-g|%>V|T!;2m^rR z4$kvkXuHsjx|R+UTWZnO+edQR19e^nL=ri6?mvRVBK`LOsAD5A$q15OG+r2dV5@H} z(Hjbcv|{frTfY32C+>l0XZ4Vw$-QqM;P&17xPI#qfQwf~(LHb(<(4W8kBp$9r42?) zBaEe1boKP1)ZT`0MFISxs0&ADeh+{-h_%#r!PeN>9j8!pw(s8a_AlS~)uL&-Jo)qd zZM>A`B3m1q`7tWq>!UvaV0K&0?Y*$pI503ch}v_FFqAl;J5!1(dn2UUQr3<7oXi4k zFUip5!P?yYu&A=GWc%*_-^f_&f4Xg;qKlR3D_FiW{AX9-#t#6P)hVxa!fdHQ|G)sM zYU`1dVMdhFh+xH8@MH{tY2Rrs~J1L{4+=X z%H9*FGZi`27^a|q41m#oV^u4%sd1?btVlJKvca2(b{btKKH0GcUvMP|qirQ)^zsTT zSFzHF3;pFh-8qeHp7C0Z1nR z1(nS(6`3Ijj)qX82Va)U+#I5cHaO0%p|RC#{=jtCxif!S9HM#ks5m>D$uQ%47#qO? zaCER&JchDHWER&WyQCh9G%dV*gAfpx!!|4CGOn#>1l5j~B6`(pv!2HF=hqSXS%)L_ z%L5bh9lD}A)D!o6sF5+5Wju`8-p(pjlC}^@Sr#&ICh|bVQ0CDV)7i_IzA5U?-j8k0 z9{1r%vR)A>O$i#4{U-T%7o$!LfV_%kYGe%*{38X5CFxZg?NqqEOtDYaG_)3N{?o^6 z=@n1^yA1xZS&In7!B}lcg}%7%el7*i)Bt0JwT0){Q9xFKIhE@kygK1%?x+b2jr?@} zf(0+T%{e|VD)reDGTkbfw)jwrp~9>$a$KcVm?|Xsw9t0a?(Ds1Z|>~KF_y|W{J;+v zEq?ixS?>7#1x~PZjyT1zJS_< - * - * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program (see COPYING); if not, write to the - * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301 USA. - * - */ - - -#include - -#include "plucked_string_synth.h" -#include "engine.h" -#include "instrument_track.h" -#include "knob.h" -#include "note_play_handle.h" -#include "templates.h" - -#undef SINGLE_SOURCE_COMPILE -#include "embed.cpp" - - -extern "C" -{ - -plugin::descriptor pluckedstringsynth_plugin_descriptor = -{ - STRINGIFY_PLUGIN_NAME( PLUGIN_NAME ), - "PluckedStringSynth", - QT_TRANSLATE_NOOP( "pluginBrowser", - "cheap synthesis of guitar/harp-like sounds" ), - "Tobias Doerffel ", - 0x0100, - plugin::Instrument, - new QPixmap( PLUGIN_NAME::getIconPixmap( "logo" ) ), - NULL -} ; - -} - - -// TODO: make this synth stereo for better better spacial (room) feeling and -// add distortion - -pluckedStringSynth::pluckedStringSynth( instrumentTrack * _instrument_track ) : - instrument( _instrument_track, &pluckedstringsynth_plugin_descriptor ), - m_pickModel( 0.0f, 0.0f, 0.5f, 0.005f, this ), - m_pickupModel( 0.05f, 0.0f, 0.5f, 0.005f, this ) -{ -} - - - - -pluckedStringSynth::~pluckedStringSynth() -{ -} - - - - -void pluckedStringSynth::saveSettings( QDomDocument & _doc, - QDomElement & _this ) -{ - m_pickModel.saveSettings( _doc, _this, "pick" ); - m_pickupModel.saveSettings( _doc, _this, "pickup" ); -} - - - - -void pluckedStringSynth::loadSettings( const QDomElement & _this ) -{ - m_pickModel.loadSettings( _this, "pick" ); - m_pickupModel.loadSettings( _this, "pickup" ); -} - - - - -QString pluckedStringSynth::nodeName( void ) const -{ - return( pluckedstringsynth_plugin_descriptor.name ); -} - - - - -void pluckedStringSynth::playNote( notePlayHandle * _n, bool ) -{ - if ( _n->totalFramesPlayed() == 0 ) - { - _n->m_pluginData = new pluckSynth( _n->frequency(), - m_pickModel.value(), - m_pickupModel.value(), - engine::getMixer()->sampleRate() ); - } - - const fpp_t frames = _n->framesLeftForCurrentPeriod(); - sampleFrame * buf = new sampleFrame[frames]; - - pluckSynth * ps = static_cast( _n->m_pluginData ); - for( fpp_t frame = 0; frame < frames; ++frame ) - { - const sample_t cur = ps->nextStringSample(); - for( Uint8 chnl = 0; chnl < DEFAULT_CHANNELS; ++chnl ) - { - buf[frame][chnl] = cur; - } - } - - getInstrumentTrack()->processAudioBuffer( buf, frames, _n ); - - delete[] buf; -} - - - - -void pluckedStringSynth::deleteNotePluginData( notePlayHandle * _n ) -{ - delete static_cast( _n->m_pluginData ); -} - - -pluginView * pluckedStringSynth::instantiateView( QWidget * _parent ) -{ - return( new pluckedStringSynthView( this, _parent ) ); -} - - -pluckedStringSynthView::pluckedStringSynthView( instrument * _instrument, - QWidget * _parent ) : - instrumentView( _instrument, _parent ) -{ - m_pickKnob = new knob( knobDark_28, this, tr( "Pick position" ) ); - m_pickKnob->move( 86, 134 ); - m_pickKnob->setHintText( tr( "Pick position:" ) + " ", "" ); - - m_pickupKnob = new knob( knobDark_28, this, tr( "Pickup position" ) ); - m_pickupKnob->move( 138, 134 ); - m_pickupKnob->setHintText( tr( "Pickup position:" ) + " ", "" ); - - setAutoFillBackground( TRUE ); - QPalette pal; - pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( - "artwork" ) ); - setPalette( pal ); -} - - -pluckedStringSynthView::~pluckedStringSynthView() -{ -} - - -void pluckedStringSynthView::modelChanged( void ) -{ - pluckedStringSynth * p = castModel(); - m_pickKnob->setModel( &p->m_pickModel ); - m_pickupKnob->setModel( &p->m_pickupModel ); -} - - -pluckSynth::delayLine * FASTCALL pluckSynth::initDelayLine( int _len ) -{ - delayLine * dl = new pluckSynth::delayLine[_len]; - dl->length = _len; - if( _len > 0 ) - { - dl->data = new sample_t[_len]; - } - else - { - dl->data = NULL; - } - - dl->pointer = dl->data; - dl->end = dl->data + _len - 1; - - return( dl ); -} - - - - -void FASTCALL pluckSynth::freeDelayLine( delayLine * _dl ) -{ - if( _dl ) - { - delete[] _dl->data; - delete[] _dl; - } -} - - - - -pluckSynth::pluckSynth( const float _pitch, const float _pick, - const float _pickup, const sample_rate_t _sample_rate ) -{ - const float AMP = 1.5f; - int rail_length = static_cast( _sample_rate / 2 / _pitch ) + 1; - // Round pick position to nearest spatial sample. - // A pick position at x = 0 is not allowed. - int pick_sample = static_cast( tMax( rail_length * _pick, - 1.0f ) ); - float initial_shape[rail_length]; - - m_upperRail = pluckSynth::initDelayLine( rail_length ); - m_lowerRail = pluckSynth::initDelayLine( rail_length ); - -//#define METALLIC_PLUCK -#ifdef METALLIC_PLUCK - for ( int i = 0; i < rail_length; i++ ) - { - initial_shape[i] = rand() * AMP / RAND_MAX; - } - - initial_shape[pick_sample] = 0.5; - initial_shape[pick_sample+1] = 0.5; - -#else - float upslope = AMP / pick_sample; - const float downslope = AMP / ( rail_length - pick_sample - 1 ); - - for( int i = 0; i < pick_sample; i++ ) - { - initial_shape[i] = upslope * i; - } - - for( int i = pick_sample; i < rail_length; i++ ) - { - initial_shape[i] = downslope * ( rail_length - 1 - i ); - } -#endif - - // Initial conditions for the ideal plucked string. - // "Past history" is measured backward from the end of the array. - pluckSynth::setDelayLine( m_lowerRail, initial_shape, 0.5f ); - pluckSynth::setDelayLine( m_upperRail, initial_shape, 0.5f ); - - m_pickupLoc = static_cast( _pickup * rail_length ); -} - - - - -extern "C" -{ - -// neccessary for getting instance out of shared lib -plugin * lmms_plugin_main( model *, void * _data ) -{ - return( new pluckedStringSynth( - static_cast( _data ) ) ); -} - - -} - - diff --git a/plugins/plucked_string_synth/plucked_string_synth.h b/plugins/plucked_string_synth/plucked_string_synth.h deleted file mode 100644 index 961214ce9..000000000 --- a/plugins/plucked_string_synth/plucked_string_synth.h +++ /dev/null @@ -1,238 +0,0 @@ -/* - * plucked_string_synth.h - declaration of class pluckedStringSynth which - * is a synth for plucked string-sounds - * - * Copyright (c) 2004-2006 Tobias Doerffel - * - * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program (see COPYING); if not, write to the - * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301 USA. - * - */ - - -#ifndef _PLUCKED_STRING_SYNTH_H -#define _PLUCKED_STRING_SYNTH_H - -#include "instrument.h" -#include "instrument_view.h" -#include "knob.h" - - -class knob; -class notePlayHandle; - - -// the actual synth -class pluckSynth -{ -public: - pluckSynth( const float _pitch, const float _pick, const float _pickup, - const sample_rate_t _sample_rate ); - - inline ~pluckSynth( void ) - { - pluckSynth::freeDelayLine( m_upperRail ); - pluckSynth::freeDelayLine( m_lowerRail ); - } - - inline sample_t nextStringSample( void ) - { - // Output at pickup position - sample_t outsamp = rgDlAccess( m_upperRail, m_pickupLoc ); - outsamp += lgDlAccess( m_lowerRail, m_pickupLoc ); - - // Sample traveling into "bridge" - sample_t ym0 = lgDlAccess( m_lowerRail, 1 ); - // Sample to "nut" - sample_t ypM = rgDlAccess( m_upperRail, - m_upperRail->length - 2 ); - - // String state update - - // Decrement pointer and then update - rgDlUpdate( m_upperRail, -bridgeReflection( ym0 ) ); - // Update and then increment pointer - lgDlUpdate( m_lowerRail, -ypM ); - - return( outsamp ); - } - - -private: - struct delayLine - { - sample_t * data; - int length; - sample_t * pointer; - sample_t * end; - } ; - - delayLine * m_upperRail; - delayLine * m_lowerRail; - int m_pickupLoc; - - static delayLine * FASTCALL initDelayLine( int _len ); - static void FASTCALL freeDelayLine( delayLine * _dl ); - static inline void setDelayLine( delayLine * _dl, float * _values, - float _scale ) - { - for( int i = 0; i < _dl->length; ++i ) - { - _dl->data[i] = _scale * _values[i]; - } - } - - /* lgDlUpdate(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. */ - static inline void lgDlUpdate( delayLine * _dl, sample_t _insamp ) - { - register sample_t * ptr = _dl->pointer; - *ptr = _insamp; - ++ptr; - if( ptr > _dl->end ) - { - ptr = _dl->data; - } - _dl->pointer = ptr; - } - - /* rgDlUpdate(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. */ - static inline void rgDlUpdate( delayLine * _dl, sample_t _insamp ) - { - register sample_t * ptr = _dl->pointer; - --ptr; - if( ptr < _dl->data ) - { - ptr = _dl->end; - } - *ptr = _insamp; - _dl->pointer = ptr; - } - - /* dlAccess(dl, position); - * Returns sample "position" samples into delay-line's past. - * Position "0" points to the most recently inserted sample. */ - static inline sample_t dlAccess( delayLine * _dl, int _position ) - { - sample_t * outpos = _dl->pointer + _position; - while( outpos < _dl->data ) - { - outpos += _dl->length; - } - while( outpos > _dl->end ) - { - outpos -= _dl->length; - } - return( *outpos ); - } - - /* - * Right-going delay line: - * -->---->---->--- - * x=0 - * (pointer) - * Left-going delay line: - * --<----<----<--- - * x=0 - * (pointer) - */ - - /* rgDlAccess(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. */ - static inline sample_t rgDlAccess( delayLine * _dl, int _position ) - { - return( dlAccess( _dl, _position ) ); - } - - /* lgDlAccess(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. */ - static inline sample_t lgDlAccess( delayLine * _dl, int _position ) - { - return( dlAccess( _dl, _position ) ); - } - - static inline sample_t bridgeReflection( sample_t _insamp ) - { - static sample_t state = 0.0f; // filter memory - // Implement a one-pole lowpass with feedback coefficient = 0.5 - return( state = state*0.5f + _insamp*0.5f ); - } - -} ; - - - - -class pluckedStringSynth : public instrument -{ -public: - pluckedStringSynth( instrumentTrack * _instrument_track ); - virtual ~pluckedStringSynth(); - - virtual void FASTCALL playNote( notePlayHandle * _n, - bool _try_parallelizing ); - virtual void FASTCALL deleteNotePluginData( notePlayHandle * _n ); - - - virtual void FASTCALL saveSettings( QDomDocument & _doc, - QDomElement & _parent ); - virtual void FASTCALL loadSettings( const QDomElement & _this ); - - virtual QString nodeName( void ) const; - - virtual pluginView * instantiateView( QWidget * _parent ); - -private: - knobModel m_pickModel; - knobModel m_pickupModel; - - friend class pluckedStringSynthView; -} ; - -class pluckedStringSynthView : public instrumentView -{ -public: - pluckedStringSynthView( instrument * _instrument, - QWidget * _parent ); - virtual ~pluckedStringSynthView(); - -private: - virtual void modelChanged( void ); - - knob * m_pickKnob; - knob * m_pickupKnob; - -} ; - - -#endif diff --git a/plugins/polyb302/Makefile.am b/plugins/polyb302/Makefile.am deleted file mode 100644 index 5c262f562..000000000 --- a/plugins/polyb302/Makefile.am +++ /dev/null @@ -1,33 +0,0 @@ -AUTOMAKE_OPTIONS = foreign 1.4 - - -INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/src/gui -I. - - -AM_CXXFLAGS := $(AM_CXXFLAGS) $(QT_CXXFLAGS) -DPLUGIN_NAME="polyb302" - - -%.moc: ./%.h - $(MOC) -o $@ $< - - -MOC_FILES = ./polyb302.moc - -BUILT_SOURCES = $(MOC_FILES) ./embedded_resources.h -EMBEDDED_RESOURCES = $(wildcard *png) - -./embedded_resources.h: $(EMBEDDED_RESOURCES) - $(BIN2RES) $(EMBEDDED_RESOURCES) > $@ - -EXTRA_DIST = $(EMBEDDED_RESOURCES) - - -CLEANFILES = $(MOC_FILES) ./embedded_resources.h - - - -pkglib_LTLIBRARIES = libpolyb302.la - -libpolyb302_la_SOURCES = polyb302.cpp polyb302.h - -$(libpolyb302_la_SOURCES): ./embedded_resources.h diff --git a/plugins/polyb302/artwork.png b/plugins/polyb302/artwork.png deleted file mode 100644 index d8a25feffd2304ccf14fb137c859e58839a04b86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75178 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

F 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 - * - * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net - * - * lb302FilterIIR2 is based on the gsyn filter code by Andy Sloane. - * - * lb302Filter3Pole is based on the TB303 instrument written by - * Josep M Comajuncosas for the CSounds library - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program (see COPYING); if not, write to the - * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301 USA. - * - */ - - -#include "polyb302.h" -#include "engine.h" -#include "knob.h" -#include "led_checkbox.h" -#include "note_play_handle.h" - -#undef SINGLE_SOURCE_COMPILE -#include "embed.cpp" -#include "polyb302.moc" - - -// Envelope Recalculation period -#define ENVINC 64 - -// -// New config -// -#define LB_24_IGNORE_ENVELOPE -#define LB_FILTERED -//#define LB_24_RES_TRICK - -#define LB_DIST_RATIO 4.0 -#define LB_24_VOL_ADJUST 3.0 - - - - -using namespace std; -extern "C" -{ - -plugin::descriptor polyb302_plugin_descriptor = -{ - STRINGIFY_PLUGIN_NAME( PLUGIN_NAME ), - "PoLyB302", - QT_TRANSLATE_NOOP( "pluginBrowser", - "Incomplete polyphonic immitation tb303" ), - "Javier Serrano Polo ", - 0x0100, - plugin::Instrument, - new QPixmap( PLUGIN_NAME::getIconPixmap( "logo" ) ), - NULL -} ; - - -// necessary for getting instance out of shared lib -plugin * lmms_plugin_main( void * _data ) -{ - return( new polyb302Synth( static_cast( _data ) ) ); -} - -} - - - -// -// lb302Filter -// - -lb302Filter::lb302Filter( lb302FilterState * _p_fs ) : - m_fs( _p_fs ), - m_vcf_c0( 0 ), - m_vcf_e0( 0 ), - m_vcf_e1( 0 ) -{ -} - - - - -void lb302Filter::recalc( void ) -{ - m_vcf_e1 = exp( 4.909 + 1.5876 * m_fs->envmod + 2.1553 * m_fs->cutoff - + 1.2 * m_fs->reso ); - m_vcf_e0 = exp( 4.8434 - 0.8 * m_fs->envmod + 2.1553 * m_fs->cutoff - + 0.7696 * m_fs->reso ); - m_vcf_e0 *= M_PI / engine::getMixer()->sampleRate(); - m_vcf_e1 *= M_PI / engine::getMixer()->sampleRate(); - m_vcf_e1 -= m_vcf_e0; -} - - - - -void lb302Filter::envRecalc( void ) -{ - // Filter Decay. vcf_decay is adjusted for Hz and ENVINC - m_vcf_c0 *= m_fs->envdecay; - m_vcf_rescoeff = exp( -1.20 + 3.455 * m_fs->reso ); -} - - - - -void lb302Filter::playNote( void ) -{ - m_vcf_c0 = m_vcf_e1; -} - - - -// -// lb302FilterIIR2 -// - -lb302FilterIIR2::lb302FilterIIR2( lb302FilterState * _p_fs ) : - lb302Filter( _p_fs ), - m_vcf_d1( 0 ), - m_vcf_d2( 0 ), - m_vcf_a( 0 ), - m_vcf_b( 0 ), - m_vcf_c( 1 ) -{ - m_dist = new effectLib::distortion<>( 1.0, 1.0f ); -} - - - - -lb302FilterIIR2::~lb302FilterIIR2() -{ - delete m_dist; -} - - - - -void lb302FilterIIR2::recalc( void ) -{ - lb302Filter::recalc(); - //m_dist->setThreshold(0.5+(m_fs->dist*2.0)); - m_dist->setThreshold( m_fs->dist * 75.0 ); -} - - - - -void lb302FilterIIR2::envRecalc( void ) -{ - lb302Filter::envRecalc(); - - // e0 is adjusted for Hz and doesn't need ENVINC - float w = m_vcf_e0 + m_vcf_c0; - float k = exp( -w / m_vcf_rescoeff ); - // Does this mean c0 is inheritantly? - m_vcf_a = 2.0 * cos( 2.0 * w ) * k; - m_vcf_b = -k * k; - m_vcf_c = 1.0 - m_vcf_a - m_vcf_b; -} - - - - -float lb302FilterIIR2::process( const float & _samp ) -{ - float ret = m_vcf_a * m_vcf_d1 + m_vcf_b * m_vcf_d2 + m_vcf_c * _samp; - // Delayed samples for filter - m_vcf_d2 = m_vcf_d1; - m_vcf_d1 = ret; - - if( m_fs->dist > 0 ) - { - ret = m_dist->nextSample( ret ); - } - // output = IIR2 + dry - return( ret ); -} - - - -// -// lb302Filter3Pole -// - -lb302Filter3Pole::lb302Filter3Pole( lb302FilterState * _p_fs ) : - lb302Filter( _p_fs ), - m_ay1( 0 ), - m_ay2( 0 ), - m_aout( 0 ), - m_lastin( 0 ) -{ -} - - - - -void lb302Filter3Pole::recalc( void ) -{ - // DO NOT CALL BASE CLASS - m_vcf_e0 = 0.000001; - m_vcf_e1 = 1.0; -} - - - - -// TODO: Try using k instead of vcf_reso -void lb302Filter3Pole::envRecalc( void ) -{ - lb302Filter::envRecalc(); - - - // e0 is adjusted for Hz and doesn't need ENVINC - float w = m_vcf_e0 + m_vcf_c0; - float k = ( m_fs->cutoff > 0.975 ) ? 0.975 : m_fs->cutoff; - //TODO: Fix high quality - float kfco = 50.0f + k * ( 2300.0f - 1600.0f * m_fs->envmod - + w * ( 700.0f + 1500.0f * k + ( 1500.0f + k * ( - engine::getMixer()->sampleRate() / 2.0f - 6000.0f ) ) - * m_fs->envmod ) ); - //+iacc*(.3+.7*kfco*kenvmod)*kaccent*kaccurve*2000 - - -#ifdef LB_24_IGNORE_ENVELOPE - // m_kfcn = m_fs->cutoff; - m_kfcn = 2.0 * kfco / engine::getMixer()->sampleRate(); -#else - m_kfcn = w; -#endif - m_kp = ( ( -2.7528 * m_kfcn + 3.0429 ) * m_kfcn + 1.718 ) * m_kfcn - - 0.9984; - m_kp1 = m_kp + 1.0; - m_kp1h = 0.5 * m_kp1; -#ifdef LB_24_RES_TRICK - k = exp( -w / m_vcf_rescoeff ); - m_kres = k * ( ( ( -2.7079 * m_kp1 + 10.963 ) * m_kp1 - 14.934 ) * m_kp1 - + 8.4974 ); -#else - m_kres = m_fs->reso * ( ( ( -2.7079 * m_kp1 + 10.963 ) * m_kp1 - - 14.934 ) * m_kp1 + 8.4974 ); -#endif - // ENVMOD was DIST*/ - m_value = 1.0 + ( m_fs->dist * ( 1.5 + 2.0 * m_kres - * ( 1.0 - m_kfcn ) ) ); -} - - - - -float lb302Filter3Pole::process( const float & _samp ) -{ - float ax1 = m_lastin; - float ay11 = m_ay1; - float ay31 = m_ay2; - m_lastin = _samp - tanh( m_kres * m_aout ); - m_ay1 = m_kp1h * ( m_lastin + ax1 ) - m_kp * m_ay1; - m_ay2 = m_kp1h * ( m_ay1 + ay11 ) - m_kp * m_ay2; - m_aout = m_kp1h * ( m_ay2 + ay31 ) - m_kp * m_aout; - - return( tanh( m_aout * m_value ) * LB_24_VOL_ADJUST - / ( 1.0 + m_fs->dist ) ); -} - - - -// -// PoLyBSynth -// - -polyb302Synth::polyb302Synth( instrumentTrack * _track ) : - instrument( _track, &polyb302_plugin_descriptor ) -{ - m_vcf_cut_knob = new knob( knobBright_26, this, - tr( "VCF Cutoff Frequency" ), - _track ); - m_vcf_cut_knob->setRange( 0.0f, 1.5f, 0.005f ); // Originally [0,1.0] - m_vcf_cut_knob->setInitValue( 0.75f ); - m_vcf_cut_knob->move( 75, 130 ); - m_vcf_cut_knob->setHintText( tr( "Cutoff Freq:" ) + " ", "" ); - m_vcf_cut_knob->setLabel( tr( "CUT" ) ); - - m_vcf_res_knob = new knob( knobBright_26, this, tr( "VCF Resonance" ), - _track ); - m_vcf_res_knob->setRange( 0.0f, 1.25f, 0.005f ); // Originally [0,1.0] - m_vcf_res_knob->setInitValue( 0.75f ); - m_vcf_res_knob->move( 120, 130 ); - m_vcf_res_knob->setHintText( tr( "Resonance:" ) + " ", "" ); - m_vcf_res_knob->setLabel( tr( "RES" ) ); - - m_vcf_mod_knob = new knob( knobBright_26, this, - tr( "VCF Envelope Mod" ), - _track ); - m_vcf_mod_knob->setRange( 0.0f, 1.0f, 0.005f ); // Originally [0,1.0] - m_vcf_mod_knob->setInitValue( 1.0f ); - m_vcf_mod_knob->move( 165, 130 ); - m_vcf_mod_knob->setHintText( tr( "Env Mod:" ) + " ", "" ); - m_vcf_mod_knob->setLabel( tr( "ENV MOD" ) ); - - m_vcf_dec_knob = new knob( knobBright_26, this, - tr( "VCF Envelope Decay" ), - _track ); - m_vcf_dec_knob->setRange( 0.0f, 1.0f, 0.005f ); // Originally [0,1.0] - m_vcf_dec_knob->setInitValue( 0.1f ); - m_vcf_dec_knob->move( 210, 130 ); - m_vcf_dec_knob->setHintText( tr( "Decay:" ) + " ", "" ); - m_vcf_dec_knob->setLabel( tr( "DEC" ) ); - -// m_slideToggle = new ledCheckBox( "Slide", this, tr( "Slide" ), _track ); -// m_slideToggle->move( 10, 180 ); - -// m_accentToggle = new ledCheckBox( "Accent", this, -// tr( "Accent" ), -// _track ); -// m_accentToggle->move( 10, 200 ); -// m_accentToggle->setDisabled(true); - -// m_deadToggle = new ledCheckBox( "Dead", this, tr( "Dead" ), _track ); -// m_deadToggle->move( 10, 220 ); - - m_db24Toggle = new ledCheckBox( "24dB/oct", this, - tr( "303-es-que, 24dB/octave, 3 pole filter" ), - _track ); - m_db24Toggle->move( 10, 150 ); - - - m_slide_dec_knob = new knob( knobBright_26, this, tr( "Slide Decay" ), - _track ); - m_slide_dec_knob->setRange( 0.0f, 1.0f, 0.005f ); // Originally [0,1.0] - m_slide_dec_knob->setInitValue( 0.6f ); - m_slide_dec_knob->move( 210, 75 ); - m_slide_dec_knob->setHintText( tr( "Slide Decay:" ) + " ", "" ); - m_slide_dec_knob->setLabel( tr( "SLIDE" ) ); - - m_vco_fine_detune_knob = new knob( knobBright_26, this, - tr( "VCO fine detuning" ), - _track ); - m_vco_fine_detune_knob->setRange( -100.0f, 100.0f, 1.0f ); - m_vco_fine_detune_knob->setInitValue( 0.0f ); - m_vco_fine_detune_knob->move( 165, 75 ); - m_vco_fine_detune_knob->setHintText( tr( "VCO Fine Detuning:" ) + " ", - "cents" ); - m_vco_fine_detune_knob->setLabel( tr( "DETUNE" ) ); - - - m_dist_knob = new knob( knobBright_26, this, tr( "Distortion" ), - _track ); - m_dist_knob->setRange( 0.0f, 1.0f, 0.01f ); // Originally [0,1.0] - m_dist_knob->setInitValue( 0.0f ); - m_dist_knob->move( 210, 190 ); - m_dist_knob->setHintText( tr( "DIST:" ) + " ", "" ); - m_dist_knob->setLabel( tr( "DIST" ) ); - - - m_wave_knob = new knob( knobBright_26, this, tr( "Waveform" ), _track ); - m_wave_knob->setRange( 0.0f, 5.0f, 1.0f ); // Originally [0,1.0] - m_wave_knob->setInitValue( 0.0f ); - m_wave_knob->move( 120, 75 ); - m_wave_knob->setHintText( tr( "WAVE:" ) + " ", "" ); - m_wave_knob->setLabel( tr( "WAVE" ) ); - - - setAutoFillBackground( TRUE ); - QPalette pal; - pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( - "artwork" ) ); - setPalette( pal ); - - connect( m_vcf_cut_knob, SIGNAL( valueChanged( float ) ), - this, SLOT ( filterChanged( float ) ) ); - connect( m_vcf_res_knob, SIGNAL( valueChanged( float ) ), - this, SLOT ( filterChanged( float ) ) ); - connect( m_vcf_mod_knob, SIGNAL( valueChanged( float ) ), - this, SLOT ( filterChanged( float ) ) ); - connect( m_vcf_dec_knob, SIGNAL( valueChanged( float ) ), - this, SLOT ( filterChanged( float ) ) ); - connect( m_vco_fine_detune_knob, SIGNAL( valueChanged( float ) ), - this, SLOT ( detuneChanged( float) ) ); - connect( m_db24Toggle, SIGNAL( toggled( bool ) ), - this, SLOT ( db24Toggled( bool) ) ); - connect( m_dist_knob, SIGNAL( valueChanged(float) ), - this, SLOT ( filterChanged( float ) ) ); - connect( m_wave_knob, SIGNAL( valueChanged( float ) ), - this, SLOT ( waveChanged( float ) ) ); -} - - - - -polyb302Synth::~polyb302Synth() -{ -} - - - - -void polyb302Synth::saveSettings( QDomDocument & _doc, QDomElement & _this ) -{ - m_vcf_cut_knob->saveSettings( _doc, _this, "vcf_cut" ); - m_vcf_res_knob->saveSettings( _doc, _this, "vcf_res" ); - m_vcf_mod_knob->saveSettings( _doc, _this, "vcf_mod" ); - m_vcf_dec_knob->saveSettings( _doc, _this, "vcf_dec" ); - - m_vco_fine_detune_knob->saveSettings( _doc, _this, "vco_detune" ); - m_wave_knob->saveSettings( _doc, _this, "shape" ); - m_dist_knob->saveSettings( _doc, _this, "dist" ); - m_slide_dec_knob->saveSettings( _doc, _this, "slide_dec" ); - -// m_slideToggle->saveSettings( _doc, _this, "slide" ); -// m_deadToggle->saveSettings( _doc, _this, "dead" ); - m_db24Toggle->saveSettings( _doc, _this, "db24"); -} - - - - -void polyb302Synth::loadSettings( const QDomElement & _this ) -{ - m_vcf_cut_knob->loadSettings( _this, "vcf_cut" ); - m_vcf_res_knob->loadSettings( _this, "vcf_res" ); - m_vcf_mod_knob->loadSettings( _this, "vcf_mod" ); - m_vcf_dec_knob->loadSettings( _this, "vcf_dec" ); - - m_vco_fine_detune_knob->loadSettings( _this, "vco_detune" ); - m_dist_knob->loadSettings( _this, "dist" ); - m_wave_knob->loadSettings( _this, "shape" ); - m_slide_dec_knob->loadSettings( _this, "slide_dec" ); - -// m_slideToggle->loadSettings( _this, "slide" ); -// m_deadToggle->loadSettings( _this, "dead" ); - m_db24Toggle->loadSettings( _this, "db24" ); -} - - - - -QString polyb302Synth::nodeName( void ) const -{ - return( polyb302_plugin_descriptor.name ); -} - - - - -void polyb302Synth::playNote( notePlayHandle * _n, bool ) -{ - //int nidx = _n->index(); - - //if( _n->nphsOfInstrumentTrack(_n->getInstrumentTrack()).first() != _n ) - //if( _n->released() && _n->nphsOfInstrumentTrack( _n->getInstrumentTrack() ).count() > 1 ) - // return; - -/* - if (_n->released() ) { - if( notePlayHandle::nphsOfInstrumentTrack( getInstrumentTrack() ).size() > 0 - && notePlayHandle::nphsOfInstrumentTrack( getInstrumentTrack(), - TRUE ).last() == _n ) - { - return; - } - } -*/ - - handleState * hstate; - if( !_n->m_pluginData ) - { - hstate = new handleState( this ); - _n->m_pluginData = hstate; - m_handleStates.push_back( hstate ); - } - else - { - hstate = (handleState *)_n->m_pluginData; - } - - if( _n->totalFramesPlayed() <= hstate->m_lastFramesPlayed ) - { - // TODO: Try moving to the if() below -// if( m_deadToggle->value() == 0 ) - { - hstate->m_sample_cnt = 0; - hstate->m_vca_mode = 0; - hstate->m_vca_a = 0; - } - - // Adjust inc on SampRate change or detuning change - hstate->m_vco_inc = hstate->m_vco_detune - / engine::getMixer()->sampleRate(); - - // Initiate Slide - // TODO: Break out into function, - // should be called again on detuneChanged - if( hstate->m_vco_slideinc ) - { - hstate->m_vco_slide = hstate->m_vco_inc - - hstate->m_vco_slideinc; - hstate->m_vco_slidebase = hstate->m_vco_inc; - hstate->m_vco_slideinc = 0; - } - else - { - hstate->m_vco_slide = 0; - } - // End break-out - - // Slide note, save inc for next note -// if( m_slideToggle->value() ) -// { -// hstate->m_vco_slideinc = hstate->m_vco_inc; - // May need to equal m_vco_slidebase+m_vco_slide if last - // note slid -// } - - - hstate->recalcFilter(); - -// if( m_deadToggle->value() == 0 ) - { - // Swap next two blocks?? - hstate->m_vcf->playNote(); - // Ensure envelope is recalculated - hstate->m_vcf_envpos = ENVINC; - - // Double Check - hstate->m_vca_mode = 0; - hstate->m_vca_a = 0.0; - } - } - - const fpp_t frames = _n->framesLeftForCurrentPeriod(); - sampleFrame * buf = new sampleFrame[frames]; - - hstate->process( buf, frames, _n->frequency() ); - getInstrumentTrack()->processAudioBuffer( buf, frames, _n ); - - delete[] buf; - - hstate->m_lastFramesPlayed = _n->totalFramesPlayed(); -} - - - - -void polyb302Synth::deleteNotePluginData( notePlayHandle * _n ) -{ - handleState * hstate = (handleState *)_n->m_pluginData; - m_handleStates.removeAll( hstate ); - delete hstate; -} - - - - -void polyb302Synth::db24Toggled( bool ) -{ - for( QList::iterator it = m_handleStates.begin(); - it != m_handleStates.end(); ++it ) - { - ( *it )->db24Toggled(); - } -} - - - - -void polyb302Synth::detuneChanged( float ) -{ - for( QList::iterator it = m_handleStates.begin(); - it != m_handleStates.end(); ++it ) - { - ( *it )->detuneChanged(); - } -} - - - - -// TODO: Split into one function per knob. envdecay doesn't require -// recalcFilter. -void polyb302Synth::filterChanged( float ) -{ - for( QList::iterator it = m_handleStates.begin(); - it != m_handleStates.end(); ++it ) - { - ( *it )->filterChanged(); - } -} - - - - -// TODO: Set m_vco_shape in here. -void polyb302Synth::waveChanged( float ) -{ - switch( (int)rint( m_wave_knob->value() ) ) - { - case 0: - m_wave_knob->setHintText( tr( "Sawtooth " ), "" ); - break; - case 1: - m_wave_knob->setHintText( tr( "Inverted Sawtooth " ), - "" ); - break; - case 2: - m_wave_knob->setHintText( tr( "Triangle " ), "" ); - break; - case 3: - m_wave_knob->setHintText( tr( "Square " ), "" ); - break; - case 4: - m_wave_knob->setHintText( tr( "Rounded Square " ), "" ); - break; - case 5: - m_wave_knob->setHintText( tr( "Moog " ), "" ); - break; - } -} - - - - - - - - -polyb302Synth::handleState::handleState( const polyb302Synth * _synth ) -{ - m_vco_inc = 0.0; - m_vco_c = 0; - m_vco_k = 0; - - m_vco_slide = 0; - m_vco_slideinc = 0; - - m_fs.cutoff = 0; - m_fs.envmod = 0; - m_fs.reso = 0; - m_fs.envdecay = 0; - m_fs.dist = 0; - - m_vcf_envpos = ENVINC; - m_vco_detune = 0; - - // Start VCA on an attack. - m_vca_mode = 0; - m_vca_a = 0; - //m_vca_attack = 1.0 - 0.94406088; - m_vca_attack = 1.0 - 0.96406088; - m_vca_decay = 0.99897516; - - m_vco_shape = SAWTOOTH; - - // Experimenting between original (0.5) and 1.0 - m_vca_a0 = 0.5; - - if( _synth->m_db24Toggle->isChecked() ) - { - m_vcf = new lb302Filter3Pole( &m_fs ); - } - else - { - m_vcf = new lb302FilterIIR2( &m_fs ); - } - recalcFilter(); - - m_lastFramesPlayed = 0; - - m_synth = _synth; - - filterChanged(); - detuneChanged(); -} - - - - -polyb302Synth::handleState::~handleState() -{ - delete m_vcf; -} - - - - -void polyb302Synth::handleState::db24Toggled( void ) -{ - delete m_vcf; - if( m_synth->m_db24Toggle->isChecked() ) - { - m_vcf = new lb302Filter3Pole( &m_fs ); - } - else - { - m_vcf = new lb302FilterIIR2( &m_fs ); - } - recalcFilter(); -} - - - - -void polyb302Synth::handleState::detuneChanged( void ) -{ - m_vco_detune = powf( 2.0f, - (float)m_synth->m_vco_fine_detune_knob->value() - / 1200.0f ); - m_vco_inc = m_vco_detune / engine::getMixer()->sampleRate(); - - // If a slide note is pending, - if( m_vco_slideinc ) - { - m_vco_slideinc = m_vco_inc; - } - - // If currently sliding, - // May need to rescale m_vco_slide as well - if( m_vco_slide ) - { - m_vco_slidebase = m_vco_detune - / engine::getMixer()->sampleRate(); - } -} - - - - -// TODO: Split into one function per knob. envdecay doesn't require -// recalcFilter. -void polyb302Synth::handleState::filterChanged( void ) -{ - m_fs.cutoff = m_synth->m_vcf_cut_knob->value(); - m_fs.reso = m_synth->m_vcf_res_knob->value(); - m_fs.envmod = m_synth->m_vcf_mod_knob->value(); - m_fs.dist = LB_DIST_RATIO * m_synth->m_dist_knob->value(); - - float d = 0.2 + 2.3 * m_synth->m_vcf_dec_knob->value(); - d *= engine::getMixer()->sampleRate(); - // decay is 0.1 to the 1/d * ENVINC - m_fs.envdecay = pow( 0.1, ENVINC / d ); - // vcf_envdecay is now adjusted for both - // sampling rate and ENVINC - recalcFilter(); -} - - - - -// OBSOLETE. Break apart once we get Q_OBJECT to work. >:[ -void polyb302Synth::handleState::recalcFilter( void ) -{ - m_vcf->recalc(); - - // THIS IS OLD 3pole/24dB code, I may reintegrate it. Don't need it - // right now. Should be toggled by LB_24_RES_TRICK at the moment. - - /*kfcn = 2.0 * (((vcf_cutoff*3000))) / m_LB_HZ; - kp = ((-2.7528*kfcn + 3.0429)*kfcn + 1.718)*kfcn - 0.9984; - kp1 = kp+1.0; - kp1h = 0.5*kp1; - kres = (((vcf_reso))) * (((-2.7079*kp1 + 10.963)*kp1 - 14.934)*kp1 + 8.4974); - value = 1.0+( (((0))) *(1.5 + 2.0*kres*(1.0-kfcn))); // ENVMOD was DIST*/ - - m_vcf_envpos = ENVINC; // Trigger filter update in process() -} - - - - -void polyb302Synth::handleState::process( sampleFrame * _outbuf, - const Uint32 _size, - float _freq ) -{ - for( Uint32 i = 0; i < _size; i++ ) - { - // update m_vcf - if( m_vcf_envpos >= ENVINC ) - { - m_vcf->envRecalc(); - - m_vcf_envpos = 0; - - if( m_vco_slide ) - { - m_vco_inc = m_vco_slidebase - m_vco_slide; - // Calculate coeff from dec_knob on knob change. - // TODO: Adjust for ENVINC - m_vco_slide *= 0.9 - + ( m_synth->m_slide_dec_knob->value() - * 0.0999 ); - } - } - - m_sample_cnt++; - m_vcf_envpos++; - - // update vco - m_vco_c += m_vco_inc * _freq; - if( m_vco_c > 0.5 ) - { - m_vco_c -= 1.0; - } - - switch( (int)rint( m_synth->m_wave_knob->value() ) ) - { - case 0: m_vco_shape = SAWTOOTH; break; - case 1: m_vco_shape = INVERTED_SAWTOOTH; break; - case 2: m_vco_shape = TRIANGLE; break; - case 3: m_vco_shape = SQUARE; break; - case 4: m_vco_shape = ROUND_SQUARE; break; - case 5: m_vco_shape = MOOG; break; - default: m_vco_shape = SAWTOOTH; break; - } - - // add m_vco_shape_param the changes the shape of each curve. - // merge sawtooths with triangle and square with round square? - switch( m_vco_shape ) - { - case SAWTOOTH: // p0: curviness of line - // Is this sawtooth backwards? - m_vco_k = m_vco_c; - break; - - case INVERTED_SAWTOOTH: // p0: curviness of line - // Is this sawtooth backwards? - m_vco_k = -m_vco_c; - break; - - // TODO: I think TRIANGLE is broken. - // p0: duty rev.saw<->triangle<->saw p1: curviness - case TRIANGLE: - m_vco_k = m_vco_c * 2.0 + 0.5; - if( m_vco_k > 0.5 ) - { - m_vco_k = 1.0 - m_vco_k; - } - break; - - case SQUARE: // p0: slope of top - m_vco_k = ( m_vco_c < 0 ) ? 0.5 : -0.5; - break; - - case ROUND_SQUARE: // p0: width of round - m_vco_k = ( m_vco_c < 0 ) ? - sqrtf( 1 - m_vco_c * m_vco_c * 4 ) - - 0.5 : - -0.5; - break; - - // Maybe the fall should be exponential/sinsoidal - // instead of quadric. - case MOOG: - // [-0.5, 0]: Rise, [0,0.25]: Slope down, - // [0.25,0.5]: Low - m_vco_k = m_vco_c * 2.0 + 0.5; - if( m_vco_k > 1.0 ) - { - m_vco_k = -0.5; - } - else if( m_vco_k > 0.5 ) - { - float w = 2 * ( m_vco_k - 0.5 ) - 1; - m_vco_k = 0.5 - sqrtf( 1 - w * w ); - // MOOG wave gets filtered away - m_vco_k *= 2.0; - } - break; - } - - // Write out samples. -#ifdef LB_FILTERED - float samp = m_vcf->process( m_vco_k ) * 2.0 * m_vca_a; -#else - float samp = m_vco_k * m_vca_a; -#endif - - for( int c = 0; c < DEFAULT_CHANNELS; c++ ) - { - _outbuf[i][c] = samp; - } - - - // Handle Envelope - // TODO: Add decay once I figure out how to extend past the end - // of a note. - if( m_vca_mode == 0 ) - { - m_vca_a += ( m_vca_a0 - m_vca_a ) * m_vca_attack; - if( m_sample_cnt >= 0.5 - * engine::getMixer()->sampleRate() ) - { - m_vca_mode = 2; - } - } - else if( m_vca_mode == 1 ) - { - m_vca_a *= m_vca_decay; - // the following line actually speeds up processing - if( m_vca_a < 1 / 65536.0 ) - { - m_vca_a = 0; - m_vca_mode = 2; - } - } - - } -} diff --git a/plugins/polyb302/polyb302.h b/plugins/polyb302/polyb302.h deleted file mode 100644 index c32919f76..000000000 --- a/plugins/polyb302/polyb302.h +++ /dev/null @@ -1,252 +0,0 @@ -/* - * polyb302.h - declaration of instrument polyb302, an attempt to emulate the - * Roland TB303 bass synth - * - * Copyright (c) 2006-2007 Paul Giblock - * - * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net - * - * lb302FilterIIR2 is based on the gsyn filter code by Andy Sloane. - * - * lb302Filter3Pole is based on the TB303 instrument written by - * Josep M Comajuncosas for the CSounds library - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program (see COPYING); if not, write to the - * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301 USA. - * - */ - - -#ifndef _POLYB302_H_ -#define _POLYB302_H_ - -#include "effect_lib.h" -#include "instrument.h" -#include "mixer.h" - - -class knob; -class ledCheckBox; -class notePlayHandle; - - -typedef struct -{ - float cutoff; - float reso; - float envmod; - float envdecay; - float dist; -} lb302FilterState; - - - - -class lb302Filter -{ -public: - lb302Filter( lb302FilterState * _p_fs ); - virtual ~lb302Filter() {}; - - virtual void recalc( void ); - virtual void envRecalc( void ); - virtual float process( const float & _samp ) = 0; - virtual void playNote( void ); - - -protected: - lb302FilterState * m_fs; - - // Filter Decay - float m_vcf_c0; // c0=e1 on retrigger; c0*=ed every sample; cutoff=e0+c0 - float m_vcf_e0; // e0 and e1 for interpolation - float m_vcf_e1; - float m_vcf_rescoeff; // Resonance coefficient [0.30,9.54] - -}; - - - - -class lb302FilterIIR2 : public lb302Filter -{ -public: - lb302FilterIIR2( lb302FilterState * _p_fs ); - virtual ~lb302FilterIIR2(); - - virtual void recalc( void ); - virtual void envRecalc( void ); - virtual float process( const float & _samp ); - - -protected: - float m_vcf_d1; // d1 and d2 are added back into the sample with - float m_vcf_d2; // vcf_a and b as coefficients. IIR2 resonance - // loop. - - // IIR2 Coefficients for mixing dry and delay. - float m_vcf_a; // Mixing coefficients for the final sound. - float m_vcf_b; - float m_vcf_c; - - effectLib::distortion<> * m_dist; - -}; - - - - -class lb302Filter3Pole : public lb302Filter -{ -public: - lb302Filter3Pole( lb302FilterState * _p_fs ); - - virtual void envRecalc( void ); - virtual void recalc( void ); - virtual float process( const float & _samp ); - - -protected: - float m_kfcn, - m_kp, - m_kp1, - m_kp1h, - m_kres; - float m_ay1, - m_ay2, - m_aout, - m_lastin, - m_value; -}; - - - - -class polyb302Synth : public instrument -{ - Q_OBJECT -public: - polyb302Synth( instrumentTrack * _track ); - virtual ~polyb302Synth(); - - virtual void FASTCALL playNote( notePlayHandle * _n, - bool _try_parallelizing ); - virtual void FASTCALL deleteNotePluginData( notePlayHandle * _n ); - - - virtual void FASTCALL saveSettings( QDomDocument & _doc, - QDomElement & _parent ); - virtual void FASTCALL loadSettings( const QDomElement & _this ); - - virtual QString nodeName( void ) const; - - -public slots: - void db24Toggled( bool ); - void detuneChanged( float ); - void filterChanged( float ); - void waveChanged( float ); - - -private: - class handleState - { - public: - handleState( const polyb302Synth * _synth ); - virtual ~handleState(); - - enum vco_shape_t { - SAWTOOTH, INVERTED_SAWTOOTH, SQUARE, TRIANGLE, MOOG, - ROUND_SQUARE - }; - - // Oscillator - // Sample increment for the frequency. Creates Sawtooth. - float m_vco_inc; - // Raw oscillator sample [-0.5,0.5] - float m_vco_k; - // Raw oscillator sample [-0.5,0.5] - float m_vco_c; - - // Current value of slide exponential curve. Nonzero=sliding - float m_vco_slide; - // Slide base to use in next node. Nonzero=slide next note - float m_vco_slideinc; - // The base vco_inc while sliding. - float m_vco_slidebase; - - float m_vco_detune; - - vco_shape_t m_vco_shape; - - // User settings - lb302FilterState m_fs; - lb302Filter * m_vcf; - - float m_lastFramesPlayed; - - // More States - // Update counter. Updates when >= ENVINC - int m_vcf_envpos; - - float m_vca_attack; // Amp attack - float m_vca_decay; // Amp decay - float m_vca_a0; // Initial amplifier coefficient - float m_vca_a; // Amplifier coefficient. - - // Envelope State - int m_vca_mode; // 0: attack, 1: decay, 2: idle - - // My hacks - int m_sample_cnt; - - // TODO: split synth slots - const polyb302Synth * m_synth; - - void recalcFilter( void ); - - void process( sampleFrame * _outbuf, const Uint32 _size, - float _freq ); - - void db24Toggled( void ); - void detuneChanged( void ); - void filterChanged( void ); - - } ; - - - knob * m_vcf_cut_knob; - knob * m_vcf_res_knob; - knob * m_vcf_dec_knob; - knob * m_vcf_mod_knob; - - knob * m_vco_fine_detune_knob; - - knob * m_dist_knob; - knob * m_wave_knob; - -// ledCheckBox * m_slideToggle; -// ledCheckBox * m_accentToggle; -// ledCheckBox * m_deadToggle; - ledCheckBox * m_db24Toggle; - - knob * m_slide_dec_knob; - - QList m_handleStates; - -} ; - - -#endif