summaryrefslogtreecommitdiff
path: root/attic/muse_qt4_evolution/synti/s1/s1.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'attic/muse_qt4_evolution/synti/s1/s1.cpp')
-rw-r--r--attic/muse_qt4_evolution/synti/s1/s1.cpp156
1 files changed, 0 insertions, 156 deletions
diff --git a/attic/muse_qt4_evolution/synti/s1/s1.cpp b/attic/muse_qt4_evolution/synti/s1/s1.cpp
deleted file mode 100644
index 596a5797..00000000
--- a/attic/muse_qt4_evolution/synti/s1/s1.cpp
+++ /dev/null
@@ -1,156 +0,0 @@
-//=========================================================
-// MusE
-// Linux Music Editor
-// $Id: s1.cpp,v 1.10 2005/01/13 21:16:27 wschweer Exp $
-//
-// S1 - simple mono demo synthesizer
-// - plays only one note at a time
-// - has no gui nor any controller
-//
-// Version 0.2: stop note on wave zero crossing to avoid
-// clicks
-//
-// (C) Copyright 2001-2004 Werner Schweer (ws@seh.de)
-//=========================================================
-
-#include <cmath>
-#include <list>
-
-#include "synti/libsynti/mono.h"
-
-#define RESOLUTION 16384
-
-//---------------------------------------------------------
-// S1 - simple mono demo synthesizer
-//---------------------------------------------------------
-
-class S1 : public MessMono {
- static int useCount;
- static float *wave_table;
-
- int gate;
- float freq;
- unsigned accu;
- float sample;
-
- virtual void note(int channel, int pitch, int velo);
- virtual void process(float** buffer, int offset, int n);
-
- public:
- S1();
- ~S1();
- };
-
-float* S1::wave_table;
-int S1::useCount = 0;
-
-//---------------------------------------------------------
-// S1
-//---------------------------------------------------------
-
-S1::S1() : MessMono()
- {
- if (useCount++ == 0) {
- //
- // create sinus wave table
- //
- wave_table = new float[RESOLUTION];
- for (int i = 0; i < RESOLUTION; i++)
- wave_table[i] = sin ((i * 2.0 * M_PI) / RESOLUTION) / 6.0;
- }
- gate = 0;
- }
-
-//---------------------------------------------------------
-// ~S1
-//---------------------------------------------------------
-
-S1::~S1()
- {
- if (--useCount == 0)
- delete[] wave_table;
- }
-
-//---------------------------------------------------------
-// noteon
-// process note on
-//---------------------------------------------------------
-
-void S1::note(int /*channel*/, int pitch, int velo)
- {
- if (velo == 0) {
- //
- // note off
- //
- if (sample == 0.0)
- gate = 0;
- else if (sample > 0.0)
- gate = 2;
- else if (sample < 0.0)
- gate = 3;
- }
- else {
- //
- // note on
- //
- accu = 0;
- gate = 1;
- freq = 8.176 * exp(float(pitch)*log(2.0)/12.0);
- }
- }
-
-//---------------------------------------------------------
-// write
-// synthesize n samples into buffer+offset
-//---------------------------------------------------------
-
-void S1::process(float** buffer, int offset, int n)
- {
- if (gate == 0)
- return;
- float* p = buffer[0] + offset;
- unsigned freq_256 = (int) (freq * ((double) RESOLUTION) / sampleRate() * 256.0);
- for (int i = 0; i < n; i++) {
- accu += freq_256;
- while (accu >= RESOLUTION * 256)
- accu -= RESOLUTION * 256;
- sample = wave_table[accu >> 8];
- //
- // stop on zero crossing
- // if in decay state
- //
- if (gate == 2 && sample <= 0.0) {
- gate = 0;
- break;
- }
- else if (gate == 3 && sample >= 0.0) {
- gate = 0;
- break;
- }
- p[i] += sample;
- }
- }
-
-//---------------------------------------------------------
-// inst
-//---------------------------------------------------------
-
-static Mess* instantiate(int sr, const char*)
- {
- S1* s1 = new S1();
- s1->setSampleRate(sr);
- return s1;
- }
-
-extern "C" {
- static MESS descriptor = {
- "S1",
- "S1 MusE Demo Software Synthesizer",
- "0.2", // version string
- MESS_MAJOR_VERSION, MESS_MINOR_VERSION,
- instantiate
- };
-
- const MESS* mess_descriptor() { return &descriptor; }
- }
-