Jump to content

rolfdegen

Members
  • Posts

    457
  • Joined

  • Last visited

  • Days Won

    14

Everything posted by rolfdegen

  1. Hallo Freunde der Musik..Für die Sample Aufnahme habe ich einige neue Funktionen integriert u.a auch Threshold. Die Aufnahme kann durch einen Tastendruck am Synthesizer sowie durch ein Midi Note ausgelöst werden. Mit Threshold startet die Aufnahme ab einem bestimmten Signal Pegel (siehe Video).Threshold AufnahmefunktionYoutube: https://www.youtube.com/watch?v=2Vn8oYqZZrcGruß Rolf
  2. Hallöchen..Ich habe die Eingangsschaltung für den Analog Digital Wandler etwas verbessert. Als erstes habe ich die interne Referenzspannungsquelle im Xmega durch einen LM336-Z2.5 ersetzt. Der LM336 erzeugt eine positive Referenzspannung von 2.5 Volt. Über den Port-Eingang PA0 wird die Referenzspannung dem Xmega zugeführt. Da ich den ADC-Eingang im sogenannten Single-ended Mode betreibe, benötigt dieser am Eingang eine positive Offset Spannung von 1.25 Volt die ich über den Spannungsteiler aus R100, R101 und R102 einstelle. Die Kondensatoren C101, C104 und C105 verringern hochfrequente Störanteile. Der Widerstand R103 dient als Strombegrenzer für den ADC-Eingang bei zu hohen Eingangsspannungen die bei Übersteuerung am Audio-Eingang auftreten können. Interne Schutzdioden im ADC-Eingang des Xmega schützen zusätzlich. Die Störgeräusche sind jetzt minimal. Der ADC im Xmega arbeitet mit einer Samplerate von 40KHz. Ein steilflankiger Tiefpassfilter ist dadurch nicht mehr notwendig. Für einen 8Bit Sampler ist der Klang erstaunlich gut. Hab mal ein Hörbeispiel auf Soundcloud hochgeladen.Bild: ADC-Input Sample-Demo auf SoundcloudGruß Rolf
  3. Funktionsbeschreibung Manual_04Manual_05Manual_06Ein Problem gibt es beim abfotografieren der Menüseiten im Display. Durch den starken Kontrast und die ungleichmäßige Ausleuchtung sind die Fotos allesamt nicht besonders gut geworden. Mal schaun wie wir das besser machen können.Gruß Rolf
  4. Hallöchen..Zur Zeit arbeite ich an einer Produktpräsentation für den DE:generator. Es ist als Techniker nicht immer ganz einfach, die passenden Worte und Satzformulierungen zu finden, um seine Entwicklung auch dem Leien zu erklären. Aber ich habs versucht und hoffe das es mir gelungen ist. Hier eine kleine Kostprobe..Produktpräsentation Gruß Rolf
  5. Hallöchen..Es mach richtig Spaß mit meinem neuen DigiScope zu arbeiten. Spaßeshalber habe ich mir mal die Ausgangssignale vom DE:generator und Shruthi über die FFT-Funktion im DigiScope angesehen und ermittelt, wie stark die PWM-Steuerspannung für die Filter- und VCA-Schaltung am Ausgang noch zu sehen sind. Die PWM-Frequenz liegt im DE:generator bei 31KHz und im Shruthi bei 39KHz. Für die Messung steht der Filter Cutoff Wert auf 127 (Filter inaktiv)Bild 1: DE:generator mit neue VCA-Schaltung und besserer Unterdrückung der PWM-FrequenzBild 2: DE:generator mit alter VCA-Schaltung. Man sieht hier deutlich die PWM-Frequenz von 31KHzBild 3: Shruthi Synthesizer mit 39KHz PWM
  6. rolfdegen

    Midi Latenz

    This is a pic of the midi latenz from DIY Synthesizer "Shruthi" and my "DE:generator" My Synthesizer Blog: http://mutable-instruments.net/forum/discussion/2504/shruthi-synthesizer-and-my-wave-1#Item_876 My Youtube Channel: https://www.youtube.com/user/rolfdegen1806/videos
  7. Stand der DingeAm VCA wird zur Zeit noch etwas geschraubt und gelötet. Mit meinem neuen Digi Scope hab ich mal ein paar Messungen gemacht. Es ging dabei um die Verbesserung der VCA-Hüllkurve und Midi-Latenz.Als Vergleichsobjekt musste mal wieder der kleine (aber feine) Shruthi Synthesizer herhalten.Alte VCA-Schaltung (gleiche wie im Shruthi)Neue VCA-Schaltung für DE:generatorDie Bauteilwerte müssen noch für eine Versorgungsspannung von +8V/-8V angepasst werdenVergleich Attack Phase neue und alte VCA-SchaltungPic1: yellow = new circuit, blue = old circuit, Attack value = 21Vergleich Attack Phase neue und alte VCA-SchaltungPic2: yellow = new circuit, blue = old circuit, Attack value = 0Vegleich der VCA-Hüllkurve zwischen DE:generator (gelb) und Shruthi (blau)Auf beiden Synths die gleiche Attack Value = 30Midi Latenz im Vergleich zwischen DE:generator und ShruthiShruthi have smallest 3.44 msecDE:generator have smallest 2.38 msecGruß Rolf
  8. 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 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, };
  9. Hallöchen.. da bin ich wieder 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 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 Oszillator Menü Mein neues DigiScope 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" Gruß Rolf
  10. My Synth blog in english: http://mutable-instruments.net/forum/discussion/2504/shruthi-synthesizer-and-my-wave-1#Item_835 My Synth blog in german: http://www.cczwei-forum.de/cc2/thread.php?postid=88038#post88038
  11. 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. Sound Beispiel 1.Teil Note trigger Waveform Oszillator 2.Teil: free run Waveform Oszillator Soundcloud: https://soundcloud.com/rolfdegen/osc-re-trigger Gruß Rolf
  12. 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 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 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 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 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
  13. Frontpannel from my DIY Synth "DE:GENERATOR"
  14. Projekt in german: http://www.cczwei-forum.de/cc2/thread.php?postid=87693#post87693 Project in english: http://mutable-instruments.net/forum/discussion/2504/shruthi-synthesizer-and-my-wave-1#Item_786
  15. 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 Hab mal ein paar Fotos aus dem Studio von NRW TV geschossen um zu "beweisen" das ich wirklich da war Fotos CC2 Studiobesuch
  16. Hallöchen.. Der "DE:GENERATOR" ist ready for sounding.. Der "DE:GENERATOR" 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 Gruß Rolf
  17. Hallo Thomasch Habe mir den Raspberry Pi 2 mit QuadCore und 1GHz gekauft. Mit externen DACs und Filtern wird das die Soundmaschine. Aber das ist noch Zukunft. Gruß Rolf
  18. rolfdegen

    2.Frontpanel

    This is a 2.Frontpanel for my DIY Synthesizer. Project in english: http://mutable-instruments.net/forum/discussion/2504/shruthi-synthesizer-and-my-wave-1#Item_773 Projekt in deutsch: http://www.cczwei-forum.de/cc2/thread.php?threadid=5878&threadview=0&hilight=&hilightuser=0&page=1
  19. 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 Ach her je.. bin schon ganz aufgeregt Hoffentlich funktioniert alles in der TV-Show problemlos und es gibt keinen Vorführeffekt. Ist ja schließlich der Prototyp. Wird schon gut gehen Gruß Rolf
  20. rolfdegen

    Degenerator

    Website english: http://mutable-instruments.net/forum/discussion/2504/shruthi-synthesizer-and-my-wave-1/p1 Website in german:
  21. 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. 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
×
×
  • Create New...