XFM FM-Synth auf FPGA-Basis

Summa

Summa

hate is always foolish…and love, is always wise...
Hatten wird den schon? Der Link wurde gestern die der DX7 Yahoogroup geposted:


XFM Synthesizer
XFM is a polyphonic, 32-voice, 6-operator FM synthesizer stereo module that you can build yourself.
Essentially, the module receives MIDI messages from a controller/sequencer, produces audio and delivers it via digital (SPDIF) and analog outputs.
The sound range XFM can create and its feature set have a very broad intersection with most pure-FM synthesizers of the past (Yamaha DX series, OPL chip series, TX81Z/802/816 modules, etc.).



Testing a prototype of XFM, an FPGA-based FM synthesizer module (the DX7 is used only as a MIDI controller).
XFM is running from an USB battery pack.

Complete Feature Set
  • 32-voice polyphonic
  • Polyphonic or Monophonic Legato modes
  • 6 operators per voice
  • Variable modulation algorithm
  • 8 waveforms per operator
  • A 6-segment Envelope Generator for each operator
  • 6-segment Pitch Envelope Generator
  • Per-voice LFO with Triangle, Square, Sine, S&H waveform
  • Per-operator adjustable LFO sensitivity for pitch and volume
  • Per-operator adjustable velocity tracking, keyboard tracking
  • Monophonic/Polyphonic portamento
  • Extensive MIDI implementation (pitch bend, mod wheel, aftertouch, sustain, breath ctl, foot ctl, volume, pan, etc.)
  • Auto-panner
  • Stereo Chorus
  • 256 programs memory
  • MIDI in, thru
  • 48kHz samplerate
  • Samplerate-grade modulations
  • Stereo, 24-bit SPDIF digital out
  • Stereo, 16-bit analog out
  • Battery friendly, low power operation
  • Fully programmable (connecting it to a PC via USB)
  • Extremely low latency (< 1ms)
 
Zuletzt bearbeitet:
Interessant.. das kleine Kästchen soll 32 Voices können?
Was mich etwas abschreckt ist -> Fully programmable (connecting it to a PC via USB)
 
Mich stört eher dass man nicht mehr als "Glöckchen" und Orgel Sounds zu hören bekommt, ich steh' ja eher auf heftigere Sachen Edit: Hab' gerade mal auf Youtube nachgefragt. Ich sehe gerade dass es eher sowas wie ein DIY/Open Source Projekt zu sein scheint. Hätte ich vielleicht wo anders posten sollen.
 
Zuletzt bearbeitet:
Also für $50 ist das wirklich nice.
Das teuerste an dem Teil wird vermutlich das Case... <lach>
Chorus und Panner auf den E-Pianos klingen im Zusammenspiel auch sehr sahnig finde ich.
Mir ist nur noch nicht so ganz klar, wie der damit seine Sounds programmiert hat, so ganz ohne Control Surface.
Ich vermute mal nicht über MIDI CC, denn in der Auflistung im Eröffnungspost sind nur Standard MIDI CCs aufgezählt.
Coole Sache auf jeden Fall, ich hoffe die entwickeln das noch weiter mit richtigem Control Surface und mehr Ausgängen.
 
Edit: Mit 'ner XML Tabelle, so wie's aussieht:

Programming
XFM is programmed by connecting it to a computer, and sending parameter messages via RS-232.
The complete parameter list is included in this spreadsheet (which can also be used to directly program the device: entering values will send the parameter set commands via serial USB).
 
Zuletzt bearbeitet:
Das hab ich ja auch noch nicht gesehn, das ein Synth direkt aus ner Tabellenverarbeitung programmiert wird.
Ich hoffe die Jungs geben sich damit nicht zufrieden und bauen da noch ein richtiges Control Surface.
Ein VST Plugin zum Steuern aus der DAW wär auch toll, am besten gleich mit Audiostream von der Hardware ins Plugin.
 
Hallo,
interessehalber habe ich das Ding mal aufgebaut.
Hut ab vor der Entwicklungsleistung. Aber es ist nicht wirklich einsetzbar.
Es sind vier oder fünf sehr einfache Sounds dabei, die zeigen das es geht. Allerdings sind störende Clicks beim Tastenanschlag zu hören.
Die Programmierung mit Excel hat bei mir nicht funktioniert. Deshalb habe ich ein Windows Programm erstellt, das in etwa das Gleiche tut. Gerade dabei, gleich noch versucht, einen Konverter von DX7 nach XFM einzubauen. Der funktioniert leider nicht 100%ig, weil beim XFM doch einiges anders ist, z.B. ist beim OP-Fixed Mode lediglich das Keyboard abgekoppelt, die niedrigste einstellbare Frequenz liegt bei 122Hz usw.
Ansonsten nette Idee.
 
Ja, fixed 122Hz ist fast schon nutzlos, weder für Waveshaping noch als LFO zu gebrauchen.
 
Kurios. Vor allem die Idee, es mit Excel zu programmieren. Erinnert mich schwer an das hier:

Das hatte ich damals so gemacht, um eine Piano-Rolle zu haben, die sich automatisch in das COE file übertragen lässt, welches man mit ISE in das FPGA programmieren lassen kann. Das erspart das umständliche Umsetzen von MIDI.

Ach ja, FM-Synth kann meiner auch:


Wären halt schlappe 4094 Stimmen polyphon bei 48kHz - Aber:

Der Knackpunkt, den Viele aber nicht so richtig verstanden zu haben scheinen: Wenn man die FM-Modulation nicht analytisch macht, also mit komplett mit ausformulierten Formeln über SIN (x + F(k)) und dann für jedes Sample die exakten Zeiten in float berechnet, dann reichen die 48kHz nicht aus. Um zeitdiskret zu arbeiten (und nur das macht bei FPGAs Sinn) und dann über die Operatoren hinweg präzise genug zu sein (weil die Frequenzen multipliziert werden und somit Oberwellen bilden) braucht es eine entsprechend höhere Frequenz. Ich arbeite daher bei dem FM-Synthesemodul in der PYRA mit 768kHz. Auch der DC läuft deshalb intern auf 768kHz.

Intern werden die Signale immer auf 150kHz ... 200kHz bandbegrenzt, bevor es in die nächste Stufe geht, damit keine Aliasfrequenzen entstehen, die nicht mehr abgebildet werden können. Man kann zeigen, dass das ausreicht, um selbst Rechtecksignale zu behandeln und sicherzustellen, dass bei Faltungen und ähnlichen Operationen praktisch Dasselbe heraus kommt, was auch in einem Analogsynth herausgekommen wäre (im Bezug auf das Hörbare unter 20kHz).
 
Zuletzt bearbeitet:
Hmm ein DX7 in einem FPGA wäre toll. also etwas das die MIDI Sysex und CC messages vom DX7 versteht und das man da direkt die Patches vom DX7 reinschieben kann ... Hat jemand ne Idee, ob es sowas gibt?
 
Kann man sicher leicht herstellen, wenn man eine Infrastruktur dafür schafft.

Der eine Schritt wäre, die FM-Struktur exakt so aufzuziehen, wie der DX7 es gemacht hat. Das ist mit meiner Matrix per Konfiguration direkt möglich.

Der zweite Schritt wäre, die messages zu implementieren und zuzuleiten. Das ist technisch weniger ein Problem, weil sich das MIDI jederzeit nachrüsten ließe und die Parameter an die richtige Stelle schieben kann. Allerdings kenne ich das persönlich zu wenig, um das zu leisten. Müsste man sich ansehen.

Der dritte und problematischste Schritt ist, die Parameter-Wirkung exakt mathematisch abzubilden. Welcher Wert im DX7 entspricht welchem Wert im neuen Synth? Daran scheitert regelmäßig jede Nachbildung von Synths durch neue HW und auch SW, wenn es nicht jemanden gibt, der das interne Wissen hat. Nehmen wir z.B. einen Modulationsparameter in MIDI von 0...127. Der kann bedeuten 0...100% oder -50% .... 50% und dann gibt es noch einen Faktor mit dem er auf die Bearbeitung wirkt. Ich übersetze z.B. viele Eingangswerte per dither oder enhance auf 1023, also 10 Bit, verwende aber manchmal nur die Werte von 0...999. Es wird also dezimal multipliziert. Intern werden manche Werte per "Verbiegung" auf log16 umgerechnet, laufen also degressiv oder progressiv von 0...65535 und wirken wie ein LOG-Poti. Da müsste ein Zusammenhang hergestellt werden. Kein Mensch weiß aber, wie der Hersteller die Regler an seinem Synth abgefragt, umgerechnet und eingesetzt hat. Daher wird es eine Trimm-Arbeit ohne Gleichen, bis das übereinstimmt - es sein denn, die Formel für die Wirkung / Synthese ist bekannt. Beim DY7 habe ich einiges an Material, aber das reicht definitiv noch nicht. Ich hatte mich ja schon vor über 10 Jahren - kurz nach der Waldorf-Inso - darum bemüht, z.B. die Microwave XT nachzubilden. Gekommen bin ich bis zur GUI, MIDI-Anbindung und der Wavetable-Synthese als Solche. Ich kann das grundsätzlich perfekt nachstellen, von der Bitauflösung bis zur Abtastfrequenz, aber mir fehlen die Infos über die genauen Einflüsse der Patches, die meisten Grundwellen und noch so einige Analogeffekte.

Hab es dann irgendwann aufgelassen.
 
Zuletzt bearbeitet:
Hmm ein DX7 in einem FPGA wäre toll. also etwas das die MIDI Sysex und CC messages vom DX7 versteht und das man da direkt die Patches vom DX7 reinschieben kann ... Hat jemand ne Idee, ob es sowas gibt?
Man kann ja zur Not auch Dexed aufm Raspberry laufen lassen. Dafür muss man das Rad auch nicht aufm FPGA neu erfinden, denn Dexed klingt 99,9% wie das Original.
 


News

Zurück
Oben