Browse Source

Ported Wave Shaper to new archetecture

master
edgeeffect 22 years ago
parent
commit
f3028d465e
7 changed files with 328 additions and 652 deletions
  1. +14
    -19
      SpiralSound/Plugins/WaveShaperPlugin/Makefile.in
  2. +0
    -289
      SpiralSound/Plugins/WaveShaperPlugin/WaveShaperIcon.xpm
  3. +150
    -164
      SpiralSound/Plugins/WaveShaperPlugin/WaveShaperPlugin.C
  4. +29
    -32
      SpiralSound/Plugins/WaveShaperPlugin/WaveShaperPlugin.h
  5. +0
    -17
      SpiralSound/Plugins/WaveShaperPlugin/WaveShaperPlugin.pro
  6. +106
    -98
      SpiralSound/Plugins/WaveShaperPlugin/WaveShaperPluginGUI.C
  7. +29
    -33
      SpiralSound/Plugins/WaveShaperPlugin/WaveShaperPluginGUI.h

+ 14
- 19
SpiralSound/Plugins/WaveShaperPlugin/Makefile.in View File

@@ -1,22 +1,19 @@
#############################################################################
# Makefile for building WaveShaperPlugin.so
# Generated by tmake at 08:01, 2001/10/05
# Project: WaveShaperPlugin
# Template: app
#############################################################################

####### Compiler, tools and options

CC = gcc
CXX = g++
CFLAGS = @CFLAGS@
CXXFLAGS= @CXXFLAGS@
CFLAGS = @CFLAGS@
CXXFLAGS= @CXXFLAGS@
INCPATH = -I/usr/X11R6/include
LINK = g++ -shared
LFLAGS =
LFLAGS =
LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -ldl
MOC = moc
UIC =
UIC =

TAR = tar -cf
GZIP = gzip -9f
@@ -65,12 +62,12 @@ OBJECTS = ../SpiralPlugin.o \
../../Sample.o \
WaveShaperPlugin.o \
WaveShaperPluginGUI.o
INTERFACES =
UICDECLS =
UICIMPLS =
SRCMOC =
OBJMOC =
DIST =
INTERFACES =
UICDECLS =
UICIMPLS =
SRCMOC =
OBJMOC =
DIST =
TARGET = WaveShaperPlugin.so

####### Implicit rules
@@ -102,10 +99,8 @@ $(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC)

moc: $(SRCMOC)

tmake: Makefile

Makefile: WaveShaperPlugin.pro
tmake WaveShaperPlugin.pro -o Makefile
tmake:
tmake WaveShaperPlugin.pro

dist:
$(TAR) WaveShaperPlugin.tar WaveShaperPlugin.pro $(SOURCES) $(HEADERS) $(INTERFACES) $(DIST)
@@ -114,7 +109,7 @@ dist:
clean:
-rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS) $(TARGET)
-rm -f *~ core
install:
$(INSTALL) $(TARGET) $(libdir)/SpiralPlugins

@@ -157,7 +152,7 @@ WaveShaperPlugin.o: WaveShaperPlugin.C \
../Widgets/Fl_DragBar.H \
../SpiralPluginGUI.h \
../Widgets/Fl_DragBar.H \
WaveShaperIcon.xpm
SpiralIcon.xpm

WaveShaperPluginGUI.o: WaveShaperPluginGUI.C \
WaveShaperPluginGUI.h \


+ 0
- 289
SpiralSound/Plugins/WaveShaperPlugin/WaveShaperIcon.xpm View File

@@ -1,289 +0,0 @@
/* XPM */
static char * WaveShaperIcon_xpm[] = {
"36 36 250 2",
" c None",
". c #8B889B",
"+ c #9C99AA",
"@ c #ADAAB9",
"# c #837F94",
"$ c #7D7990",
"% c #9995A7",
"& c #67627C",
"* c #CDCBD4",
"= c #FCFCFC",
"- c #D1D0D8",
"; c #FFFFFF",
"> c #F1F1F3",
", c #848095",
"' c #2A2248",
") c #CFCED6",
"! c #68637D",
"~ c #ABA8B6",
"{ c #D5D3DB",
"] c #9490A2",
"^ c #C4C4C4",
"/ c #1D1C1D",
"( c #313134",
"_ c #EEEFEE",
": c #FBFBFB",
"< c #EFEFEF",
"[ c #7B768D",
"} c #464060",
"| c #DEDEE1",
"1 c #CBCACC",
"2 c #EEEEF1",
"3 c #79758C",
"4 c #FBFBFC",
"5 c #A2A2A2",
"6 c #171800",
"7 c #F5F6F5",
"8 c #747474",
"9 c #2A2A2B",
"0 c #403958",
"a c #7D788F",
"b c #C0BEC8",
"c c #BCBAC6",
"d c #BCBAC5",
"e c #625C79",
"f c #2B2932",
"g c #191919",
"h c #CCCCCC",
"i c #807B91",
"j c #3B3556",
"k c #F2F2F4",
"l c #929292",
"m c #BFBFBF",
"n c #111111",
"o c #000000",
"p c #100E15",
"q c #868689",
"r c #FEFDFE",
"s c #D9D7DE",
"t c #9C98AA",
"u c #FDFCFD",
"v c #DDDDDD",
"w c #575755",
"x c #5E5E5E",
"y c #C4C2CD",
"z c #423C5C",
"A c #F0F0F2",
"B c #939393",
"C c #555555",
"D c #4A4A4A",
"E c #010101",
"F c #282828",
"G c #C2C2C2",
"H c #DBDAE0",
"I c #615C78",
"J c #F6F6F7",
"K c #DADADA",
"L c #545454",
"M c #B8B8B8",
"N c #48445C",
"O c #2B2B2C",
"P c #686417",
"Q c #D3D3D3",
"R c #C1BEC9",
"S c #474060",
"T c #31294D",
"U c #716C85",
"V c #65607A",
"W c #625D78",
"X c #D5D4DB",
"Y c #F7F7F7",
"Z c #8B8B8B",
"` c #393643",
" . c #47415F",
".. c #9692A4",
"+. c #D9D8DE",
"@. c #F7F7F8",
"#. c #918DA0",
"$. c #B8B5C1",
"%. c #D1D1D1",
"&. c #252525",
"*. c #727175",
"=. c #FEFEFF",
"-. c #9D99AA",
";. c #DBD9E0",
">. c #E9E9E9",
",. c #CBCBCB",
"'. c #E0E0E0",
"). c #6C6C6C",
"!. c #515151",
"~. c #A6A6A7",
"{. c #827E93",
"]. c #615C77",
"^. c #EAEAED",
"/. c #DFDFE1",
"(. c #FFFF00",
"_. c #1E1D24",
":. c #9894A7",
"<. c #B1AEBB",
"[. c #69686F",
"}. c #969422",
"|. c #615C76",
"1. c #5F5A75",
"2. c #413E4D",
"3. c #1A1A1C",
"4. c #C3C1CB",
"5. c #9D9D9D",
"6. c #202020",
"7. c #383838",
"8. c #4C4C4C",
"9. c #C9C7D0",
"0. c #F1F1F1",
"a. c #F8F8F8",
"b. c #AEACB9",
"c. c #FEFEFE",
"d. c #1D1D1D",
"e. c #B7B5C1",
"f. c #9390A2",
"g. c #BBBBBB",
"h. c #414141",
"i. c #28272A",
"j. c #F4F4F6",
"k. c #605B76",
"l. c #736E86",
"m. c #D8D8D8",
"n. c #727272",
"o. c #848486",
"p. c #CCCBD3",
"q. c #747087",
"r. c #6D6881",
"s. c #1C1C1C",
"t. c #242424",
"u. c #656566",
"v. c #F6F6F6",
"w. c #E8E6EA",
"x. c #706B84",
"y. c #E3E1E6",
"z. c #474746",
"A. c #C8C8C8",
"B. c #373639",
"C. c #FDFCFE",
"D. c #ABA8B7",
"E. c #F1F0F3",
"F. c #6D6980",
"G. c #AEAEAE",
"H. c #95929E",
"I. c #5B5A5C",
"J. c #F7F6F7",
"K. c #F4F3F5",
"L. c #908C9F",
"M. c #C8C6D0",
"N. c #837E96",
"O. c #86868A",
"P. c #ECEBEE",
"Q. c #5B5571",
"R. c #646078",
"S. c #AFAFB0",
"T. c #454545",
"U. c #363636",
"V. c #7A7A7A",
"W. c #C8C8C9",
"X. c #212025",
"Y. c #969699",
"Z. c #FAFAFA",
"`. c #F8F8F9",
" + c #A29EAF",
".+ c #F7F6F8",
"++ c #F0F0F1",
"@+ c #B8B7B9",
"#+ c #E4E4E4",
"$+ c #FDFDFD",
"%+ c #A5A2B2",
"&+ c #3B3456",
"*+ c #A8A5B4",
"=+ c #525252",
"-+ c #848387",
";+ c #CDCDCD",
">+ c #8D899C",
",+ c #494262",
"'+ c #68627C",
")+ c #40395A",
"!+ c #ECECEC",
"~+ c #B4B5B5",
"{+ c #313232",
"]+ c #E3E3E3",
"^+ c #B1AEBC",
"/+ c #BDBBC6",
"(+ c #3C3556",
"_+ c #898599",
":+ c #EDEDED",
"<+ c #39393A",
"[+ c #333333",
"}+ c #F5F5F5",
"|+ c #2B2B2B",
"1+ c #2D2A3D",
"2+ c #B6B4C1",
"3+ c #F5F5F6",
"4+ c #605A76",
"5+ c #DAD8DF",
"6+ c #F5F4F6",
"7+ c #615B76",
"8+ c #524D6A",
"9+ c #E4E3E8",
"0+ c #D5D5D5",
"a+ c #1B1B1B",
"b+ c #303030",
"c+ c #AAABAB",
"d+ c #585464",
"e+ c #B0AEBB",
"f+ c #A29FAF",
"g+ c #E9E8E9",
"h+ c #787779",
"i+ c #2D2D2E",
"j+ c #595959",
"k+ c #FAFAFB",
"l+ c #807B92",
"m+ c #B0ADBB",
"n+ c #E8E7EB",
"o+ c #3A3258",
"p+ c #E6E5EA",
"q+ c #DFDEE3",
"r+ c #443E5E",
"s+ c #BAB8C4",
"t+ c #C1BFCA",
"u+ c #E0E0E5",
"v+ c #D0CED6",
"w+ c #362F52",
"x+ c #CECCD5",
"y+ c #413A5B",
"z+ c #6A657F",
"A+ c #9793A6",
" ",
" ",
" ",
" . + @ # $ % ",
" & * = * - ; > , ' ; ; ; ) ! ",
" ~ ; ; { ] ; ^ / ( _ ; : < [ ",
" } | 1 2 3 4 5 6 6 7 : 8 9 0 a b ",
" c : d e f g h i j k l 6 6 ; m n o p q r s ",
" t u ; v w 6 6 x y z A B 6 C ; D E o F G ; H ",
" I J ; ; K L 6 6 6 M N O 6 6 P 6 6 6 6 Q R S T U V ",
" W X ; ; ; ; Y Z 6 6 6 6 6 6 6 P 6 6 6 6 ` ...+.@.#. ",
" $.; ; ; ; ; ; = %.&.6 6 6 6 6 P 6 6 6 6 6 *.=.; ; -. ",
" ;.; ; >.Q h ,.'.).6 6 6 6 6 6 P 6 6 6 6 6 6 !.~.4 {. ",
" ].^.; /.6 6 6 6 6 6 6 6 6 6 6 6 (.(.6 6 6 6 6 6 _.:. ",
" U @ <.[.6 6 6 6 6 6 6 6 6 6 }.(.}.6 (.6 6 6 6 6 ",
" |.1.2.6 6 6 6 6 6 6 6 6 6 (.6 P 6 6 (.6 6 6 6 3. ",
" 4.; ; 5.6.6.7.8.6.6 6 6 6 6 (.6 P 6 6 (.6 6 6 6 6 ",
" 9.; ; 0.a.; ; ; P P P P P P (.P P P P (.P P P 6 6 ",
" b.; ; ; ; c.; ; d.6 6 6 6 6 (.6 P 6 6 6 (.6 6 (.6 e., ",
" f.; ; c.; : g.h.6 6 6 6 6 (.6 6 P 6 6 6 (.6 (.6 i.c.j.k. ",
" l.; ; ; m.n.6 6 6 6 6 6 6 (.6 6 P 6 6 6 6 (.}.6 o.; ; p.q. ",
" r.J ; : s.6 6 6 6 t.6 6 (.}.6 6 P 6 6 6 6 6 6 6 u.v.; ; w.x. ",
" y.; ; z.6 6 6 6 A.(.(.6 6 6 6 P 6 6 6 6 6 6 6 6 B.C.; ; > x. ",
" D.; E.F.6 6 6 G.c.; H.6 6 6 6 6 6 6 6 6 6 6 6 6 6 I.J.; ; K.L. ",
" x.M.! N.O.6 x ; ; P.Q.R.S.l T.6 6 6 U.V.W.X.6 6 6 6 Y.Z.; ; `.@ ",
" +.+++@+#+$+; %+&+*+; v.T.6 6 6 =+; ; -+6 6 6 6 6 ;+; ; = >+ ",
" ,+> ; ; ; ; ; ; '+)+; ; !+7.6 6 6 D ; ; ~+6 6 6 6 {+]+; ; ^+ ",
" > ; ; ; ; /+(+_+; ; :+<+6 6 6 [+; ; }+|+6 6 1+2+; 3+3 ",
" 4+5+= ; 6+7+8+9+; ; 0+a+6 6 6 b+; ; ; c+=+d+ ",
" e+4 f+ W ; ; ; g+h+b+6 i+j+; ; ; c.k+l+ ",
" m+; ; ; ; ; n+o+p+; ; ; ; = q+r+ ",
" s+t+u+4 ; ; v+w+x+; ; ; s _+S ",
" y+ z+A+_+ ",
" ",
" ",
" "};

+ 150
- 164
SpiralSound/Plugins/WaveShaperPlugin/WaveShaperPlugin.C View File

@@ -1,4 +1,4 @@
/* WaveShaper Plugin Copyleft (C) 2001 Yves Usson
/* WaveShaper Plugin Copyleft (C) 2001 Yves Usson
* for SpiralSynthModular
* Copyleft (C) 2001 David Griffiths <dave@pawfal.org>
*
@@ -15,190 +15,176 @@
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
*/
#include "WaveShaperPlugin.h"
#include "WaveShaperPluginGUI.h"
#include <FL/Fl_Button.h>
#include "WaveShaperIcon.xpm"
#include "SpiralIcon.xpm"

extern "C" {
SpiralPlugin* CreateInstance()
{
return new WaveShaperPlugin;
}

char** GetIcon()
{
return WaveShaperIcon_xpm;
SpiralPlugin* CreateInstance() {
return new WaveShaperPlugin;
}

int GetID()
{
return 0x0032;
}
char** GetIcon() {
return SpiralIcon_xpm;
}

///////////////////////////////////////////////////////

WaveShaperPlugin::WaveShaperPlugin()
{
m_PluginInfo.Name="WaveShaper";
m_PluginInfo.Width=278;
m_PluginInfo.Height=260;
m_PluginInfo.NumInputs=1;
m_PluginInfo.NumOutputs=1;
m_PluginInfo.PortTips.push_back("Input");
m_PluginInfo.PortTips.push_back("Out");
wt = new float[512];
for (int i=0;i<512;i++) wt[i] = (i / 256.0 - 1.0);
m_Wave = 1;
for (int i=0;i<6;i++) m_Coefs[i] = 0.0;
m_Coefs[0] = 1.0;
}

WaveShaperPlugin::~WaveShaperPlugin()
{
delete [] wt;
}

PluginInfo &WaveShaperPlugin::Initialise(const HostInfo *Host)
{
PluginInfo& Info = SpiralPlugin::Initialise(Host);
Calc();
return Info;
}

SpiralGUIType *WaveShaperPlugin::CreateGUI()
{
m_GUI = new WaveShaperPluginGUI(m_PluginInfo.Width,
m_PluginInfo.Height,
this,m_HostInfo);
m_GUI->hide();
return m_GUI;
}

void WaveShaperPlugin::Execute()
{
float k1,k2;
if (!InputExists(0)) return;
for (int i=0;i<m_HostInfo->BUFSIZE;i++)
{
float v = GetInput(0,i);
int index = (short)(256.0*v)+256;
// short rm = v - ((index-256)*(long)SpiralInfo::MAXSAMPLE)/256;
if (index<0) index=0;
if (index>511) index=511;
// k1 = rm / (SpiralInfo::MAXSAMPLE/256.0);
// v = (short)(k1*(wt[index]-wt[index+1])+wt[index+1]);
SetOutput(0,i,wt[index]);
}
}

void WaveShaperPlugin::Calc(void)

{
int i;
float xx,x,y,max;

if (m_Wave)
{
max = 1.0;
for (i=0;i<512;i++)
{
x = i / 256.0 - 1.0;
y = 0;
xx = x;
for (int j=1; j<7; j++)
{
y += m_Coefs[j-1] * xx;
xx *= x;
}
y = fabs(y);
max = max > y? max:y;
}
for (i=0;i<512;i++)
{
x = i / 256.0 - 1.0;
y = 0;
xx = x;
for (int j=1; j<7; j++)
{
y += m_Coefs[j-1] * xx;
xx *= x;
}
y /= max;
set(i,y);
}
}
else
{
max = 1.0;
for (i=0;i<512;i++)
{
x = (i / 256.0 - 1.0)*M_PI;
y = 0;
for (int j=1; j<7; j++)
y += m_Coefs[j-1] * sin(x*(1+(j-1)*3));
y = fabs(y);
max = max > y? max:y;
}
for (i=0;i<512;i++)
{
x = (i / 256.0 - 1.0)*M_PI;
y = 0;
for (int j=1; j<7; j++)
y += m_Coefs[j-1] * sin(x*(1+(j-1)*3));
y /= max;
set(i,y);
}
}
}

float WaveShaperPlugin::Get(int index)

{
if ((index < 0) || (index > 511)) return 0;
return wt[index];
}

void WaveShaperPlugin::set(int index,float v)

{
if ((index < 0) || (index > 511)) return;
if (v > 1.0f) v = 1.0f;
if (v < -1.0f) v = -1.0f;
wt[index] = v;
int GetID() {
return 0x0032;
}

void WaveShaperPlugin::SetCoef(int index,float v){
if ((index < 0) || (index > 5)) return;
m_Coefs[index] = v;
}

void WaveShaperPlugin::SetWaveType(int t){
m_Wave = t;
}
///////////////////////////////////////////////////////

float WaveShaperPlugin::GetCoef(int index){
WaveShaperPlugin::WaveShaperPlugin () {
int i;
m_PluginInfo.Name = "WaveShaper";
m_PluginInfo.Width = 278;
m_PluginInfo.Height = 260;
m_PluginInfo.NumInputs = 1;
m_PluginInfo.NumOutputs = 1;
m_PluginInfo.PortTips.push_back ("Input");
m_PluginInfo.PortTips.push_back ("Out");
m_wt = new float[512];
for (i=0; i<512; i++) m_wt[i] = (i / 256.0 - 1.0);
m_GUIArgs.FuncPlot = new float[256];
for (i=0; i<256; i++) m_GUIArgs.FuncPlot[i] = m_wt[i*2];
m_Wave = 1;
for (i=0; i<6; i++) m_Coefs[i] = 0.0;
m_Coefs[0] = 1.0;
m_AudioCH->Register ("WaveType", &m_GUIArgs.WaveType);
m_AudioCH->Register ("CoefNum", &m_GUIArgs.CoefNum);
m_AudioCH->Register ("CoefVal", &m_GUIArgs.CoefVal);
m_AudioCH->RegisterData ("WT", ChannelHandler::OUTPUT, m_GUIArgs.FuncPlot, 256 * sizeof (float));
}

WaveShaperPlugin::~WaveShaperPlugin() {
delete [] m_GUIArgs.FuncPlot;
delete [] m_wt;
}

PluginInfo &WaveShaperPlugin::Initialise (const HostInfo *Host) {
PluginInfo& Info = SpiralPlugin::Initialise (Host);
calc();
return Info;
}

SpiralGUIType *WaveShaperPlugin::CreateGUI () {
return new WaveShaperPluginGUI (m_PluginInfo.Width, m_PluginInfo.Height, this, m_AudioCH, m_HostInfo);
}

void WaveShaperPlugin::ExecuteCommands () {
if (m_AudioCH->IsCommandWaiting ()) {
switch (m_AudioCH->GetCommand ()) {
case (SETWAVETYPE) :
m_Wave = m_GUIArgs.WaveType;
calc ();
break;
case (SETCOEF) :
if ((m_GUIArgs.CoefNum < 0) || (m_GUIArgs.CoefNum > 5)) break;
m_Coefs[m_GUIArgs.CoefNum] = m_GUIArgs.CoefVal;
calc ();
break;
}
}
}

void WaveShaperPlugin::Execute () {
float k1, k2;
if (!InputExists (0)) return;
for (int i=0; i<m_HostInfo->BUFSIZE; i++) {
float v = GetInput (0, i);
int index = (short)(256.0*v) + 256;
// short rm = v - ((index-256)*(long)SpiralInfo::MAXSAMPLE)/256;
if (index < 0) index = 0;
if (index > 511) index = 511;
// k1 = rm / (SpiralInfo::MAXSAMPLE/256.0);
// v = (short)(k1*(wt[index]-wt[index+1])+wt[index+1]);
SetOutput (0, i, m_wt[index]);
}
}

// Functions used by GUI.UpdateValues

float WaveShaperPlugin::GetCoef (int index) {
if ((index < 0) || (index > 5)) return 0;
return m_Coefs[index];
return m_Coefs[index];
}

int WaveShaperPlugin::GetWaveType(){
return m_Wave;
}

void WaveShaperPlugin::StreamOut(ostream &s)
{
s<<m_Version<<" "<<m_Wave;
for (int i=0;i<6;i++) s<<" "<<m_Coefs[i];
}
// Internal private functions

void WaveShaperPlugin::StreamIn(istream &s)
{
int version;
s>>version>>m_Wave;
for (int i=0;i<6;i++) s>>m_Coefs[i];
Calc();
void WaveShaperPlugin::set (int index, float v) {
if ((index < 0) || (index > 511)) return;
if (v > 1.0f) v = 1.0f;
if (v < -1.0f) v = -1.0f;
m_wt[index] = v;
}

void WaveShaperPlugin::calc (void) {
int i;
float xx,x,y,max;
if (m_Wave) {
max = 1.0;
for (i=0; i<512; i++) {
x = i / 256.0 - 1.0;
y = 0;
xx = x;
for (int j=1; j<7; j++) {
y += m_Coefs[j-1] * xx;
xx *= x;
}
y = fabs(y);
max = max > y? max:y;
}
for (i=0; i<512; i++) {
x = i / 256.0 - 1.0;
y = 0;
xx = x;
for (int j=1; j<7; j++) {
y += m_Coefs[j-1] * xx;
xx *= x;
}
y /= max;
set (i, y);
}
}
else {
max = 1.0;
for (i=0; i<512; i++) {
x = (i / 256.0 - 1.0)*M_PI;
y = 0;
for (int j=1; j<7; j++) y += m_Coefs[j-1] * sin(x*(1+(j-1)*3));
y = fabs(y);
max = max > y? max:y;
}
for (i=0; i<512; i++) {
x = (i / 256.0 - 1.0)*M_PI;
y = 0;
for (int j=1; j<7; j++) y += m_Coefs[j-1] * sin(x*(1+(j-1)*3));
y /= max;
set(i, y);
}
}
for (i=0; i<256; i++) m_GUIArgs.FuncPlot[i] = m_wt[i*2];
}

// Streaming

void WaveShaperPlugin::StreamOut (ostream &s) {
s << m_Version << " " << m_Wave;
for (int i=0; i<6; i++) s << " " << m_Coefs[i];
}

void WaveShaperPlugin::StreamIn (istream &s) {
int version;
s >> version >> m_Wave;
for (int i=0; i<6; i++) s >> m_Coefs[i];
calc ();
}


+ 29
- 32
SpiralSound/Plugins/WaveShaperPlugin/WaveShaperPlugin.h View File

@@ -1,4 +1,4 @@
/* WaveShaper Plugin Copyleft (C) 2001 Yves Usson
/* WaveShaper Plugin Copyleft (C) 2001 Yves Usson
* for SpiralSynthModular
* Copyleft (C) 2001 David Griffiths <dave@pawfal.org>
*
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
*/

#include "../SpiralPlugin.h"
#include <FL/Fl_Pixmap.H>
@@ -23,37 +23,34 @@
#ifndef WaveShaperPLUGIN
#define WaveShaperPLUGIN

class WaveShaperPlugin : public SpiralPlugin
{
public:
WaveShaperPlugin();
virtual ~WaveShaperPlugin();
virtual PluginInfo& Initialise(const HostInfo *Host);
virtual SpiralGUIType* CreateGUI();
virtual void Execute();
virtual void StreamOut(ostream &s);
virtual void StreamIn(istream &s);
// has to be defined in the plugin
virtual void UpdateGUI() { Fl::check(); }

void Calc(void);
float Get(int);
void SetCoef(int,float);
void SetWaveType(int);
float GetCoef(int);
int GetWaveType(void);
private:
float *wt;
float m_Coefs[6];
int m_Wave;
void set(int,float);
friend istream &operator>>(istream &s, WaveShaperPlugin &o);
friend ostream &operator<<(ostream &s, WaveShaperPlugin &o);
class WaveShaperPlugin : public SpiralPlugin {
public:
WaveShaperPlugin();
virtual ~WaveShaperPlugin ();
virtual PluginInfo& Initialise (const HostInfo *Host);
virtual SpiralGUIType* CreateGUI();
virtual void Execute();
virtual void ExecuteCommands();
virtual void StreamOut(ostream &s);
virtual void StreamIn(istream &s);
float GetCoef(int);
int GetWaveType(void);
enum GUICommands { NONE, SETWAVETYPE, SETCOEF };
struct GUIArgs {
int WaveType, CoefNum;
float CoefVal, *FuncPlot;
};
private:
GUIArgs m_GUIArgs;
float *m_wt, m_Coefs[6];
int m_Wave;
void calc (void);
void set (int index, float v);
friend istream &operator>> (istream &s, WaveShaperPlugin &o);
friend ostream &operator<< (ostream &s, WaveShaperPlugin &o);
};

istream &operator>>(istream &s, WaveShaperPlugin &o);
ostream &operator<<(ostream &s, WaveShaperPlugin &o);
istream &operator>> (istream &s, WaveShaperPlugin &o);
ostream &operator<< (ostream &s, WaveShaperPlugin &o);

#endif

+ 0
- 17
SpiralSound/Plugins/WaveShaperPlugin/WaveShaperPlugin.pro View File

@@ -1,17 +0,0 @@
HEADERS = ../SpiralPlugin.h \
../SpiralPluginGUI.h \
../Widgets/Fl_Knob.H \
../Widgets/Fl_DragBar.H \
../../Sample.h \
WaveShaperPlugin.h \
WaveShaperPluginGUI.h
SOURCES = ../SpiralPlugin.C \
../SpiralPluginGUI.C \
../Widgets/Fl_Knob.cxx \
../Widgets/Fl_DragBar.cxx \
../../Sample.C \
WaveShaperPlugin.C \
WaveShaperPluginGUI.C

TARGET = WaveShaperPlugin.so

+ 106
- 98
SpiralSound/Plugins/WaveShaperPlugin/WaveShaperPluginGUI.C View File

@@ -1,4 +1,4 @@
/* WaveShaper Plugin Copyleft (C) 2001 Yves Usson
/* WaveShaper Plugin Copyleft (C) 2001 Yves Usson
* for SpiralSynthModular
/ * Copyleft (C) 2000 David Griffiths <dave@pawfal.org>
*
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
*/

#include "WaveShaperPluginGUI.h"
#include <FL/fl_draw.h>
@@ -24,7 +24,8 @@
static const int GUI_COLOUR = 179;
static const int GUIBG_COLOUR = 144;
static const int GUIBG2_COLOUR = 145;
FunctionPlot::FunctionPlot(int ox,int oy,int ww,int hh): Fl_Widget(ox,oy,ww,hh) {

FunctionPlot::FunctionPlot(int ox, int oy, int ww, int hh) : Fl_Widget (ox, oy, ww, hh) {
fval = new float[256];
for (int i=0;i<256;i++) fval[i] = i / 128.0 - 1.0;
}
@@ -34,14 +35,14 @@ FunctionPlot::~FunctionPlot() {
}

void FunctionPlot::draw() {
int ox = x() + 3;
int oy = y() +3;
int ww = w() - 6;
int hh = h() - 6;
float coefx,coefy;
draw_box();
fl_clip(ox,oy,ww,hh);
int ox = x() + 3;
int oy = y() +3;
int ww = w() - 6;
int hh = h() - 6;
float coefx,coefy;
draw_box();
fl_clip(ox,oy,ww,hh);
coefx = ww / 256.0;
coefy = hh / 2.0;
for (int i = -5; i < 5; i++)
@@ -70,13 +71,13 @@ int FunctionPlot::handle(int event) {
return 0;
}

void FunctionPlot::set(const int index,const float v) {
void FunctionPlot::set(const int index, const float v) {
if ((index < 0) || (index > 255)) return;
fval[index] = v;
if (fval[index] > 1.0f) fval[index] = 1.0f;
if (fval[index] < -1.0f) fval[index] = -1.0f;
}
float FunctionPlot::get(const int index) const {
if ((index < 0) || (index > 255)) return (-10.0f);
return fval[index];
@@ -85,100 +86,107 @@ float FunctionPlot::get(const int index) const {

////////////////////////////////////////////

WaveShaperPluginGUI::WaveShaperPluginGUI(int w, int h,WaveShaperPlugin *o,const HostInfo *Info) :
SpiralPluginGUI(w,h,o)
{
m_Plugin=o;
fplot = new FunctionPlot(3, 20, 268, 195);
fplot->box(FL_ENGRAVED_BOX);
fplot->color(7);
radio_polynomial = new Fl_Round_Button(3, 218, 30, 20, "S");
radio_polynomial->down_box(FL_ROUND_DOWN_BOX);
radio_polynomial->value(1);
radio_polynomial->type(102);
radio_polynomial->labelfont(12);
radio_polynomial->labelsize(12);
radio_polynomial->callback((Fl_Callback*)cb_radio);
radio_sines = new Fl_Round_Button(3, 238, 30, 20, "S");
radio_sines->down_box(FL_ROUND_DOWN_BOX);
radio_sines->value(0);
radio_sines->type(102);
radio_sines->labelfont(12);
radio_sines->labelsize(12);
radio_sines->callback((Fl_Callback*)cb_radio);
{ Fl_Box* o = new Fl_Box(26, 218, 25, 20, "a .x");
o->labelfont(2);
o->labelsize(10);
}
{ Fl_Box* o = new Fl_Box(33, 227, 10, 15, "i");
o->labelfont(2);
o->labelsize(10);
}
{ Fl_Box* o = new Fl_Box(47, 217, 10, 15, "i");
o->labelfont(2);
o->labelsize(10);
}
{ Fl_Box* o = new Fl_Box(31, 246, 10, 15, "i");
o->labelfont(2);
o->labelsize(10);
}
{ Fl_Box* o = new Fl_Box(36, 237, 25, 20, "a .sin i x");
o->labelfont(2);
o->labelsize(10);
}
for (int i=0;i<6;i++)
{
knob[i] = new Fl_Knob(70+i*35, 220, 30, 30);
knob[i]->labelsize(10);
knob[i]->minimum(-1);
knob[i]->step(0.01);
knob[i]->value(0);
knob[i]->color(GUI_COLOUR);
knob[i]->callback((Fl_Callback*)cb_knob);
knob[i]->type(Fl_Knob::DOTLIN);
}
knob[0]->value(1.0);
end();
WaveShaperPluginGUI::WaveShaperPluginGUI (int w, int h, WaveShaperPlugin *o, ChannelHandler *ch, const HostInfo *Info) :
SpiralPluginGUI(w, h, o, ch)
{
fplot = new FunctionPlot(3, 20, 268, 195);
fplot->box(FL_ENGRAVED_BOX);
fplot->color(7);

radio_polynomial = new Fl_Round_Button(3, 218, 30, 20, "S");
radio_polynomial->down_box(FL_ROUND_DOWN_BOX);
radio_polynomial->value(1);
radio_polynomial->type(102);
radio_polynomial->labelfont(12);
radio_polynomial->labelsize(12);
radio_polynomial->callback((Fl_Callback*)cb_radio);

radio_sines = new Fl_Round_Button(3, 238, 30, 20, "S");
radio_sines->down_box(FL_ROUND_DOWN_BOX);
radio_sines->value(0);
radio_sines->type(102);
radio_sines->labelfont(12);
radio_sines->labelsize(12);
radio_sines->callback((Fl_Callback*)cb_radio);

{ Fl_Box* o = new Fl_Box(26, 218, 25, 20, "a .x");
o->labelfont(2);
o->labelsize(10);
}
{ Fl_Box* o = new Fl_Box(33, 227, 10, 15, "i");
o->labelfont(2);
o->labelsize(10);
}
{ Fl_Box* o = new Fl_Box(47, 217, 10, 15, "i");
o->labelfont(2);
o->labelsize(10);
}
{ Fl_Box* o = new Fl_Box(31, 246, 10, 15, "i");
o->labelfont(2);
o->labelsize(10);
}
{ Fl_Box* o = new Fl_Box(36, 237, 25, 20, "a .sin i x");
o->labelfont(2);
o->labelsize(10);
}

for (int i=0; i<6; i++) {
knob[i] = new Fl_Knob (70+i*35, 220, 30, 30, "");
knob[i]->color (GUI_COLOUR);
knob[i]->type (Fl_Knob::DOTLIN);
knob[i]->labelsize (10);
knob[i]->maximum (1);
knob[i]->minimum (-1);
knob[i]->step (0.01);
knob[i]->value (0);
knob[i]->callback ((Fl_Callback*)cb_knob);
}
knob[0]->value(1.0);
end();
}

void WaveShaperPluginGUI::UpdateValues (SpiralPlugin *o) {
WaveShaperPlugin* Plugin = (WaveShaperPlugin*) o;
int wt = Plugin->GetWaveType ();
radio_polynomial->value (wt);
radio_sines->value (!wt);
for (int j=0; j<6; j++) knob[j]->value (Plugin->GetCoef (j));
Update ();
}


void WaveShaperPluginGUI::UpdateValues()
{
int wt = m_Plugin->GetWaveType();
radio_polynomial->value(wt);
radio_sines->value(!wt);
for (int j=0; j<6; j++) knob[j]->value(m_Plugin->GetCoef(j));
knobCB();
void WaveShaperPluginGUI::Update () {
// Formerly KnobCB
float WTData[256];
m_GUICH->GetData ("WT", (void*)WTData);
for (int i=0; i<256; i++) fplot->set (i, WTData[i]);
fplot->redraw ();
}

inline void WaveShaperPluginGUI::cb_radio_i(Fl_Round_Button*, void*) {
m_Plugin->SetWaveType(radio_polynomial->value());
knobCB();
inline void WaveShaperPluginGUI::cb_radio_i (Fl_Round_Button*, void*) {
m_GUICH->Set ("WaveType", (int)radio_polynomial->value ());
m_GUICH->SetCommand (WaveShaperPlugin::SETWAVETYPE);
}
void WaveShaperPluginGUI::cb_radio(Fl_Round_Button* o, void* v) {
((WaveShaperPluginGUI*)(o->parent()))->cb_radio_i(o,v);

void WaveShaperPluginGUI::cb_radio (Fl_Round_Button* o, void* v) {
((WaveShaperPluginGUI*)(o->parent()))->cb_radio_i (o, v);
}

inline void WaveShaperPluginGUI::cb_knob_i(Fl_Knob*, void*) {
for (int j=0; j<6; j++) m_Plugin->SetCoef(j,knob[j]->value());
knobCB();
inline void WaveShaperPluginGUI::cb_knob_i (Fl_Knob* o, void* v) {
for (int j=0; j<6; j++) {
if (o==knob[j]) {
m_GUICH->Set ("CoefNum", j);
m_GUICH->Set ("CoefVal", (float)knob[j]->value ());
m_GUICH->SetCommand (WaveShaperPlugin::SETCOEF);
break;
}
}
}
void WaveShaperPluginGUI::cb_knob(Fl_Knob* o, void* v) {
((WaveShaperPluginGUI*)(o->parent()))->cb_knob_i(o,v);
void WaveShaperPluginGUI::cb_knob (Fl_Knob* o, void* v) {
((WaveShaperPluginGUI*)(o->parent()))->cb_knob_i (o, v);
}

void WaveShaperPluginGUI::knobCB() {
int i;

m_Plugin->Calc();
for (i=0;i<256;i++)
{
fplot->set(i,m_Plugin->Get(i*2));
}
fplot->redraw();
const string WaveShaperPluginGUI::GetHelpText(const string &loc){
return string("")
+ "This plugin simulates wave shaping as found on analogue\n"
+ "synths, usable in two modes, linear or sine based.\n";
}

+ 29
- 33
SpiralSound/Plugins/WaveShaperPlugin/WaveShaperPluginGUI.h View File

@@ -1,4 +1,4 @@
/* WaveShaper Plugin Copyleft (C) 2001 Yves Usson
/* WaveShaper Plugin Copyleft (C) 2001 Yves Usson
* for SpiralSynthModular
* Copyleft (C) 2000 David Griffiths <dave@pawfal.org>
*
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
*/

#include <FL/Fl.H>
#include <FL/Fl_Window.H>
@@ -33,39 +33,35 @@
#define WaveShaperGUI

class FunctionPlot : public Fl_Widget {
public:
FunctionPlot(int ox,int oy,int ww,int hh);
~FunctionPlot();
private:
float *fval;
void draw();
int handle(int event);
public:
void set(const int index,const float v);
float get(const int index) const;
public:
FunctionPlot (int ox, int oy, int ww, int hh);
~FunctionPlot ();
private:
float *fval;
void draw ();
int handle (int event);
public:
void set (const int index, const float v);
float get (const int index) const;
};

class WaveShaperPluginGUI : public SpiralPluginGUI
{
public:
WaveShaperPluginGUI(int w, int h, WaveShaperPlugin *o,const HostInfo *Info);
virtual void UpdateValues();
virtual SpiralPlugin* GetPlugin() { return m_Plugin; }
WaveShaperPlugin *m_Plugin;
private:
FunctionPlot *fplot;
Fl_Round_Button *radio_polynomial;
Fl_Round_Button *radio_sines;
Fl_Knob *knob[6];
//// Callbacks ////
inline void cb_radio_i(Fl_Round_Button*, void*);
static void cb_radio(Fl_Round_Button* o, void* v);
inline void cb_knob_i(Fl_Knob*, void*);
static void cb_knob(Fl_Knob* o, void* v);
void knobCB();
class WaveShaperPluginGUI : public SpiralPluginGUI {
public:
WaveShaperPluginGUI (int w, int h, WaveShaperPlugin *o, ChannelHandler *ch, const HostInfo *Info);
virtual void UpdateValues (SpiralPlugin *o);
virtual void Update ();
protected:
const string GetHelpText (const string &loc);
private:
FunctionPlot *fplot;
Fl_Round_Button *radio_polynomial;
Fl_Round_Button *radio_sines;
Fl_Knob *knob[6];
//// Callbacks ////
inline void cb_radio_i (Fl_Round_Button*, void*);
static void cb_radio (Fl_Round_Button* o, void* v);
inline void cb_knob_i (Fl_Knob*, void*);
static void cb_knob (Fl_Knob* o, void* v);
};

#endif

Loading…
Cancel
Save