Jeannie Polyphonic DIY Synthesizer

Wow SuperOsziSaw
- zu Gehäuse und Ständer anbei meine Sperrholz Seitenteile - = besserer Stand Winkel zum Display
- zu v 1.99 update und midi ? Welches sind die aktuellen CC‘s ? - Lfo‘s und Fx … sind oder werden die auch Midifiziert
 

Anhänge

  • 50364376-9546-4463-A946-7983A21586D7.jpeg
    50364376-9546-4463-A946-7983A21586D7.jpeg
    1,3 MB · Aufrufe: 20
  • 45CF4558-7D54-4B32-A726-AAF8953AFCB8.jpeg
    45CF4558-7D54-4B32-A726-AAF8953AFCB8.jpeg
    1 MB · Aufrufe: 21
Die Midi CCs kommen noch vor Weihnachten. Bei der Supersaw wollte ich nur mal testen, ob das mit der Jeannie möglich ist. Für die Supersaw wirds zwei neue Parameter geben. Einer für die Lautstärke der zusätzlichen Sägezähne und einen für das Verstimmen der Sägezähne.
 
Hallo Rolf und Andre.
v 1.97 had the fx section freezed out. v.199 is now everything working supersmooth again.
I have created a local ebay for my Jeannie, just for pickup...
Want to see if I find someone interested in it, then I will buy another one!
Tnks for the constant updates! I have modified a computertalk to sound very much like
a MicroFreak, just severl voices better :) :connect:


I think a capacitative key like that of the Microfreak in a plug'in design like the Roland Boutique, if someone wanted to add one or two octave keyboard, it would be really cool, maybe a little bit smaller??? Tchusssss!
Yes , sorry for this . I use here V 1.99 and all works now . Sometimes i can't test all parameter .
In V 2.xxx we will ad the supersaw. !!
 
Noch eine kleine Kostprobe von der Jeannie mit Supersaw Oszillator.

Osc1+2 leichtes detune und Chorus2 mittlere Lautstärke.
Jeannie macht den Sound alleine.


Wegen solcher Klänge habe ich angefangen Synthesizer selbst zu bauen. Nur, wenn ich meine SuperSaw durch den Chorus schicke klingt das anders. Da ist doch mehr bei deinem Patch außer SuperSaw, DeTune und Chorus, oder? Da spielt doch noch ein Filter mit? Verrätst du Details?
 
Demo Supersaw - live mit kalten Fingern ---- sch*** Energiekrise.
Ein supersaw Oszi, delay, state variable Filter. AT war auch drin , hatte ich versenentlich mal zu stark angeschlagen .
Tja , so hört es sich an. Wir arbeiten dran .
G
Andre'
 

Anhänge

  • Supersaw1.mp3
    3,1 MB
Auf Tubeohm.com wird von „Superwave function“ in der 2er Version geschrieben - hier von Supersaw. Kann mir jemand die Begriffe kurz erläutern?
 
Auf Tubeohm.com wird von „Superwave function“ in der 2er Version geschrieben - hier von Supersaw. Kann mir jemand die Begriffe kurz erläutern?

Kann auf Tubeohm.com keinen Hinweis finden. Wo genau ?

Die Supersaw wird in der Jeannie mit einem Oszillator erzeugt. Die Grundwelle ist ein aufsteigender Sägezahn (Phasendrehung durch analogen Amp am Ausgang der Jeannie) der durch ein Phasenregister in Echtzeit berechnet wird. Ich benutze das Phasenregister um zusätzliche (vier) Sägezähne zu berechnen und diese über eine Addition zur Grundwelle hinzuzufügen. Leider klingt das noch sehr statisch. Es fehlt irgendwie noch ein Zufallswert. Ich bin noch am grübeln 🤔

C:
// Supersaw
        case WAVEFORM_SAWTOOTH:
        for (i=0; i < AUDIO_BLOCK_SAMPLES; i++) {
      
            saw_inc32 += 2039 * SupersawSpreadA;
            uint32_t spread_2 = saw_inc32;
            uint32_t spread_3 = saw_inc32 << 1;
            uint32_t spread_4 = saw_inc32 << 2;
            uint32_t spread_5 = saw_inc32 << 3;
            uint32_t ph_1 = phasedata[i];
            uint32_t ph_2 = (ph_1 + spread_2);
            uint32_t ph_3 = (ph_1 + spread_3) >> 1;
            uint32_t ph_4 = (ph_1 + spread_4) >> 2;
            uint32_t ph_5 = (ph_1 + spread_5) >> 3;
            int16_t val_1 = signed_multiply_32x16t(magnitude * Supersaw_gain1A, ph_1);
            int16_t val_2 = signed_multiply_32x16t(magnitude * Supersaw_gain2A, ph_2);
            int16_t val_3 = signed_multiply_32x16t(magnitude * Supersaw_gain2A, ph_3);
            int16_t val_4 = signed_multiply_32x16t(magnitude * Supersaw_gain2A, ph_4);
            int16_t val_5 = signed_multiply_32x16t(magnitude * Supersaw_gain2A, ph_5);
            *bp++ = val_1 + val_2 + val_3 + val_4 + val_5;
        }
        break;

 
Zuletzt bearbeitet:
It's even more expensive than having a whole case made right away.
A metal case would cost between 70..80 €.
The question is how many people would buy it here since I have to pre-finance at least 50 cases.

G
Andre'
On the basis that you are unlikely to get at least 50 pre-orders for metal cases, can you publish the vector file that has been provided to PlexiLaser (Mr. Schon)?
I would like to make my own top panel, but the PDF file posted here is not adequate.
Thank-you
 
On the basis that you are unlikely to get at least 50 pre-orders for metal cases, can you publish the vector file that has been provided to PlexiLaser (Mr. Schon)?
I would like to make my own top panel, but the PDF file posted here is not adequate.
Thank-you
It is only for the panel . This is the File i use for Plexilaser. Can be PDF or ESP .
Have you ask him ??
 
It is only for the panel. This is the File i use for Plexilaser. Can be PDF or ESP .
Have you ask him ??
thanks Andre,
I think you mean EPS. Anyway, I had an idea and have been able to import the PDF as a vector file into my graphics software. I will use this, thanks, to make an aluminum panel to mount Jeannie in Eurorack or custom wood box.
 
Zuletzt bearbeitet:
Hallöchen..

Eine neue Version der Supersaw in der Jeannie. Um das Wellenpumpen im Klang zu vermeiden, habe ich den Spreadwert über das Phasen increment (inc) berechnet. Dieser ändert sich bei jedem Aufruf der Supersaw Funktion.

C Code
C:
// Supersaw
        case WAVEFORM_SAWTOOTH:
        uint16_t phase_spread = (inc & 0x0000FFFF) * SupersawSpreadA >> 10;
        uint32_t phase_increment = inc & 0x000000FF;
        uint16_t increments[3];
        for (uint8_t i = 0; i < 3; ++i) {
            phase_increment += phase_spread;
            increments[i] = phase_increment;
        }
        
        for (i=0; i < AUDIO_BLOCK_SAMPLES; i++) {
            data_qs_phase[0] += increments[0];
            data_qs_phase[1] += increments[1];
            data_qs_phase[2] += increments[2];
            
            uint32_t ph_1 = phasedata[i];
            uint32_t ph_2 = (ph_1 + data_qs_phase[0]);
            uint32_t ph_3 = (ph_2 + data_qs_phase[1]);
            uint32_t ph_4 = (ph_3 + data_qs_phase[2]);
            
            
            int16_t val_1 = signed_multiply_32x16t(magnitude * Supersaw_gain1A, ph_1);
            int16_t val_2 = signed_multiply_32x16t(magnitude * Supersaw_gain2A, ph_2);
            int16_t val_3 = signed_multiply_32x16t(magnitude * Supersaw_gain2A, ph_3);
            int16_t val_4 = signed_multiply_32x16t(magnitude * Supersaw_gain2A, ph_4);               
            *bp++ = val_1 + val_2 + val_3 + val_4;
        }
        break;

Sound
 
Here the Panel again ( new version ) SVG and PDF. You can use it to create a panel or a alu frontpanel
 

Anhänge

  • Gehäuse-Jeannie-metall-03.pdf
    120,6 KB · Aufrufe: 12
  • Gehäuse-Jeannie-metall-03.zip
    58,3 KB · Aufrufe: 10
Zuletzt bearbeitet:
Falls es jemanden interessiert 😉: Ich warte bei der Jeanni sehnsüchtig auf Unterstützung für Sustain-Pedal und MIDI-CC. Das wäre nochmal ein richtig dicker Schritt für coole Performances. Aber beides wurde ja schon angekündigt 👍.
 
Falls es jemanden interessiert 😉: Ich warte bei der Jeanni sehnsüchtig auf Unterstützung für Sustain-Pedal und MIDI-CC.

Jau, das sollte in der Version 2.0 gerne dabei sein! Sustain ist mir wochenlang gar nicht aufgefallen.
Fehlt aber doch an der einen oder anderen Stelle.

Sustain, CC und SuperSaw - Kann man fast ne Version 3.0 draus machen. ;-)

Lasst euch leiber etwas länger Zeit und bringt das alles in der Version 2.0. ;-)
 
Lasst dem Rolf doch etwas Zeit.
Sieh haben es angekündigt und es wird kommen.
Man sollte nicht vergessen das da nur eine Person Programmiert.
Und der Rolf hat sicher auch nur zwei Hände.

Wenn in 2.0 Super Saw kommt ist das schon fett genug.
Der Rest kommt schon noch....
 
Zuletzt bearbeitet:
Supersaw 3.0

Es gab noch ein paar Fehler bei der Deklaration von Variablen und dem transponieren des Spread Werts. Je tiefer die Noten ist, desto kleiner ist der phase_spread Wert.

Soundbeispiel unten


C:
// Supersaw
        case WAVEFORM_SAWTOOTH:
        uint32_t phase_spread = (phase_increment >> 14) * SupersawSpreadA;   
        ++phase_spread;
        uint32_t saw_phase_increment = phase_increment & 0x000000FF; // add up 8bit random value
        uint32_t increments[3];
        for (uint8_t i = 0; i < 3; ++i) {
            saw_phase_increment += phase_spread;
            increments[i] = saw_phase_increment;
        }
    
        for (i=0; i < AUDIO_BLOCK_SAMPLES; i++) {
    
            data_qs_phase[0] += increments[0];
            data_qs_phase[1] += increments[1];
            data_qs_phase[2] += increments[2];
        
            uint32_t ph_1 = phasedata[i];
            uint32_t ph_2 = (ph_1 + data_qs_phase[0]);
            uint32_t ph_3 = (ph_2 + data_qs_phase[1]);
            uint32_t ph_4 = (ph_3 + data_qs_phase[2]);
        
            int16_t val_1 = signed_multiply_32x16t(magnitude * Supersaw_gain1A, ph_1);
            int16_t val_2 = signed_multiply_32x16t(magnitude * Supersaw_gain2A, ph_2);
            int16_t val_3 = signed_multiply_32x16t(magnitude * Supersaw_gain2A, ph_3);
            int16_t val_4 = signed_multiply_32x16t(magnitude * Supersaw_gain2A, ph_4);
            *bp++ = val_1 + val_2 + val_3 + val_4;

        }
        break;

class AudioSynthWaveformModulatedTS : public AudioStream
{
public:
  AudioSynthWaveformModulatedTS(void) : AudioStream(2, inputQueueArray),
    phase_accumulator(0), phase_increment(0), modulation_factor(32768),
    magnitude(0), arbdata(NULL), sample(0), tone_offset(0),
    tone_type(WAVEFORM_SINE), modulation_type(0), syncFlag(0) {
  }

  void frequency(float freq) {
    if (freq < 0.0) {
      freq = 0.0;
    } else if (freq > AUDIO_SAMPLE_RATE_EXACT / 2) {
      freq = AUDIO_SAMPLE_RATE_EXACT / 2;
    }
    phase_increment = freq * (4294967296.0 / AUDIO_SAMPLE_RATE_EXACT);
    if (phase_increment > 0x7FFE0000u) phase_increment = 0x7FFE0000;
  }
  void amplitude(float n) { // 0 to 1.0
    if (n < 0) {
      n = 0;
    } else if (n > 1.0) {
      n = 1.0;
    }
    magnitude = n * 65536.0;
  }
   void sync() {
    syncFlag = 1;
  }          
  void offset(float n) {
    if (n < -1.0) {
      n = -1.0;
    } else if (n > 1.0) {
      n = 1.0;
    }
    tone_offset = n * 32767.0;
  }
  void begin(short t_type) {
    tone_type = t_type;
    if (t_type == WAVEFORM_BANDLIMIT_SQUARE)
      band_limit_waveform.init_square (phase_increment) ;
    else if (t_type == WAVEFORM_BANDLIMIT_PULSE)
      band_limit_waveform.init_pulse (phase_increment, 0x80000000u) ;
    else if (t_type == WAVEFORM_BANDLIMIT_SAWTOOTH || t_type == WAVEFORM_BANDLIMIT_SAWTOOTH_REVERSE)
      band_limit_waveform.init_sawtooth (phase_increment) ;
  }
  void begin(float t_amp, float t_freq, short t_type) {
    amplitude(t_amp);
    frequency(t_freq);
    begin (t_type) ;
  }
  void arbitraryWaveform(const int16_t *data, float maxFreq) {
    arbdata = data;
  }
  void frequencyModulation(float octaves) {
    if (octaves > 12.0) {
      octaves = 12.0;
    } else if (octaves < 0.1) {
      octaves = 0.1;
    }
    modulation_factor = octaves * 4096.0;
    modulation_type = 0;
  }
  void phaseModulation(float degrees) {
    if (degrees > 9000.0) {
      degrees = 9000.0;
    } else if (degrees < 30.0) {
      degrees = 30.0;
    }
    modulation_factor = degrees * (65536.0 / 180.0);
    modulation_type = 1;
  }
  virtual void update(void);
 
 
 
private:
  audio_block_t *inputQueueArray[2];
  uint32_t phase_accumulator;
  uint32_t phase_increment;
  uint32_t modulation_factor;
  int32_t  magnitude;
  const int16_t *arbdata;
  uint32_t phasedata[AUDIO_BLOCK_SAMPLES];
  int16_t  sample; // for WAVEFORM_SAMPLE_HOLD
  int16_t  tone_offset;
  uint8_t  tone_type;
  uint8_t  modulation_type;
  int16_t  syncFlag;
  uint32_t data_qs_phase[3];
  BandLimitedWaveform band_limit_waveform;
 
};
 

Anhänge

  • SSaw.mp3
    1,2 MB
Zuletzt bearbeitet:
Hallo Leute , grade getestet , Welle läuft. Die Basis ist nun OK. Es sind noch kleinere Sachen die Rolf und ich noch besprechen müssen. Dann gibt es die Software als Weihnachtsgeschenk ....
Oh Mist , verraten .......

Hi guys , just tested , Supersaw is running. The base is now OK. There are still some minor things that Rolf and I need to discuss. Then there is the software as a Christmas present ....
Oh crap , betrayed .......
 
Zuletzt bearbeitet:


News

Zurück
Oben