Jump to content

AVR-Synthesizer "WAVE 1"


rolfdegen
 Share

Recommended Posts

Hallöchen miteinander..

Es gibt wieder was neues für die Ohren. Aber dieses mal nicht von mir, sondern von Johannes Taelman.
Er hat einen sehr interessanten Synthesizer auf Basis eines ARM Cortex-M4 Chips entwickelt und diesen
möchte ich euch nun vorstellen.

Axoloti Synthesizer
axoloti.jpg

Der Axoloti Synthesizer ist eine Mischung aus Hard- und Software. Am PC werden die verschiedenen
Klangmodule wie bei einem Modularen Synthesizer mit dem Axoloti-Patcher zusammengebaut und
vernetzt. Per USB wird das Programm in den Speicher des Synthesizers übertragen und kann per Midi
gespielt werden. Das interessante dabei ist, das vor der Ãœbertragung der Patch am PC in Realtime
vorgehört werden kann.

Axoloti-Patcher
axoloti-patches.jpg

Für die Änderung und Anzeige von Parametern gibt es das sogenannte Axoloti-Control Board. Es
besitzt insgesamt 5 Drehregler (Encoder), Taster und ein monochromes Grafikdisplay mit 128x64 Pixel. 

Axoloti-Control Board
Aoloti-control.JPG

Youtube: 



Axoloti-Website: http://axoloti.be/

Axoloti-Patcher: 


Gruß Rolf 
Link to comment
Share on other sites

Hallöchen..


Heute habe ich die zwei neuen Ersatz XMega100 Breakout Boards bekommen und die Stiftleisten angelötet. Zum Ausprobieren habe ich diese in den Stecksockel auf dem Motherboard vom Synthesizer gesteckt und mit ATMEL-Studio geflasht. Die beiden Breakout Boards funktionieren fehlerfrei. Jetzt kann ich ohne Risiko den Xmega Prozessor 10.000 mal umprogrammieren (flashen) ohne das ich Angst haben muss, das ein Bit nicht mehr funktioniert smile.gif 

XMega100 Breakout Board
XMega100.jpg

Zur Zeit arbeite ich noch an der Zoom-Funktion für die Anzeige der Wellenform und den Loop-Points. Ich hoffe das ich das dieses Wochenende endlich hin bekomme.

Lieben Gruß aus Wuppertal. Rolf 

Link to comment
Share on other sites

Hallo liebe Freunde der Musik...

Vom Elektor Magazin soll es in der Januar und Februar Ausgabe einen neuen Synthesizer Bausatz
geben. Der "J2B Synthesizer" besitzt auch wie der Axoloti Synthesizer einen 32-Bit ARM Cortex-
M3 Prozessor für die Klangerzeugung.

Die Inspiration für die Entwicklung des J²B SYNTHESIZER kam durch den 8-Bit Synthesizer
ATmegatron von Paul Soulsby. 


Hier einige Daten:
Monophonic 9-bit synthesizer
32 waveforms + user defined
15 filter types
2 envelope generators
LFO with 16 waveforms
15-pattern arpeggiator
16 patch memories
6 live controls
MIDI
Patch saving/loading over MIDI
NXP LPC1347 32-bit ARM Cortex-M3 microcontroller
2 output channels
Open Source & Open Hardware design

J²B SYNTHESIZER
J2B_02.jpg

J²B SYNTHESIZER
J2B_01.jpg


Das Ganze kann man sich auf Youtube auch anhören: 



Gruß Rolf 
Link to comment
Share on other sites

  • 2 weeks later...

Danke Bernhard  :rolleyes:

 

Hallöchen..

Futuresonus stellt einen neue polyphone Analog Synthesizer vor. Parva vereint die klassische Wärme eines analogen Synthesizers mit dem Komfort einer digitalen Steuerung und einem elegant gestalteten Desktop Gehäuse mit OLED Display.
Der Entwickler Brad Ferguson meint zu PARVA: "Ich entwarf PARVA von Grund auf mit der Absicht, eines neuen Synthesizers unter Beibehaltung des Charakter der Klassiker aus den 70er und 80er Jahren".

Jede der acht Stimmen im PARVA verfügt über drei digital gesteuerte analoge Oszillatoren, mit Sägezahn, Dreieck und PWM-Wellenformen mit extrem genaue Tonhöhe und rock-solid Stimmstabilität. Ein Paar von Zweipol-state-variable Filter kann für eine 12 dB oder 24 dB Tiefpass oder Hochpass -Verhalten oder aufgeteilt zum Bandpassfiltern ausgebildet sein. Vier vierstufigen Hüllkurvengeneratoren und vier Multi-Wellenform Niederfrequenzoszillatoren füttern eine flexible Modulations-Matrix, so dass für praktisch unbegrenzte Klanggestaltungsmöglichkeiten .
Parva ist der erste Analog-Synthesizer mit einer USB-Master-Schnittstelle, die es dem Benutzer ermöglicht, jedes kompatible USB-MIDI-Keyboard anzuschließen. Analogpotentiometer bieten sofortigen Zugriff auf die am häufigsten verwendeten Parameter. Das OLED-Display auf der Frontplatte zeigt weitere Einstellungen und vereinfacht so die Suche nach dem perfekten Patch.
Das Aluminiumgehäuse und speziellen Aluminium Knöpfe sind für den robusten Arbeitsalltag eines Musiker konzipiert und gebaut. Jede PAVA Synthesizer wird in Austin Texas von Hand montiert.

PARVA Desktop Synthesizer
Parva_1.jpg

PARVA Desktop Synthesizer
Parva_2.jpg

PARVA Desktop Synthesizer
PARVA_3.jpg


OSCILLATORS
* 3 Digitally-controlled analog oscillators
* Sawtooth, triangle, and PWM waveforms
* Tunable +/- 5 octaves
* Hard Syncable
* Independent level controls

FILTERS
* 2 configurable state-variable filters
* 24db or 12db low-pass or high-pass modes
* 12db bandpass mode
* Self-oscillating
* Filter FM

ENVELOPES
* 4 4-stage (ADSR) envelopes
* Exponential curves for punchy attack and natural decay
* Linear mode also available
* Routable to >40 destinations

MODULATION
* 4 LFOs
* Sine, sawtooth, triangle, and square waveforms
* Random sample-and-hold
* Free-running or key-synced
* Routable to >40 destinations

INPUTS / OUTPUTS
* Dual 1/4" TS line-level outputs
* Stereo 1/4" headphone jack
* MIDI input and ouput
* USB port for MIDI input and output
* USB Master port for direct connection of USB MIDI controllers

Parva wird voraussichtlich im Sommer 2015 lieferbar sein. Ab Februar kann die polyphone Version für unter $ 1000 vorbestellt werden. Eine erweiterbare monophone Version wird für unter 500 Dollar angeboten.
Futuresonus wurde 2014 von Brad Ferguson in Austin Texas gegründet und entwickelt hochwertiger Synthesizer und Effektgeräte.

Gruß Rolf 

Link to comment
Share on other sites

  • 2 weeks later...

So.. heute habe ich wieder etwas Zeit für meinen "Degenerator" gehabt und an der Loop-Funktion programmiert. Ihr habt richtig gelesen. Er heißt jetzt "Degenerator" obwohl ich den Namen etwas merkwürdig finde. Aber Andre findet den Namen gut und so soll es denn wenn Gott will sein.. smile.gif 

Damit es nicht zu langweilig wird hab ich mal ein kleines Video gedreht und auf Youtube geladen. Der Sound ist nicht besonders gut, da der Ton bei der Aufnahme von meiner Webcam stammt.

Youtube-Link: http://youtu.be/tS7DX94XwtE


Gruß Rolf 

Edited by rolfdegen
Link to comment
Share on other sites

  • 3 weeks later...

Hallöchen zusammen. Hoffe euch geht's allen gut da draussen bueb.gif 

Heute will ich mit der Programmierung für einen kleinen Stepsequenzer im "Degenrator" beginnen.
Zum Vergleich habe ich mir den Dark-Time Sequenzer von der Firma Doepfer angesehen.

"Dark Time" Sequenzer von der Firma Doepfer
Dark_time.jpg

Wie der "Dark Time" soll auch der Sequenzer im "Degenerator" 16 Steps bekommen und optische
Drehregler für Tonhöhe und Notenlänge (Display). Die Einstellung erfolgt über Tasten und Drehgeber
am "Degenerator".

 

Heute habe ich von der "Konkurrenz" :smile: aus Frankreich eine Satz Platinen für einen SHRUTHY Synthesizer
bekommen. Als Filterplatine kommt ein SHRUTHACON zum Einsatz. Bin mal gespannt
wie sich der SHRUTHY in Natura anhört. 
 
Bis dahin lieben Gruß. Rolf
Edited by rolfdegen
Link to comment
Share on other sites

  • 2 weeks later...

Hallöchen

So.. am Wochenende hab ich mal wieder fleißig am Synth programmiert und den Step Sequenzer integriert. Er ist noch nich ganz fertig, aber schon lauffähig smile.gif 

Noten Symbol: Ausgewählte Midi-Note von 0-127
H ist die Notendauer
V ist die Lautstäke der Note und wird durch einen blauen Balken angezeigt
Roter Punkt bedeutet das der Step aktiv ist. Grau bedeutet ausgeschaltet

Später wirds noch eine Reset und Skip Funktion für jeden Step geben. 


Der Step Sequenzer im "Degenerator" 
Seq_01.jpg

Das Ganze kann man sich auf Youtube ansehen und anhören. Der Ton kommt von der Webcam und ist leider nicht so prickelnd frown.gif 

Youtube.png

Youtube: 



Gruß Rolf 
Link to comment
Share on other sites

Hallöchen..

Gestern habe ich die Bauteile für meinen Shruthi Synthesizer bekommen. Da ich zu den ungeduldigen Menschen zähle, habe ich eine Nachtschicht eingelegt und den Shruthi zusammen gelötet. So in den frühen Morgenstunden wäre ich fast mit dem Lötkolben in der Hand eingeschlafen und bin dann doch ins Bett gegangen.. wink.gif 

Shruthi Synthesizer
Shruthi_12.jpg

Dank der guten Dokumentation und Lötanleitung auf der Mutable Instrument Website ist der Shruthi sehr einfach und leicht zu löten und schnell zusammenzubauen. Beim Bestellen der Bauteile sollte man beachten, das es unterschiedliche Stücklisten für verschieden Lieferanten wzB Mouser oder Reichelt gibt. Ich habe mich für Reichelt entschieden, da dieser Lieferant kostengünstiger ist. Ein kleines Problem gabs bei der Bestellung der Tasten. Die Original Tasten gabs bei Reichelt nicht und ich musste dafür andere Tasten nehmen. Bei Mouser bekommt man die Original Tasten und die anderen Bauteile problemlos geliefert.

Stückliste Reichelt: https://secure.reichelt.de/index.html?&A...199&PROVID=2084

Stückliste Mouser: https://www.mouser.de/ProjectManager/Pro...ssID=dcda87764c

Dank meiner langjährigen Lötkünste war der Shruthi schnell zusammengelötet und betriebsbereit. Beim Flashen der aktuellen Firmware über ATMEL STUDIO hatte ich ein kleines Problem. Die Voreinstellung für die PDI Clock-Rate von 1MHz für den Mikrocontroller ATmega644P muss im Menü auf 125KHz herunter gesetzt werden, da sonst der ATmega644P nicht erkannt wird..

Gruß Rolf 

Link to comment
Share on other sites

Hallo..

Ein ganz interessantes Beispiel in Bezug auf Sequenzer ist der K4815 Pattern Generator von Kilpatrick Audio. Beim K4815 handelt es sich um einen Midi Sequenzer ohne Tonerzeugung für den 19 Zoll Einschub. Er besticht durch seine ungewönliche und einfache Bedienung wie ich finde.

K4815 Pattern Generator
K4815P.jpg

Features and Specs
* Eurorack form factor - 20HP width
* 64 LED 8x8 Matrix multi-brightness grid to show patterns and playback
* Clock control via internal clock, or MIDI or analog (5V) clock
* Clock, direction and reset inputs (0V/5V = off/on)
* CV/GATE or X/Y outputs - range: -5V to +5V
* High-precision 12-bit DACs with internal trim adjustment
* Internal MIDI header compatible with future Kilpatrick Audio modules or DIY breakout boards
* Only 30mm deep (including ribbon cables)
* Serial numbers up to 1009500: Requires +/-12V (less than 10mA) and +5V (less than 65mA)
* Serial numbers from 1009501 onward: Requires +12V (80mA) and -12V (less than 10mA)
* 16 pin Doepfer-style power cable used
* Designed and made in Canada using high quality parts.

Website Hersteller: http://www.kilpatrickaudio.com/?p=K4815

Youtube Video: 



Gruß Rolf 
Link to comment
Share on other sites

  • 3 weeks later...

Hallo Freunde der Musik

Diese Woche arbeite ich noch ein wenig am Sequenzer in meinem Synthesizer. Folgende Funktionen sind bereits integriert:

16 Steps mit Haltezeit und Velocity
Stepfunktion On, Off, Skip
Manuelle Eingabe der Midi Note oder vom Midi Keyboard 
Einstellbare Geschwindigkeit von 30 bis 460 BPM
Transponierung + -2 Oktaven und per Midi Keyboard
Shuffle-Funktion
Velocity für die Modulation zB VCA, VCF oder Oszillator
Sequenzerrichtung Links, Rechts oder Beides
Laden und Speichern von 128 Sequenzen

Der Sequenzer im DeGenerator
Sequencer.jpg


Gruß Rolf 

Link to comment
Share on other sites

Prima Sache! Zum Layout des Sequenzers frage ich mich allerdings, ob das mit den drei Reihen zu 6, 6 und dann nur 4 Einträgen so intuitiv ist, die Übersicht über die Steps zu behalten. Könntest du nicht einen 4x4 Block von Steps auf der linken Seite anordnen, und die virtuellen Encoder in einer Vertikalen rechts davon (oder andersherum)?

Link to comment
Share on other sites

Hallo ilmenator

 

Danke für deinen Tip. Ich gebe zu die 6x3 Anordung ist nicht gerade Anwenderfreundlich. Aber es ist mein erster Entwurf und bis zur entgültigen Version werde ich das Layout noch etwas verbessern. Versprochen :smile:

 

Hier der Startscreen vom "DEGENERATOR" nach dem Einschalten.
 

Degenerator_04.jpg

 

 

Entwicklungsstatus:

Die 128 Wellenformen (128x256Byte) vom internen Flashspeicher wurden jetzt auf die SDCARD ausgelagert
damit ich 32KByte mehr Speicherplatz fürs Programm bekomme. Diese werden dann beim Systemstart
in das 1MByte SRAM geladen. Durch diese Änderung hat man später die Möglichkeit die Wellenformen
einfach gegen andere auszutauschen.

 

In dieser Woche arbeite ich an der Modulations Matrix im Synthesizer.
Hier ist eine kleine mathematische Formel für die Einstellung der Grenzfrequenz mit Cutoff-Level und Amount-Level.
 

// VCF1_CV_IN = VCF1 CV Eingangswert 12Bit von ADSR Generator
// VCF1_CV_OUT = VCF1 CV-Ausgangswert
// VCF1_Amount = Geberstufe 0-127
// VCF1_Cutoff = Geberstufe 0-127

VCF1_CV_Out = ((uint32_t) (128 - VCF1_Amount) * VCF1_CV_IN / 128) + (((uint32_t) VCF1_Amount * VCF1_Cutoff / 128) * VCF1_CV_IN / 128)

 

Für die LFO Modulation des Filters muss ich noch überlegen wie ich die Formel dafür umstricke bzw erweiter.

Der LFO Ausgang hat einen Wert von 0-255.

Gruß Rolf 

Edited by rolfdegen
Link to comment
Share on other sites

Hallöchen..

Bin jetzt im Endspurt und steh etwas unter "Stress". Arbeite viel an meinem Synthesizer. Aus diesem Grund fallen meine Berichte hier etwas mager aus. Zur Zeit wird eine Frontblende hergestellt damit der "DEGENERATOR" in der CC2 TV Sendung nächste Woche nicht so "nackelich" aussieht. Musste dafür extra noch ein 2.Frontpanel zusammenlöten (siehe Bild). Ein komplettes Gehäuse aus durchsichtigem Kunststoff ist schon in Planung.


2.Frontpanel
2.Frontpanel.jpg

Ach her je.. bin schon ganz aufgeregt wink.gif Hoffentlich funktioniert alles in der TV-Show problemlos und es gibt keinen Vorführeffekt. Ist ja schließlich der Prototyp. Wird schon gut gehen bueb.gif 

Gruß Rolf 

Edited by rolfdegen
Link to comment
Share on other sites

Hallöchen..

Der "DE:GENERATOR" ist ready for sounding..


Der "DE:GENERATOR"
Degenerator02.jpg
Die Frontplatte ist mal eben schnell gemacht worden und noch nicht so perfekt. Die Display Aussparung stimmt nicht und Beschriftung fehlt noch.


Sieht doch schick aus smile.gif 

Gruß Rolf 

Link to comment
Share on other sites

Der Studiobesuch beim CC2

Hallo liebe Freunde..
Der Studiobesuch beim CC2 war sehr interessant und eine große Freude für mich. Endlich konnte ich den "Urgesteinen" des damaligen WDR Computer Clubs Wolfgang Back und Wolfgang Rudolph leibhaftig die Hände schütteln. Der Heinz war dieses mal leider nicht dabei.

Es ist sehr interessant zu beobachten mit welcher Routine und Gelassenheit und vor allem mit wieviel Humor die beiden Wolfgänge eine TV Sendung machen. Und ich live dabei und mittendrin.. wow.

Von Lampenfieber vor den drei Kameras war bei mir keine Spur mehr als ich mit Wolfgang Rudolph ins Gespräch kam und von den Anfängen meiner Entwicklung am Synthesizer erzählte. Techniker unter sich.. da sind 15 Minuten nix. Die Minuten flogen im Eiltempo an mir vorbei und ich hätte noch Stunden vom Synthesizer, Elektronischer Musik u.a. Dingen erzählen können. Aber da war noch Stefan Krister und der wollte etwas über den 3D Druck erzählen. Dem wollte ich nicht die Show stehlen smile.gif 

Hab mal ein paar Fotos aus dem Studio von NRW TV geschossen um zu "beweisen" das ich wirklich da war wink.gif 

Fotos CC2 Studiobesuch
Studio_01.jpgStudio_02.jpgStudio_04.jpgStudio_06.jpgStudio_07.jpgStudio_08.jpgStudio_09.jpgStudio2.png

Edited by rolfdegen
Link to comment
Share on other sites

  • 1 month later...

Hallöchen zusammen!

 

@Thomasch. Die 2.Folge vom CC2 findest du hier: 

 

Es gibt wieder viel neues zu berichten. Hier gehts zu den News: http://www.cczwei-forum.de/cc2/thread.php?threadid=5878&threadview=0&hilight=&hilightuser=0&page=23

 

Stand der Dinge:

 

Mit Neo und Morpheus war ich heute in der Matrix und tauche gleich wieder ein icon_wink.gif 

Kleiner Scherz. Wer den Science-Fiction Klassiker Matrix nicht kennt hier zur Film Info: http://de.matrix.wikia.com/wiki/Matrix_Wiki

Diese Woche arbeite ich wieder an der Modulationsmatrix. Keine leichte Sache icon_sad.gif Aber Dank einiger Tips aus dem Mutable Forum will ich das mit Hilfe eines Zweidimensionale Daten Arrays versuchen umzusetzen.

Was ist ein Zweidimensionale Daten Arrays: http://www.c-howto.de/tutorial-arrays-felder-zweidimensional.html

Modulationsmatrix im DE:Generator
ModMatrix.jpg

Wie man auf dem Bild erkennen kann, besteht das Daten Array aus 6 Reihen (Slots) mit jeweils 3 Datenfeldern (Source, Destination, Amount).

Der Zugriff auf ein Datenelement in der Modulationsmatrix erfolgt mit einem Zeilen- und Spaltenindex. Unter C sieht das zB dann so aus:

amount = (slot_array[2][2]); // load lfo1 amount

 


Die Berechnung eines Modulationsknoten besteht im wesentlichen aus der Multiplikation von Source- und Destination-Werten. Um die Berechnungen schnell auszuführen, habe ich Inline-Assembler Routinen verwendet. Mit Inline-Assembler kann man kleine optimierte Assembler Routinen direkt in den C-Code einbetten.
 

// LFO1 => VCF Modulation  --------------------------------------------
temp_cv = U16ShiftRight4(Env2.value_); // convert 16Bit Envelope to 12Bit PWM-Control for Filter-Cutoff 
amount2 = (slot_array[2][2]) << 1; // load lfo1 amount *2
modul2 = lfo1_out * amount2 >> 8;
temp_cv = U16U8MulShift8(temp_cv,(255-modul2));

// set Filter Cutoff --------------------
CV_VCF_Cha1 = temp_cv;
CV_VCF_Cha2 = temp_cv;



// Inline-Assembler Routinen (avr-gcc) ------------------
static inline uint16_t U16ShiftRight4(uint16_t a) {
    uint16_t result;
    asm(
    "movw %A0, %A1" "\n\t"
    "lsr %B0"      "\n\t"
    "ror %A0"      "\n\t"
    "lsr %B0"      "\n\t"
    "ror %A0"      "\n\t"
    "lsr %B0"      "\n\t"
    "ror %A0"      "\n\t"
    "lsr %B0"      "\n\t"
    "ror %A0"      "\n\t"
    : "=r" (result)
    : "a" (a)
    );
    return result;
}

static inline uint16_t U16U8MulShift8(uint16_t a, uint8_t b)
{
    uint16_t result;
    asm(
    "eor %B0, %B0"    "\n\t"
    "mul %A1, %A2"    "\n\t"
    "mov %A0, r1"     "\n\t"
    "mul %B1, %A2"  "\n\t"
    "add %A0, r0"     "\n\t"
    "adc %B0, r1"     "\n\t"
    "eor r1, r1"      "\n\t"
    : "=&r" (result)
    : "a" (a), "a" (b)
    );
    return result;
}

 

Die Schwierigkeit in der Programmierung besteht jetzt darin, die einzelnen Modulationsknoten in der Matrix zusammen zu führen. Daran arbeite ich jetzt...

Bis bald und eine schöne Wochen wünscht euch der Rolf aus Wuppertal smile.gif

 

 


Die Schwierigkeit in der Programmierung besteht jetzt darin, die einzelnen Modulationsknoten in der Matrix zusammen zu führen. Daran arbeite ich jetzt...

Bis bald und eine schöne Wochen wünscht euch der Rolf aus Wuppertal icon_smile.gif

Edited by rolfdegen
  • Like 1
Link to comment
Share on other sites

Hallöchen und guten Abend smile

Ich glaube das die Sounds vom DE:Generator sehr interessant sind und er
sich nicht verstecken muss im Vergleich zu anderen Synthis, obwohl er nur
eine 8Bit Auflösung hat.

Testweise habe ich heute einen 580KByte großen Chor-Sample geladen und 
über den eigebauten Stepsequenzer abgespielt.
Im normalen Fall wird der Wellenform Oszillator bei jeder Tastenanschlag 
neu getriggert und beginnt das Abspielen des Samples von vorne (Sound 
Beispiel 1.Teil). Ich habe diese Funktion über einen Switch (ReTrig) 
abschaltbar gemacht, so dass der Wellenform Oscillator im Loop läuft und 
bei jedem Tastenanschlag ein anderer Wellformabschnitt vom Sample 
gespielt wird (Sound Beispiel 2.Teil). Der Sound klingt dadurch 
abwechslungsreicher und weniger statisch. Das funktioniert allerdings 
nur bei Flächensounds sehr gut.

OscTrig01.jpg

 

Sound Beispiel 1.Teil Note trigger Waveform Oszillator 2.Teil: free run Waveform Oszillator

 

Soundcloud: https://soundcloud.com/rolfdegen/osc-re-trigger

 

Gruß Rolf

Edited by rolfdegen
Link to comment
Share on other sites

Hallo Rolf,

ist auf der letzten Sound Demo noch ein leichter Hall drauf?

Oder ist der Hall ein Teil des Samples?

 

LG

Thomasch

 

P.S.:

Habe deine beiden Auftritte im Computer Club gesehn, hättest gern noch mehr auf die einzelnen Funktionen eingehen können, aber das hätte wohl den Umfang der beiden Sendungen zu sehr gesprengt. :D

Glücklicherweise hält du uns ja hier immer auf dem Laufenden.

 

P.P.S.:

Schade daß Dein Synth nur monophon spielbar ist.

Für nen reinen Bass Synth wäre das völlig ausreichend, aber dein Synth bietet vom Soundpektrum doch einiges mehr.

Es würde sicher Sinn machen, daß Projekt auf nen stärkeren Prozessor zu portieren für eine höhere Polyphonie.

Beim Einsatz von analogen FIltern würde es auch Sinn machen Multichannel D/A Wandler zu integrieren, so daß die Filter auch polyphon gespielt werden können.

Link to comment
Share on other sites

  • 1 month later...

Hallöchen.. da bin ich wieder happy.gif 

Nach längerer Urlaubs- und Gedankenpause hab ich wieder Neues zu berichten.

Die Modulationsmatrix ist fertig. Es stehen insgesamt 12 Slots zur Verfügung in dem jeweils eine Modulationsquelle mit einem Ziel verknüpft werden kann. Die Modulationsstärke kann von +64 bis -64 geregelt werden. Die Tage werde ich dann ein ausführliches Video mit dem DE:generator und meinem neuen DigiScope machen.

Modulationsmatrix
Picture%2B26.jpgPicture%2B27.jpg


Zur Zeit programmiere ich noch ein wenig an den neuen Funktionen für die Oszillatoren. Folgende Funktionen sind bereits implementiert: SUM, Ring, XOR, Sync, Bitcrushing, Noise und FM.
Auch hier folgt ein Video sobald das neue DigiScope angekommen ist smile.gif 

Oszillator Menü
Picture%2B28.jpgPicture%2B29.jpg


Mein neues DigiScope
DigiScope.jpg

Mein altes Hameg HM203-6 20MHz hat fast 20 Jahre auf'm Buckel und läuft immer noch. Gut.. ein paar Dinge funktionieren nicht mehr so wie am Anfang, zB haben die Poties und Drehschalter manch mal einen kleinen Wackelkontakte, aber im Prinzip tut es doch noch seinen Dienst.

Mein neues Scope ist ein Siglent SDS1072CML Zweikanal Digital-Oszilloskop mit einer Bandbreite von 70 MHz, einer Abtastrate von 1 GSa/s und einer Speichertiefe von 2 Mpts. Die großen 7" (17,78 cm) TFT Farbbildschirme idt sehr gut ablesbar und durch 18 Divisions in der Horizontalen steht ständig ein maximaler Bereich für die Signaldarstellung zur Verfügung. Die Signalkurven und die FFT-Anzeige kann gleichzeitig im Display angezeigt werden. Ein sehr nützliches Future ist die Alternative Trigger Funktion. Das Oszilloskop kann damit auf beide Kanäle getrennt Triggern. Damit können auch Signale unterschiedlicher Frequenz sauber gleichzeitig dargestellt werden. Freu mich schon sehr drauf. "Rolf-Packt-Aus" bueb.gif 

Gruß Rolf 

Link to comment
Share on other sites

Die FM Synthese

Die letzten Tage habe ich an einer einfachen FM-Synthese für den DE:generator programmiert. Die FM-Synthese ist vermutlich vielen schon bekannt, aber für die Neulinge unter euch hier ein kleiner Erklärungsversuch.

Der Begriff FM steht für Frequenzmodulation. Kern einer einfachen FM-Synthese ist ein Paar aus zwei Oscillatoren. Die Amplitude des 1.Oszillators (Modulator) steuert die Tonhöhe - also die Frequenz - des 2.Oszillators (Carrier). Das Verändern der Frequenzverhältnisse von Modulator zu Cerrier und die Veränderung der Amplitude des Modulators steuern dabei den Klang.

FM-Synthese
FM_Synth03.jpg


Mit der Frequenzmodulation lassen sich viele komplexe Klangspektren erzeugen, egal ob Bässe, E-Pianos oder Glockenspiel bis hin zu stimm- und vokalartigen Sounds. Dabei ist nicht wirklich voraussagbar, wie der Sound danach erklingen wird, bietet aber zum Experimentieren und Erzeugen von Effekten einen sehr weiten Spielraum. Bei der FM werden in der Regel Sinuswellen benutzt, aber es können auch andere Wellenformen verwendet werden. Die zu erzeugende Klangfarbe wird dabei durch die Frequenzverhältnisse zwischen den Operatoren in Ratio-Werten angegeben. Die Ratio-Zahl gibt das Vielfache der jeweils gespielten Tonhöhe an.

Im DE:generator gibt es zwei FM Oszillatoren mit jeweils einem Parameter für Ratio und Frequenz. Im Anhang der Assembler-Code für einen FM Oszillator.

Hier ein kleines FM Klangbeispiel aus dem DE:generator

 


Für die Programmierer unter euch im Anhang das Assembler-File für einen FM Generator im DE:generator. Dank gebührt Olivier aus dem Mutable_Forum und Wolfgang (alias Wiesolator) für die Ideen und die Bereitstellung von Code Bibliotheken. 

Gruß Rolf 

 

Assembler Code: FM Synthese

//-------------------------------------------------------------------------
// FM-SYNTHESE 1.Osc (Modulator), 2.Osc (Carrier) 
//-------------------------------------------------------------------------
LDS   pha_inc1_0, phaccu_stepsize1+0
LDS   pha_inc1_1, phaccu_stepsize1+1
LDS   pha_inc1_2, phaccu_stepsize1+2
LDS   phase1_0, phaccu1+0
LDS   phase1_1, phaccu1+1
LDS   phase1_2, phaccu1+2

// def Register -------------
a1 = 2		; 16Bit multiplier
a2 = 3
b1 = 4		; 24Bit phase-inc
b2 = 5
b3 = 6
e1 = 7		; 32Bit result
e2 = 8
e3 = 9
e4 = 10
c0 = 11		; help register for Addition
temp1 = 16	; help register


// load 16Bit fm_ratio from table
// Table offset comes from Encoder 0-24
// calc in c: Osci_fm_ratio = pgm_read_word (&(fm_ratio[Osci_ratio_value]));

lds a1, Osci_fm_ratio+0
lds a2, Osci_fm_ratio+1

// load phase_increment
mov b1, pha_inc1_0
mov b2, pha_inc1_1
mov b3, pha_inc1_2

// calc 32bit increment (phase_increment * fm_ratio >> 8)
clr e1 ;  clr result register
clr e2
clr e3
clr e4
clr c0 ; clr help reggister
mul a2,b3 ; Term 1
add e4,R0 
mul a2,b2 ; Term 2
add e3,R0
adc e4,R1	; add ov
mul a2,b1 ; Term 3
add e2,R0
adc e3,R1
adc e4,c0
mul a1,b3 ; Term 4
add e3,R0
adc e4,R1
mul a1,b2 ; Term 5
add e2,R0
adc e3,R1
adc e4,c0
mul a1,b1 ; Term 6
add e1,R0
adc e2,R1
adc e3,c0
adc e4,c0  ; increment for Osc1

// add increment 1.Osc (Modulator)
add   phase1_0, e2
adc   phase1_1, e3
adc   phase1_2, e4
STS   phaccu1+0, phase1_0
STS   phaccu1+1, phase1_1
STS   phaccu1+2, phase1_2

// load modulator
modulator      = 29
temp_modulator = 28
temp1          = 16
lds  R30,  Osci_sin_wav+0
lds  R31,  Osci_sin_wav+1
add  R30,  phase2_2
clr  temp1
adc  R31, temp1
lpm  modulator, Z


//2.Osc (Carrier) ---------------------------------------------------------
lds phase2_0, Osci_phase2+0		// calc phase2
lds phase2_1, Osci_phase2+1
lds phase2_2, Osci_phase2+2
add phase2_0, pha_inc1_0
adc phase2_1, pha_inc1_1
adc phase2_2, pha_inc1_2
sts Osci_phase2+0, phase2_0
sts Osci_phase2+1, phase2_1
sts Osci_phase2+2, phase2_2

// calc increment
parameter    = 7
carrier      = 10
temp1        = 16
lds parameter, Osci_parameter // 0-127 aplitude_Value
add parameter, parameter // parameter x2
mul modulator, parameter
clr temp1
add pha_inc1_0, temp1
adc pha_inc1_1, r0
adc pha_inc1_2, r1
add phase2_0, pha_inc1_0
adc phase2_1, pha_inc1_1
adc phase2_2, pha_inc1_2

// load carrier
temp_carrier = 11
lds  R30,  Osci_sin_wav+0	// Startload addr sine table
lds  R31,  Osci_sin_wav+1
add  R30,  phase2_2
clr  temp1
adc  R31, temp1
lpm  carrier, Z+
lpm  temp_carrier, Z

// interpolisation two samples (noise reduction in low frequencies)
temp_phase = 16
mov temp_phase, phase2_1
mul temp_phase, temp_carrier
movw R30, r0
com temp_phase
mul temp_phase, carrier
add r30, r0 
adc r31, r1
eor r1, r1
mov carrier, r31		// 8Bit Result = carrier

// End ------------------------------------------------------


// Ratio Table

const uint16_t fm_ratio[] PROGMEM = {
	32,     68,    111,    151,    181,    201,    297,    321,		// 0 - 24
	362,    402,   447,    511,    514,    577,    704,    724,
	767,    804,   886,   1023,   1086,   1206,   1310,   1435,
	2050,
};
Edited by rolfdegen
Link to comment
Share on other sites

Das Problem an der normalen FM ist, daß sie bei komplexeren Wellenformen nicht wirklich Spaß macht.

Wäre es nicht sinnvoller eher auf die Yamaha Variante mittels Phase Modulation zurückzugreifen?

Finde ich zum Sounddesign deutlich entspannter und zielführender, als die normale FM.

Ist halt echt schwierig Amplitude und Pitch bei der normalen FM unter Kontrolle zu halten.

Vor allem wenn die Wellenformen komplexer werden...

Edited by Thomasch
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...