Browse Source

added

master
nebogeo 23 years ago
parent
commit
f9a681c14f
12 changed files with 1652 additions and 0 deletions
  1. +130
    -0
      SpiralSound/Plugins/AnotherFilterPlugin/AnotherFilterPlugin.C
  2. +58
    -0
      SpiralSound/Plugins/AnotherFilterPlugin/AnotherFilterPlugin.h
  3. +77
    -0
      SpiralSound/Plugins/AnotherFilterPlugin/AnotherFilterPluginGUI.C
  4. +56
    -0
      SpiralSound/Plugins/AnotherFilterPlugin/AnotherFilterPluginGUI.h
  5. +171
    -0
      SpiralSound/Plugins/AnotherFilterPlugin/Makefile.in
  6. +314
    -0
      SpiralSound/Plugins/AnotherFilterPlugin/SpiralIcon.xpm
  7. +174
    -0
      SpiralSound/Plugins/FormantFilterPlugin/FormantFilterPlugin.C
  8. +50
    -0
      SpiralSound/Plugins/FormantFilterPlugin/FormantFilterPlugin.h
  9. +85
    -0
      SpiralSound/Plugins/FormantFilterPlugin/FormantFilterPluginGUI.C
  10. +52
    -0
      SpiralSound/Plugins/FormantFilterPlugin/FormantFilterPluginGUI.h
  11. +171
    -0
      SpiralSound/Plugins/FormantFilterPlugin/Makefile.in
  12. +314
    -0
      SpiralSound/Plugins/FormantFilterPlugin/SpiralIcon.xpm

+ 130
- 0
SpiralSound/Plugins/AnotherFilterPlugin/AnotherFilterPlugin.C View File

@@ -0,0 +1,130 @@
/* SpiralSound
* Copyleft (C) 2001 David Griffiths <dave@pawfal.org>
*
* 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; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <math.h>
#include "AnotherFilterPlugin.h"
#include "AnotherFilterPluginGUI.h"
#include <FL/Fl_Button.h>
#include "SpiralIcon.xpm"

#define PI 3.141592654

static const int GRANULARITY = 10;

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

char** GetIcon()
{
return SpiralIcon_xpm;
}

int GetID()
{
return 43;
}
}

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

AnotherFilterPlugin::AnotherFilterPlugin() :
Cutoff(0.0f),
Resonance(0.0f),
vibrapos(0.0f),
vibraspeed(0.0f)
{
m_PluginInfo.Name="AnotherLPF";
m_PluginInfo.Width=120;
m_PluginInfo.Height=110;
m_PluginInfo.NumInputs=3;
m_PluginInfo.NumOutputs=1;
m_PluginInfo.PortTips.push_back("Input");
m_PluginInfo.PortTips.push_back("Cutoff CV");
m_PluginInfo.PortTips.push_back("Emphasis CV");
m_PluginInfo.PortTips.push_back("LowPass output");
m_AudioCH->Register("Cutoff",&Cutoff);
m_AudioCH->Register("Resonance",&Resonance);
}

AnotherFilterPlugin::~AnotherFilterPlugin()
{
}

PluginInfo &AnotherFilterPlugin::Initialise(const HostInfo *Host)
{
return SpiralPlugin::Initialise(Host);
}

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

void AnotherFilterPlugin::Execute()
{
float in;
for (int n=0; n<m_HostInfo->BUFSIZE; n++)
{
if (n%GRANULARITY==0)
{
w = 2.0*PI*((Cutoff+GetInput(1,n))*10000+1)/m_HostInfo->SAMPLERATE; // Pole angle
q = 1.0-w/(2.0*(((Resonance+GetInput(2,n))*10+1)+0.5/(1.0+w))+w-2.0); // Pole magnitude
r = q*q;
c = r+1.0-2.0*cos(w)*q;
}

/* Accelerate vibra by signal-vibra, multiplied by lowpasscutoff */
vibraspeed += (GetInput(0,n)*0.3f - vibrapos) * c;

/* Add velocity to vibra's position */
vibrapos += vibraspeed;

/* Attenuate/amplify vibra's velocity by resonance */
vibraspeed *= r;

// needs clipping :(
if (vibrapos>1.0f) vibrapos=1.0f;
if (vibrapos<-1.0f) vibrapos=-1.0f;

/* Store new value */
SetOutput(0,n,vibrapos);
}
}
void AnotherFilterPlugin::Randomise()
{
}
void AnotherFilterPlugin::StreamOut(ostream &s)
{
s<<m_Version<<" "<<Cutoff<<" "<<Resonance<<" ";
}

void AnotherFilterPlugin::StreamIn(istream &s)
{
int version;
s>>version;
s>>Cutoff>>Resonance;
}


+ 58
- 0
SpiralSound/Plugins/AnotherFilterPlugin/AnotherFilterPlugin.h View File

@@ -0,0 +1,58 @@
/* SpiralSound
* Copyleft (C) 2001 David Griffiths <dave@pawfal.org>
*
* 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; 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>

#ifndef AnotherFilterPLUGIN
#define AnotherFilterPLUGIN

static const int NUM_CHANNELS = 4;

// A State Variable Filter
class AnotherFilterPlugin : public SpiralPlugin
{
public:
AnotherFilterPlugin();
virtual ~AnotherFilterPlugin();
virtual PluginInfo &Initialise(const HostInfo *Host);
virtual SpiralGUIType *CreateGUI();
virtual void Execute();
virtual void StreamOut(ostream &s);
virtual void StreamIn(istream &s);
float GetCutoff() { return Cutoff; }
float GetResonance() { return Resonance; }
void Randomise();
void Clear();

private:
float Cutoff, Resonance;
// Calculation
double w,q,r,c,vibrapos,vibraspeed;
friend istream &operator>>(istream &s, AnotherFilterPlugin &o);
friend ostream &operator<<(ostream &s, AnotherFilterPlugin &o);
};
istream &operator>>(istream &s, AnotherFilterPlugin &o);
ostream &operator<<(ostream &s, AnotherFilterPlugin &o);

#endif

+ 77
- 0
SpiralSound/Plugins/AnotherFilterPlugin/AnotherFilterPluginGUI.C View File

@@ -0,0 +1,77 @@
/* SpiralPlugin
* Copyleft (C) 2000 David Griffiths <dave@pawfal.org>
*
* 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; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/

#include "AnotherFilterPluginGUI.h"
#include <FL/fl_draw.h>
#include <FL/fl_draw.H>

static const int GUI_COLOUR = 179;
static const int GUIBG_COLOUR = 144;
static const int GUIBG2_COLOUR = 145;

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

AnotherFilterPluginGUI::AnotherFilterPluginGUI(int w, int h,AnotherFilterPlugin *o,ChannelHandler *ch,const HostInfo *Info) :
SpiralPluginGUI(w,h,o,ch)
{
Cutoff = new Fl_Slider(15, 20, 20, 70, "Cutoff");
Cutoff->type(4);
Cutoff->selection_color(GUI_COLOUR);
Cutoff->labelsize(10);
Cutoff->maximum(1);
Cutoff->step(0.0001);
Cutoff->value(1);
Cutoff->callback((Fl_Callback*)cb_Cutoff);
Resonance = new Fl_Knob(58, 18, 45, 45, "Emphasis");
Resonance->color(GUI_COLOUR);
Resonance->type(Fl_Knob::DOTLIN);
Resonance->labelsize(10);
Resonance->maximum(1);
Resonance->step(0.00001);
Resonance->value(0);
Resonance->callback((Fl_Callback*)cb_Resonance);
end();
}

void AnotherFilterPluginGUI::UpdateValues(SpiralPlugin *o)
{
AnotherFilterPlugin *Plugin = (AnotherFilterPlugin*)o;
Cutoff->value(100.0f-sqrt(Plugin->GetCutoff()-10.0f));
Resonance->value(Plugin->GetResonance()-1.0f);
}

inline void AnotherFilterPluginGUI::cb_Cutoff_i(Fl_Slider* o, void* v)
{
float value=1.0f-o->value();
m_GUICH->Set("Cutoff",value);
}
void AnotherFilterPluginGUI::cb_Cutoff(Fl_Slider* o, void* v)
{ ((AnotherFilterPluginGUI*)(o->parent()))->cb_Cutoff_i(o,v); }

inline void AnotherFilterPluginGUI::cb_Resonance_i(Fl_Knob* o, void* v)
{ m_GUICH->Set("Resonance",(float)o->value()); }
void AnotherFilterPluginGUI::cb_Resonance(Fl_Knob* o, void* v)
{ ((AnotherFilterPluginGUI*)(o->parent()))->cb_Resonance_i(o,v); }

const string AnotherFilterPluginGUI::GetHelpText(const string &loc){
return string("")
+ "Resonant IIR lowpass (12dB/oct) filter\n";
}

+ 56
- 0
SpiralSound/Plugins/AnotherFilterPlugin/AnotherFilterPluginGUI.h View File

@@ -0,0 +1,56 @@
/* SpiralPlugin
* Copyleft (C) 2000 David Griffiths <dave@pawfal.org>
*
* 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; 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>
#include <FL/Fl_Group.H>
#include <FL/Fl_Slider.H>

#include "AnotherFilterPlugin.h"
#include "../SpiralPluginGUI.h"
#include "../Widgets/Fl_Knob.H"

#ifndef GUI
#define GUI


class AnotherFilterPluginGUI : public SpiralPluginGUI
{
public:
AnotherFilterPluginGUI(int w, int h, AnotherFilterPlugin *o,ChannelHandler *ch,const HostInfo *Info);
virtual void UpdateValues(SpiralPlugin *o);
protected:
const string GetHelpText(const string &loc);
private:
Fl_Group *GUIFilterGroup;
Fl_Slider *Cutoff;
Fl_Knob *Resonance;
//// Callbacks ////
inline void cb_Cutoff_i(Fl_Slider* o, void* v);
static void cb_Cutoff(Fl_Slider*, void*);
inline void cb_Resonance_i(Fl_Knob* o, void* v);
static void cb_Resonance(Fl_Knob* o, void* v);
};

#endif

+ 171
- 0
SpiralSound/Plugins/AnotherFilterPlugin/Makefile.in View File

@@ -0,0 +1,171 @@
#############################################################################
# Makefile for building AnotherFilterPlugin.so
# Generated by tmake at 22:13, 2001/09/17
# Project: AnotherFilterPlugin
# Template: app
#############################################################################

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

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

TAR = tar -cf
GZIP = gzip -9f

INSTALL = @INSTALL@

###### Autoconf variables

prefix = @prefix@
exec_prefix = @exec_prefix@

bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@

####### Files

HEADERS = ../SpiralPlugin.h \
../SpiralPluginGUI.h \
../../ChannelHandler.h \
../Widgets/Fl_Knob.H \
../Widgets/Fl_DragBar.H \
../../Sample.h \
AnotherFilterPlugin.h \
AnotherFilterPluginGUI.h
SOURCES = ../SpiralPlugin.C \
../SpiralPluginGUI.C \
../../ChannelHandler.C \
../Widgets/Fl_Knob.cxx \
../Widgets/Fl_DragBar.cxx \
../../Sample.C \
AnotherFilterPlugin.C \
AnotherFilterPluginGUI.C
OBJECTS = ../SpiralPlugin.o \
../SpiralPluginGUI.o \
../../ChannelHandler.o \
../Widgets/Fl_Knob.o \
../Widgets/Fl_DragBar.o \
../../Sample.o \
AnotherFilterPlugin.o \
AnotherFilterPluginGUI.o
INTERFACES =
UICDECLS =
UICIMPLS =
SRCMOC =
OBJMOC =
DIST =
TARGET = AnotherFilterPlugin.so

####### Implicit rules

.SUFFIXES: .cpp .cxx .cc .C .c

.cpp.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<

.cxx.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<

.cc.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<

.C.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<

.c.o:
$(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<

####### Build rules


all: $(TARGET)

$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC)
$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)

moc: $(SRCMOC)

tmake:
tmake AnotherFilterPlugin.pro

dist:
$(TAR) AnotherFilterPlugin.tar AnotherFilterPlugin.pro $(SOURCES) $(HEADERS) $(INTERFACES) $(DIST)
$(GZIP) AnotherFilterPlugin.tar

clean:
-rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS) $(TARGET)
-rm -f *~ core
install:
$(INSTALL) $(TARGET) $(libdir)/SpiralPlugins

####### Sub-libraries


###### Combined headers


####### Compile

../SpiralPlugin.o: ../SpiralPlugin.C \
../SpiralPlugin.h \
../../Sample.h

../SpiralPluginGUI.o: ../SpiralPluginGUI.C \
../SpiralPluginGUI.h \
../Widgets/Fl_DragBar.H \
../SpiralPlugin.h \
../../Sample.h

../Widgets/Fl_Knob.o: ../Widgets/Fl_Knob.cxx \
../Widgets/Fl_Knob.H

../Widgets/Fl_DragBar.o: ../Widgets/Fl_DragBar.cxx \
../Widgets/Fl_DragBar.H

../../Sample.o: ../../Sample.C \
../../Sample.h \
../../SpiralInfo.h

AnotherFilterPlugin.o: AnotherFilterPlugin.C \
AnotherFilterPlugin.h \
../SpiralPlugin.h \
../../Sample.h \
../../SpiralInfo.h \
../../Sample.h \
AnotherFilterPluginGUI.h \
../SpiralPluginGUI.h \
../Widgets/Fl_DragBar.H \
../Widgets/Fl_Knob.H \
SpiralIcon.xpm

AnotherFilterPluginGUI.o: AnotherFilterPluginGUI.C \
AnotherFilterPluginGUI.h \
AnotherFilterPlugin.h \
../SpiralPlugin.h \
../../Sample.h \
../../SpiralInfo.h \
../../Sample.h \
../SpiralPluginGUI.h \
../Widgets/Fl_DragBar.H \
../Widgets/Fl_Knob.H

../../ChannelHandler.o: ../../ChannelHandler.C \
../../ChannelHandler.h

+ 314
- 0
SpiralSound/Plugins/AnotherFilterPlugin/SpiralIcon.xpm View File

@@ -0,0 +1,314 @@
/* XPM */
static char * SpiralIcon_xpm[] = {
"36 36 275 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 #000000",
"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 #0E0E0E",
"n c #BFBFBF",
"o c #111111",
"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 #0F0F0F",
"N c #B8B8B8",
"O c #48445C",
"P c #2B2B2C",
"Q c #181900",
"R c #D3D3D3",
"S c #C1BEC9",
"T c #474060",
"U c #31294D",
"V c #716C85",
"W c #65607A",
"X c #625D78",
"Y c #D5D4DB",
"Z c #F7F7F7",
"` c #8B8B8B",
" . c #161616",
".. c #0C0C0C",
"+. c #161800",
"@. c #1A1B00",
"#. c #060600",
"$. c #191A00",
"%. c #393643",
"&. c #47415F",
"*. c #9692A4",
"=. c #D9D8DE",
"-. c #F7F7F8",
";. c #918DA0",
">. c #B8B5C1",
",. c #D1D1D1",
"'. c #212121",
"). c #2D2F00",
"!. c #111200",
"~. c #0B0C00",
"{. c #FFF200",
"]. c #727175",
"^. c #FEFEFF",
"/. c #9D99AA",
"(. c #DBD9E0",
"_. c #E9E9E9",
":. c #CBCBCB",
"<. c #E0E0E0",
"[. c #6C6C6C",
"}. c #050500",
"|. c #515151",
"1. c #A6A6A7",
"2. c #827E93",
"3. c #615C77",
"4. c #EAEAED",
"5. c #DFDFE1",
"6. c #1E1D24",
"7. c #9894A7",
"8. c #B1AEBB",
"9. c #69686F",
"0. c #000001",
"a. c #615C76",
"b. c #5F5A75",
"c. c #413E4D",
"d. c #020203",
"e. c #1A1A1C",
"f. c #C3C1CB",
"g. c #9D9D9D",
"h. c #202020",
"i. c #383838",
"j. c #4C4C4C",
"k. c #C9C7D0",
"l. c #F1F1F1",
"m. c #F8F8F8",
"n. c #232323",
"o. c #AEACB9",
"p. c #FEFEFE",
"q. c #1D1D1D",
"r. c #B7B5C1",
"s. c #9390A2",
"t. c #BBBBBB",
"u. c #414141",
"v. c #030303",
"w. c #F4F4F6",
"x. c #605B76",
"y. c #736E86",
"z. c #D8D8D8",
"A. c #727272",
"B. c #101010",
"C. c #CCCBD3",
"D. c #747087",
"E. c #6D6881",
"F. c #1C1C1C",
"G. c #242424",
"H. c #656566",
"I. c #F6F6F6",
"J. c #E8E6EA",
"K. c #706B84",
"L. c #E3E1E6",
"M. c #474746",
"N. c #151515",
"O. c #C8C8C8",
"P. c #AEAEAE",
"Q. c #010100",
"R. c #373639",
"S. c #FDFCFE",
"T. c #ABA8B7",
"U. c #F1F0F3",
"V. c #6D6980",
"W. c #0A090E",
"X. c #95929E",
"Y. c #0A0810",
"Z. c #0D0D0D",
"`. c #050505",
" + c #5B5A5C",
".+ c #F7F6F7",
"++ c #F4F3F5",
"@+ c #908C9F",
"#+ c #C8C6D0",
"$+ c #837E96",
"%+ c #86868A",
"&+ c #070608",
"*+ c #ECEBEE",
"=+ c #5B5571",
"-+ c #646078",
";+ c #AFAFB0",
">+ c #454545",
",+ c #363636",
"'+ c #7A7A7A",
")+ c #C8C8C9",
"!+ c #212025",
"~+ c #060607",
"{+ c #969699",
"]+ c #FAFAFA",
"^+ c #F8F8F9",
"/+ c #A29EAF",
"(+ c #F7F6F8",
"_+ c #F0F0F1",
":+ c #B8B7B9",
"<+ c #E4E4E4",
"[+ c #FDFDFD",
"}+ c #A5A2B2",
"|+ c #3B3456",
"1+ c #A8A5B4",
"2+ c #525252",
"3+ c #848387",
"4+ c #CDCDCD",
"5+ c #8D899C",
"6+ c #494262",
"7+ c #68627C",
"8+ c #40395A",
"9+ c #ECECEC",
"0+ c #020202",
"a+ c #B4B5B5",
"b+ c #0B0B0B",
"c+ c #313232",
"d+ c #E3E3E3",
"e+ c #B1AEBC",
"f+ c #BDBBC6",
"g+ c #3C3556",
"h+ c #898599",
"i+ c #EDEDED",
"j+ c #39393A",
"k+ c #040404",
"l+ c #333333",
"m+ c #F5F5F5",
"n+ c #2B2B2B",
"o+ c #2D2A3D",
"p+ c #B6B4C1",
"q+ c #F5F5F6",
"r+ c #605A76",
"s+ c #DAD8DF",
"t+ c #F5F4F6",
"u+ c #615B76",
"v+ c #524D6A",
"w+ c #E4E3E8",
"x+ c #D5D5D5",
"y+ c #1B1B1B",
"z+ c #303030",
"A+ c #AAABAB",
"B+ c #585464",
"C+ c #B0AEBB",
"D+ c #A29FAF",
"E+ c #E9E8E9",
"F+ c #787779",
"G+ c #0F0E15",
"H+ c #2D2D2E",
"I+ c #595959",
"J+ c #FAFAFB",
"K+ c #807B92",
"L+ c #B0ADBB",
"M+ c #E8E7EB",
"N+ c #3A3258",
"O+ c #E6E5EA",
"P+ c #DFDEE3",
"Q+ c #443E5E",
"R+ c #BAB8C4",
"S+ c #C1BFCA",
"T+ c #E0E0E5",
"U+ c #D0CED6",
"V+ c #362F52",
"W+ c #CECCD5",
"X+ c #413A5B",
"Y+ c #6A657F",
"Z+ 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 m ; n o 6 p q r s ",
" t u ; v w 6 6 x y z A B 6 C ; D E 6 F G ; H ",
" I J ; ; K L 6 6 M N O P E 6 6 6 Q Q M R S T U V W ",
" X Y ; ; ; ; Z ` .6 ..6 6 6 6 6 +.@.#.$.%.&.*.=.-.;. ",
" >.; ; ; ; ; ; = ,.'.).!.~.6 {.{.6 6 6 6 E ].^.; ; /. ",
" (.; ; _.R h :.<.[.6 }.6 6 6 {.{.6 6 6 6 6 E |.1.4 2. ",
" 3.4.; 5...6 6 6 6 6 6 6 6 6 6 {.{.6 6 6 6 6 6 6 6.7. ",
" V @ 8.9.0.6 6 6 6 6 6 6 6 6 6 {.{.6 6 6 6 6 6 6 ",
" a.b.c.6 d.6 6 6 6 6 6 6 {.{.6 {.{.6 6 6 6 6 6 e. ",
" f.; ; g.h.h.i.j.h.6 6 6 6 {.6 6 6 {.{.6 6 6 6 6 6 ",
" k.; ; l.m.; ; ; n.6 {.{.{.6 6 6 6 6 {.{.{.{.{.6 6 ",
" o.; ; ; ; p.; ; q.6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 r., ",
" s.; ; p.; : t.u.v.6 6 6 {.6 {.6 {.6 {.{.{.6 6 6 6 p.w.x. ",
" y.; ; ; z.A.B.6 6 6 6 {.6 6 {.6 {.6 {.6 6 6 6 6 6 ; ; C.D. ",
" E.J ; : F.6 6 6 6 G...6 {.6 {.6 {.6 {.{.{.6 6 6 H.I.; ; J.K. ",
" L.; ; M.6 E 6 N.O.P.{.6 6 6 {.6 6 {.6 Q.6 6 6 6 R.S.; ; > K. ",
" T.; U.V.W.6 6 P.p.; X.Y.6 6 6 6 6 6 6 6 Z.`.6 6 6 +.+; ; ++@+ ",
" K.#+! $+%+&+x ; ; *+=+-+;+l >+6 6 6 ,+'+)+!+6 6 6 ~+{+]+; ; ^+@ ",
" /+(+_+:+<+[+; }+|+1+; I.>+6 6 E 2+; ; 3+6 6 E 6 o 4+; ; = 5+ ",
" 6+> ; ; ; ; ; ; 7+8+; ; 9+i.6 6 0+D ; ; a+b+6 6 6 c+d+; ; e+ ",
" > ; ; ; ; f+g+h+; ; i+j+6 6 k+l+; ; m+n+6 6 o+p+; q+3 ",
" r+s+= ; t+u+v+w+; ; x+y+6 6 0+z+; ; ; A+2+B+ ",
" C+4 D+ X ; ; ; E+F+z+G+H+I+; ; ; p.J+K+ ",
" L+; ; ; ; ; M+N+O+; ; ; ; = P+Q+ ",
" R+S+T+4 ; ; U+V+W+; ; ; s h+T ",
" X+ Y+Z+h+ ",
" ",
" ",
" "};

+ 174
- 0
SpiralSound/Plugins/FormantFilterPlugin/FormantFilterPlugin.C View File

@@ -0,0 +1,174 @@
/* SpiralSound
* Copyleft (C) 2001 David Griffiths <dave@pawfal.org>
*
* 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; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <math.h>
#include "FormantFilterPlugin.h"
#include "FormantFilterPluginGUI.h"
#include <FL/Fl_Button.h>
#include "SpiralIcon.xpm"

/*
Public source code by alex@smartelectronix.com
Simple example of implementation of formant filter
Vowelnum can be 0,1,2,3,4 <=> A,E,I,O,U
Good for spectral rich input like saw or square
*/

//-------------------------------------------------------------VOWEL COEFFICIENTS
const double coeff[5][11]= {
{ 8.11044e-06,
8.943665402, -36.83889529, 92.01697887, -154.337906, 181.6233289,
-151.8651235, 89.09614114, -35.10298511, 8.388101016, -0.923313471 ///A
},
{4.36215e-06,
8.90438318, -36.55179099, 91.05750846, -152.422234, 179.1170248, ///E
-149.6496211,87.78352223, -34.60687431, 8.282228154, -0.914150747
},
{ 3.33819e-06,
8.893102966, -36.49532826, 90.96543286, -152.4545478, 179.4835618,
-150.315433, 88.43409371, -34.98612086, 8.407803364, -0.932568035 ///I
},
{1.13572e-06,
8.994734087, -37.2084849, 93.22900521, -156.6929844, 184.596544, ///O
-154.3755513, 90.49663749, -35.58964535, 8.478996281, -0.929252233
},
{4.09431e-07,
8.997322763, -37.20218544, 93.11385476, -156.2530937, 183.7080141, ///U
-153.2631681, 89.59539726, -35.12454591, 8.338655623, -0.910251753
}
};
//---------------------------------------------------------------------------------
static double memory[5][10]={{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0}};
//---------------------------------------------------------------------------------

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

char** GetIcon()
{
return SpiralIcon_xpm;
}

int GetID()
{
return 42;
}
}

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

FormantFilterPlugin::FormantFilterPlugin() :
m_Vowel(0)
{
m_PluginInfo.Name="FormantFilter";
m_PluginInfo.Width=90;
m_PluginInfo.Height=110;
m_PluginInfo.NumInputs=2;
m_PluginInfo.NumOutputs=1;
m_PluginInfo.PortTips.push_back("Input");
m_PluginInfo.PortTips.push_back("Vowel CV");
m_PluginInfo.PortTips.push_back("Output");
m_AudioCH->Register("Vowel",&m_Vowel);
}

FormantFilterPlugin::~FormantFilterPlugin()
{
}

PluginInfo &FormantFilterPlugin::Initialise(const HostInfo *Host)
{
return SpiralPlugin::Initialise(Host);
}

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

void FormantFilterPlugin::Execute()
{
float res,o[5],out=0;
for (int n=0; n<m_HostInfo->BUFSIZE; n++)
{
for (int v=0; v<5; v++)
{
res= (float) (coeff[v][0]*(GetInput(0,n)*0.1f) +
coeff[v][1]*memory[v][0] +
coeff[v][2]*memory[v][1] +
coeff[v][3]*memory[v][2] +
coeff[v][4]*memory[v][3] +
coeff[v][5]*memory[v][4] +
coeff[v][6]*memory[v][5] +
coeff[v][7]*memory[v][6] +
coeff[v][8]*memory[v][7] +
coeff[v][9]*memory[v][8] +
coeff[v][10]*memory[v][9] );

memory[v][9]=memory[v][8];
memory[v][8]=memory[v][7];
memory[v][7]=memory[v][6];
memory[v][6]=memory[v][5];
memory[v][5]=memory[v][4];
memory[v][4]=memory[v][3];
memory[v][3]=memory[v][2];
memory[v][2]=memory[v][1];
memory[v][1]=memory[v][0];
memory[v][0]=(double) res;
o[v]=res;
}
if (InputExists(1)) m_Vowel=fabs(GetInput(1,n))*4.0f;
// mix between vowel sounds
if (m_Vowel<1) out=Linear(0,1,m_Vowel,o[1],o[0]);
else if (m_Vowel>1 && m_Vowel<2) out=Linear(0,1,m_Vowel-1.0f,o[2],o[1]);
else if (m_Vowel>2 && m_Vowel<3) out=Linear(0,1,m_Vowel-2.0f,o[3],o[2]);
else if (m_Vowel>3 && m_Vowel<4) out=Linear(0,1,m_Vowel-3.0f,o[4],o[3]);
else if (m_Vowel==4) out=o[4];
SetOutput(0,n,out);
}
}
void FormantFilterPlugin::Randomise()
{
}
void FormantFilterPlugin::StreamOut(ostream &s)
{
s<<m_Version<<" "<<m_Vowel<<" ";
}

void FormantFilterPlugin::StreamIn(istream &s)
{
int version;
s>>version;
s>>m_Vowel;
}

+ 50
- 0
SpiralSound/Plugins/FormantFilterPlugin/FormantFilterPlugin.h View File

@@ -0,0 +1,50 @@
/* SpiralSound
* Copyleft (C) 2001 David Griffiths <dave@pawfal.org>
*
* 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; 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>

#ifndef FormantFilterPLUGIN
#define FormantFilterPLUGIN

class FormantFilterPlugin : public SpiralPlugin
{
public:
FormantFilterPlugin();
virtual ~FormantFilterPlugin();
virtual PluginInfo &Initialise(const HostInfo *Host);
virtual SpiralGUIType *CreateGUI();
virtual void Execute();
virtual void StreamOut(ostream &s);
virtual void StreamIn(istream &s);
void Randomise();
void Clear();
float GetVowel() { return m_Vowel; }

private:
float m_Vowel;
friend istream &operator>>(istream &s, FormantFilterPlugin &o);
friend ostream &operator<<(ostream &s, FormantFilterPlugin &o);
};
istream &operator>>(istream &s, FormantFilterPlugin &o);
ostream &operator<<(ostream &s, FormantFilterPlugin &o);

#endif

+ 85
- 0
SpiralSound/Plugins/FormantFilterPlugin/FormantFilterPluginGUI.C View File

@@ -0,0 +1,85 @@
/* SpiralPlugin
* Copyleft (C) 2000 David Griffiths <dave@pawfal.org>
*
* 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; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/

#include "FormantFilterPluginGUI.h"
#include <FL/fl_draw.h>
#include <FL/fl_draw.H>

static const int GUI_COLOUR = 179;
static const int GUIBG_COLOUR = 144;
static const int GUIBG2_COLOUR = 145;

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

FormantFilterPluginGUI::FormantFilterPluginGUI(int w, int h,FormantFilterPlugin *o,ChannelHandler *ch,const HostInfo *Info) :
SpiralPluginGUI(w,h,o,ch)
{
Selection = new Fl_Knob(20, 18, 45, 45, "Vowel");
Selection->color(GUI_COLOUR);
Selection->type(Fl_Knob::DOTLIN);
Selection->labelsize(10);
Selection->maximum(4);
Selection->step(0.0001);
Selection->value(0);
Selection->callback((Fl_Callback*)cb_Selection);
Display = new Fl_Output(30,80,30,20,"");
Display->color(GUI_COLOUR);
Display->set_output();
end();
}

void FormantFilterPluginGUI::UpdateValues(SpiralPlugin *o)
{
FormantFilterPlugin *Plugin = (FormantFilterPlugin*)o;
Selection->value(Plugin->GetVowel());
float v=Plugin->GetVowel();
if (v<1) Display->value("A");
if (v>1 && v<2) Display->value("E");
if (v>2 && v<3) Display->value("I");
if (v>3 && v<4) Display->value("O");
if (v==4) Display->value("U");
}

inline void FormantFilterPluginGUI::cb_Selection_i(Fl_Knob* o, void* v)
{
m_GUICH->Set("Vowel",(float)o->value());

float vf=o->value();
if (vf<1) Display->value("A");
if (vf>1 && vf<2) Display->value("E");
if (vf>2 && vf<3) Display->value("I");
if (vf>3 && vf<4) Display->value("O");
if (vf==4) Display->value("U");
}
void FormantFilterPluginGUI::cb_Selection(Fl_Knob* o, void* v)
{ ((FormantFilterPluginGUI*)(o->parent()))->cb_Selection_i(o,v); }


const string FormantFilterPluginGUI::GetHelpText(const string &loc){
return string("")
+ "A formant filter for synthesising vowel sounds by filtering\n"
+ "high harmonic input waveforms.\n"
+ "From the great www.musicdsp.org site, I've added linear\n"
+ "interpolation between the filters so you can sweep them with\n"
+ "an external CV if desired";
}

+ 52
- 0
SpiralSound/Plugins/FormantFilterPlugin/FormantFilterPluginGUI.h View File

@@ -0,0 +1,52 @@
/* SpiralPlugin
* Copyleft (C) 2000 David Griffiths <dave@pawfal.org>
*
* 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; 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>
#include <FL/Fl_Group.H>
#include <FL/Fl_Output.H>

#include "FormantFilterPlugin.h"
#include "../SpiralPluginGUI.h"
#include "../Widgets/Fl_Knob.H"

#ifndef GUI
#define GUI


class FormantFilterPluginGUI : public SpiralPluginGUI
{
public:
FormantFilterPluginGUI(int w, int h, FormantFilterPlugin *o,ChannelHandler *ch,const HostInfo *Info);
virtual void UpdateValues(SpiralPlugin *o);
protected:
const string GetHelpText(const string &loc);
private:
Fl_Knob *Selection;
Fl_Output *Display;
//// Callbacks ////
inline void cb_Selection_i(Fl_Knob* o, void* v);
static void cb_Selection(Fl_Knob* o, void* v);
};

#endif

+ 171
- 0
SpiralSound/Plugins/FormantFilterPlugin/Makefile.in View File

@@ -0,0 +1,171 @@
#############################################################################
# Makefile for building FormantFilterPlugin.so
# Generated by tmake at 22:13, 2001/09/17
# Project: FormantFilterPlugin
# Template: app
#############################################################################

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

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

TAR = tar -cf
GZIP = gzip -9f

INSTALL = @INSTALL@

###### Autoconf variables

prefix = @prefix@
exec_prefix = @exec_prefix@

bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@

####### Files

HEADERS = ../SpiralPlugin.h \
../SpiralPluginGUI.h \
../../ChannelHandler.h \
../Widgets/Fl_Knob.H \
../Widgets/Fl_DragBar.H \
../../Sample.h \
FormantFilterPlugin.h \
FormantFilterPluginGUI.h
SOURCES = ../SpiralPlugin.C \
../SpiralPluginGUI.C \
../../ChannelHandler.C \
../Widgets/Fl_Knob.cxx \
../Widgets/Fl_DragBar.cxx \
../../Sample.C \
FormantFilterPlugin.C \
FormantFilterPluginGUI.C
OBJECTS = ../SpiralPlugin.o \
../SpiralPluginGUI.o \
../../ChannelHandler.o \
../Widgets/Fl_Knob.o \
../Widgets/Fl_DragBar.o \
../../Sample.o \
FormantFilterPlugin.o \
FormantFilterPluginGUI.o
INTERFACES =
UICDECLS =
UICIMPLS =
SRCMOC =
OBJMOC =
DIST =
TARGET = FormantFilterPlugin.so

####### Implicit rules

.SUFFIXES: .cpp .cxx .cc .C .c

.cpp.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<

.cxx.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<

.cc.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<

.C.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<

.c.o:
$(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<

####### Build rules


all: $(TARGET)

$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC)
$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)

moc: $(SRCMOC)

tmake:
tmake FormantFilterPlugin.pro

dist:
$(TAR) FormantFilterPlugin.tar FormantFilterPlugin.pro $(SOURCES) $(HEADERS) $(INTERFACES) $(DIST)
$(GZIP) FormantFilterPlugin.tar

clean:
-rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS) $(TARGET)
-rm -f *~ core
install:
$(INSTALL) $(TARGET) $(libdir)/SpiralPlugins

####### Sub-libraries


###### Combined headers


####### Compile

../SpiralPlugin.o: ../SpiralPlugin.C \
../SpiralPlugin.h \
../../Sample.h

../SpiralPluginGUI.o: ../SpiralPluginGUI.C \
../SpiralPluginGUI.h \
../Widgets/Fl_DragBar.H \
../SpiralPlugin.h \
../../Sample.h

../Widgets/Fl_Knob.o: ../Widgets/Fl_Knob.cxx \
../Widgets/Fl_Knob.H

../Widgets/Fl_DragBar.o: ../Widgets/Fl_DragBar.cxx \
../Widgets/Fl_DragBar.H

../../Sample.o: ../../Sample.C \
../../Sample.h \
../../SpiralInfo.h

FormantFilterPlugin.o: FormantFilterPlugin.C \
FormantFilterPlugin.h \
../SpiralPlugin.h \
../../Sample.h \
../../SpiralInfo.h \
../../Sample.h \
FormantFilterPluginGUI.h \
../SpiralPluginGUI.h \
../Widgets/Fl_DragBar.H \
../Widgets/Fl_Knob.H \
SpiralIcon.xpm

FormantFilterPluginGUI.o: FormantFilterPluginGUI.C \
FormantFilterPluginGUI.h \
FormantFilterPlugin.h \
../SpiralPlugin.h \
../../Sample.h \
../../SpiralInfo.h \
../../Sample.h \
../SpiralPluginGUI.h \
../Widgets/Fl_DragBar.H \
../Widgets/Fl_Knob.H

../../ChannelHandler.o: ../../ChannelHandler.C \
../../ChannelHandler.h

+ 314
- 0
SpiralSound/Plugins/FormantFilterPlugin/SpiralIcon.xpm View File

@@ -0,0 +1,314 @@
/* XPM */
static char * SpiralIcon_xpm[] = {
"36 36 275 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 #000000",
"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 #0E0E0E",
"n c #BFBFBF",
"o c #111111",
"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 #0F0F0F",
"N c #B8B8B8",
"O c #48445C",
"P c #2B2B2C",
"Q c #181900",
"R c #D3D3D3",
"S c #C1BEC9",
"T c #474060",
"U c #31294D",
"V c #716C85",
"W c #65607A",
"X c #625D78",
"Y c #D5D4DB",
"Z c #F7F7F7",
"` c #8B8B8B",
" . c #161616",
".. c #0C0C0C",
"+. c #161800",
"@. c #1A1B00",
"#. c #060600",
"$. c #191A00",
"%. c #393643",
"&. c #47415F",
"*. c #9692A4",
"=. c #D9D8DE",
"-. c #F7F7F8",
";. c #918DA0",
">. c #B8B5C1",
",. c #D1D1D1",
"'. c #212121",
"). c #2D2F00",
"!. c #111200",
"~. c #0B0C00",
"{. c #FFF200",
"]. c #727175",
"^. c #FEFEFF",
"/. c #9D99AA",
"(. c #DBD9E0",
"_. c #E9E9E9",
":. c #CBCBCB",
"<. c #E0E0E0",
"[. c #6C6C6C",
"}. c #050500",
"|. c #515151",
"1. c #A6A6A7",
"2. c #827E93",
"3. c #615C77",
"4. c #EAEAED",
"5. c #DFDFE1",
"6. c #1E1D24",
"7. c #9894A7",
"8. c #B1AEBB",
"9. c #69686F",
"0. c #000001",
"a. c #615C76",
"b. c #5F5A75",
"c. c #413E4D",
"d. c #020203",
"e. c #1A1A1C",
"f. c #C3C1CB",
"g. c #9D9D9D",
"h. c #202020",
"i. c #383838",
"j. c #4C4C4C",
"k. c #C9C7D0",
"l. c #F1F1F1",
"m. c #F8F8F8",
"n. c #232323",
"o. c #AEACB9",
"p. c #FEFEFE",
"q. c #1D1D1D",
"r. c #B7B5C1",
"s. c #9390A2",
"t. c #BBBBBB",
"u. c #414141",
"v. c #030303",
"w. c #F4F4F6",
"x. c #605B76",
"y. c #736E86",
"z. c #D8D8D8",
"A. c #727272",
"B. c #101010",
"C. c #CCCBD3",
"D. c #747087",
"E. c #6D6881",
"F. c #1C1C1C",
"G. c #242424",
"H. c #656566",
"I. c #F6F6F6",
"J. c #E8E6EA",
"K. c #706B84",
"L. c #E3E1E6",
"M. c #474746",
"N. c #151515",
"O. c #C8C8C8",
"P. c #AEAEAE",
"Q. c #010100",
"R. c #373639",
"S. c #FDFCFE",
"T. c #ABA8B7",
"U. c #F1F0F3",
"V. c #6D6980",
"W. c #0A090E",
"X. c #95929E",
"Y. c #0A0810",
"Z. c #0D0D0D",
"`. c #050505",
" + c #5B5A5C",
".+ c #F7F6F7",
"++ c #F4F3F5",
"@+ c #908C9F",
"#+ c #C8C6D0",
"$+ c #837E96",
"%+ c #86868A",
"&+ c #070608",
"*+ c #ECEBEE",
"=+ c #5B5571",
"-+ c #646078",
";+ c #AFAFB0",
">+ c #454545",
",+ c #363636",
"'+ c #7A7A7A",
")+ c #C8C8C9",
"!+ c #212025",
"~+ c #060607",
"{+ c #969699",
"]+ c #FAFAFA",
"^+ c #F8F8F9",
"/+ c #A29EAF",
"(+ c #F7F6F8",
"_+ c #F0F0F1",
":+ c #B8B7B9",
"<+ c #E4E4E4",
"[+ c #FDFDFD",
"}+ c #A5A2B2",
"|+ c #3B3456",
"1+ c #A8A5B4",
"2+ c #525252",
"3+ c #848387",
"4+ c #CDCDCD",
"5+ c #8D899C",
"6+ c #494262",
"7+ c #68627C",
"8+ c #40395A",
"9+ c #ECECEC",
"0+ c #020202",
"a+ c #B4B5B5",
"b+ c #0B0B0B",
"c+ c #313232",
"d+ c #E3E3E3",
"e+ c #B1AEBC",
"f+ c #BDBBC6",
"g+ c #3C3556",
"h+ c #898599",
"i+ c #EDEDED",
"j+ c #39393A",
"k+ c #040404",
"l+ c #333333",
"m+ c #F5F5F5",
"n+ c #2B2B2B",
"o+ c #2D2A3D",
"p+ c #B6B4C1",
"q+ c #F5F5F6",
"r+ c #605A76",
"s+ c #DAD8DF",
"t+ c #F5F4F6",
"u+ c #615B76",
"v+ c #524D6A",
"w+ c #E4E3E8",
"x+ c #D5D5D5",
"y+ c #1B1B1B",
"z+ c #303030",
"A+ c #AAABAB",
"B+ c #585464",
"C+ c #B0AEBB",
"D+ c #A29FAF",
"E+ c #E9E8E9",
"F+ c #787779",
"G+ c #0F0E15",
"H+ c #2D2D2E",
"I+ c #595959",
"J+ c #FAFAFB",
"K+ c #807B92",
"L+ c #B0ADBB",
"M+ c #E8E7EB",
"N+ c #3A3258",
"O+ c #E6E5EA",
"P+ c #DFDEE3",
"Q+ c #443E5E",
"R+ c #BAB8C4",
"S+ c #C1BFCA",
"T+ c #E0E0E5",
"U+ c #D0CED6",
"V+ c #362F52",
"W+ c #CECCD5",
"X+ c #413A5B",
"Y+ c #6A657F",
"Z+ 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 m ; n o 6 p q r s ",
" t u ; v w 6 6 x y z A B 6 C ; D E 6 F G ; H ",
" I J ; ; K L 6 6 M N O P E 6 6 6 Q Q M R S T U V W ",
" X Y ; ; ; ; Z ` .6 ..6 6 6 6 6 +.@.#.$.%.&.*.=.-.;. ",
" >.; ; ; ; ; ; = ,.'.).!.~.6 {.{.6 6 6 6 E ].^.; ; /. ",
" (.; ; _.R h :.<.[.6 }.6 6 6 {.{.6 6 6 6 6 E |.1.4 2. ",
" 3.4.; 5...6 6 6 6 6 6 6 6 6 6 {.{.6 6 6 6 6 6 6 6.7. ",
" V @ 8.9.0.6 6 6 6 6 6 6 6 6 6 {.{.6 6 6 6 6 6 6 ",
" a.b.c.6 d.6 6 6 6 6 6 6 {.{.6 {.{.6 6 6 6 6 6 e. ",
" f.; ; g.h.h.i.j.h.6 6 6 6 {.6 6 6 {.{.6 6 6 6 6 6 ",
" k.; ; l.m.; ; ; n.6 {.{.{.6 6 6 6 6 {.{.{.{.{.6 6 ",
" o.; ; ; ; p.; ; q.6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 r., ",
" s.; ; p.; : t.u.v.6 6 6 {.6 {.6 {.6 {.{.{.6 6 6 6 p.w.x. ",
" y.; ; ; z.A.B.6 6 6 6 {.6 6 {.6 {.6 {.6 6 6 6 6 6 ; ; C.D. ",
" E.J ; : F.6 6 6 6 G...6 {.6 {.6 {.6 {.{.{.6 6 6 H.I.; ; J.K. ",
" L.; ; M.6 E 6 N.O.P.{.6 6 6 {.6 6 {.6 Q.6 6 6 6 R.S.; ; > K. ",
" T.; U.V.W.6 6 P.p.; X.Y.6 6 6 6 6 6 6 6 Z.`.6 6 6 +.+; ; ++@+ ",
" K.#+! $+%+&+x ; ; *+=+-+;+l >+6 6 6 ,+'+)+!+6 6 6 ~+{+]+; ; ^+@ ",
" /+(+_+:+<+[+; }+|+1+; I.>+6 6 E 2+; ; 3+6 6 E 6 o 4+; ; = 5+ ",
" 6+> ; ; ; ; ; ; 7+8+; ; 9+i.6 6 0+D ; ; a+b+6 6 6 c+d+; ; e+ ",
" > ; ; ; ; f+g+h+; ; i+j+6 6 k+l+; ; m+n+6 6 o+p+; q+3 ",
" r+s+= ; t+u+v+w+; ; x+y+6 6 0+z+; ; ; A+2+B+ ",
" C+4 D+ X ; ; ; E+F+z+G+H+I+; ; ; p.J+K+ ",
" L+; ; ; ; ; M+N+O+; ; ; ; = P+Q+ ",
" R+S+T+4 ; ; U+V+W+; ; ; s h+T ",
" X+ Y+Z+h+ ",
" ",
" ",
" "};

Loading…
Cancel
Save