Jump to content

bitPad: Ein DIY pic32 Wavetable Synthesizer


BoH_Havoc .
 Share

Recommended Posts

Hi,

Ich wollte hier mal kurz mein Projekt vorstellen, da ich inzwischen auf ein paar Probleme gestoßen bin und nicht wirklich weiter komme:

Konkret handelt es sich um einen Wavetable Synthesizer basierend auf einem pic32. (Anfänglich waren es nur ein paar Square/Saw Wave Oscillatoren mit regelbarer Frequenz und Phasenverschiebung, deshalb auch das "bit" im Namen "bitPad". Aber irgendwann war mir das nicht mehr genug also mussten wavetables her ;) ).

Als Devboard nutze ich ein chipKIT uno32/max32.

Sound wird momentan noch per PWM ausgegeben, ich nutze noch kein hardware DAC.

Features hat das Ding momentan diese hier:

- 16 Kanäle

- maximal 64 Stimmen gleichzeitig

- 128 Programme (hier würde auch mehr gehen, aber midi kann ja eh "nur" auf 128 zugreifen...zumindest soweit ich weis(?) )

- 512 Samples pro Wavetable (können auch 1024, 2048 oder 4096 sein, aber so krass aufgelöste single-cycle-waveforms hab ich eh nicht, also belasse ich es erstmal bei 512)

- ADSR Hüllkurven mit 8 Samples pro Abschnitt (also 4*8=32 ingesamt). Die Samples werden, in Abhängigkeit einer vom Nutzer festgelegten Zeit, linear interpoliert

- Midi In/Out

- Touchpanel mit dem "per Hand" die ADSR Kurven angepasst werden können. (könnte in Zukunft auch zum "malen" von wavetables genutzt werden)

- OLED Display

- Ein paar Knöpfe sowie ein "ich-hab-kein-Geld" LM386 Verstärker :D

Aktuelle Kosten des Ganzen (bei Neuanschafung. OHNE Display): ~25€

Für die Zukunft geplant:

- Bandpass, Ringmodulator, Echo, Reverb, etc, pp (mal schauen was so geht ohne große extra hardware)

- SD/MMC Karteninterface zum Speichern/Laden von Wavetables, Envelopes und Programmen

- VGA Ausgang zum Ansteuern eines größeren Bildschirms (in Verbindung mit einem größeren Touchpanel (Hab schon ein 10.1" hier rumliegen) )

Mometan habe ich folgende(s) Problem(e):

1)

Ich würde gerne statt PWM das Signal über einen gescheiten DAC ausgeben. Aber ich habe absolut keine Ahnung welchen ich da nehmen sollte. Recherchen im Internet haben nur verwirrt statt aufgeklärt. 12-16bit Auflösung wären schön...mehr wäre natürlich noch toller, wird aber glaube ich nicht machbar sein. Ansprechen würde ich das ganze gerne über I²C oder SPI (da wird die Auswahl schon recht dünn). Hat da jemand Vorschläge/Erfahrungen, die er/sie hier preisgeben mag? :)

2)

Ich bin zur Zeit dabei, meine Programme mit General Midi konformen Instrumenten zu füllen (nur so zum Spass). Ich klapper google jetzt schon seit Tagen ab nach Hüllkurven von Instrumenten, finde aber immer nur Beschreibungen was eine Hüllkurve ist etc. . Was ich gerne hätte, wären konkrete DATEN womit ich meine Programme füttern kann. Ich habe angefangen von Hand ein bisschen "rumzufrickeln", aber das klingt meist mehr schlecht als Recht (wird Zeit, dass ich die Kurven auf ner SD Karte Speichern kann, momentan ist immer alles weg bei einem reset. Oder ich muss von Hand die Arrays füllen und jedesmal neu kompilieren und brennen, dass ist also auch nicht so eine tolle Lösung). Ich schätze mir fehlt einfach der richtige Suchbegriff. Hatte auch ewig nach wavetables gesucht und dann nach vielen Tagen den Begriff single cylce waveform gefunden, wodurch ich dann endlich an konkrete Daten für wavetables gekommen bin (in Verbindung mit einem kleinen selbstgeschriebenen script, was mir die .wav dateien als 512er wavetables ausgibt). Gibt es irgendwo eine Tabelle oder ähnliches wo ADSR Daten hinterlegt sind? Ich wäre auch mit Envelopes als .wav zufrieden (falls es sowas überhaupt gibt).

Abschließend möchte ich noch anmerken, dass dies mein erster selbstentwickelterzusammengedengelter Synthesizer überhaupt ist (mal abgesehen von ein paar 555/4017 Spielereien). Ich hab zwar auch noch eine halb fertige MB-6582 hier rumliegen (und zusätzlich Teile für eine Midibox FM), aber da ich nicht so recht verstehe, was die einzelnen Knöpfe und Regler auf dem Frontpanel eigentlich machen, geschweige denn wie das ganze intern funktioniert (oder überhaupt Sound im Allgemeinen), wollte ich selbst mal was in der Richtung entwickeln um zu verstehen wie es funktioniert. Sobald mein selbstbau Synthesizer fertig ist bzw. ich verstanden habe, was wie funktioniert, werde ich dann auch endlich mal ein Frontpanel für die MB-6582 erstellen (wenn meine löchrige Geldbörse es denn zulässt) und mir eine Midibox FM bauen. Ich mag einfach den Sound aus den alten Chips :)

Hier noch ein kurzer Test mit meinem "bitPad", um zu zeigen, dass es tatsächlich existiert :) .

http://soundcloud.com/boh_havoc/bitpad-v0-3-nuvole-bianche

In einem weiteren Test hab ich das Teil einfach mal an ein USB-Midi Interface gehängt und über Dosbox Midi Daten aus dem Spiel "Wing Commander: Privateer" rausgehauen ;)

http://soundcloud.com/boh_havoc/bitpad-v0-3-privateer-mixed

Bin für jede Hilfe/Feedback dankbar und hoffe der eine oder andere findet das Projekt zumindest ein klein bisschen interessant :)

Hier noch ein "tolles" Bild mit einer "tollen" Handykamera

13062012335.jpg

Edited by BoH_Havoc .
Link to comment
Share on other sites

zu 1) Schau mal auf ucapps.de auf die I2S Dac Modul Seite: http://ucapps.de/mbhp_i2s.html

Da gibt's Infos zu TDA1543 (wird nicht mehr hergestellt, gibt's aber noch haufenweise bei eBay), PCM1725 (wird nicht mehr hergestellt, gibt's aber noch haufenweise bei eBay) oder PCM1754

zu 2) Hab ich noch nirgends gesehen. Wenn ich tatsächlich mal vorberechnete Daten nehme, dann generier ich die üblicherweise in Excel (Accumulatoren, Sinuskurven, etc) oder schreib mir ein kleines Programm, das ich mit ein paar Parametern befüllen kann und bei dem dann hinten eine .h rausfällt. Ich versteh allerdings auch nicht so ganz wozu Du fertige Daten für eine Hüllkurve willst - eigentlich brauchst Du da doch nur eine log-Tabelle, wenn's nicht linear sein soll, oder was hast Du vor?

Link to comment
Share on other sites

Ein ambitioniertes Projekt, bleibt an der Sache dran! :)

Ich denke, dass Du mit "ADSR Daten" generell die Soundparameter meinst, also nicht nur die Huellkurve fuer die Lautstaerke, sondern auch Wellenformen, Filtereinstellungen (falls vorhanden), Filterhuellkurve, LFOs fuer Vibrato usw.

Die sind zunaechst einmal sehr synth-spezifisch. Ich behaupte mal, dass Du eine GM kompatible Bank mit einem subtraktiven Synth nur Ansatzweise hinbekommen wirst.

Mit einem FM Synth geht das schon eher (und mit einem samplebasierten Synth natuerlich am besten)

Vor Urzeiten habe ich ein Skript geschrieben, welches das .o3 Format (das mal im Linux-Soundkarten Treiber verwendet wurde, evtl. immer noch) in ein lesbares Format umwandelt, und darueber hinaus auch in MBFM Patches.

-> es befindet sich hier: http://svnmios.midibox.org/listing.php?repname=svn.mios&path=%2Ftrunk%2Fapps%2Fsynthesizers%2Fmidibox_fm_v1%2Futils%2Fpatches%2F

Gruss, Thorsten.

Link to comment
Share on other sites

  • 2 weeks later...

Bevor es hier weitergeht:

Irgendwas stimmt mit der Registrierung nicht so richtig. Beim ersten mal hab ich mich mit "BoH_Havoc" registriert und mir sollte eine E-Mail mit Bestätigungscode geschickt werden. Diese kam nie an.

Danach hab ich mich dann halt notgedrungen über Facebook einen Account eröffnet, diesmal als "BoH_Havoc ." . Der geht nun auch nicht mehr.

Jetzt hab ich wieder einen Account mit dem SELBEN Facebook Account erstellt und wieder als "BoH_Havoc". Momentan geht er noch, aber wer weis wie lange noch... was läuft da schief ? :)

Und jetzt wieder on Topic:

zu 1) Schau mal auf ucapps.de auf die I2S Dac Modul Seite: http://ucapps.de/mbhp_i2s.html

Da gibt's Infos zu TDA1543 (wird nicht mehr hergestellt, gibt's aber noch haufenweise bei eBay), PCM1725 (wird nicht mehr hergestellt, gibt's aber noch haufenweise bei eBay) oder PCM1754

Vielen Dank für den Hinweis auf das I2S Modul, schau ich mir die Tage mal genauer an. Die beiden Chips die nicht mehr hergestellt werden, würde ich egtl. nur ungern nutzen wollen. Den PCM1754 gibts leider weder bei farnell noch bei reichelt. Hab ihn bisher nur bei mouser gefunden und da sind die Versandkosten ziemlich gepfeffert.

User aus dem Arduino Forum haben den MCP4921/4922 ("nur" 12 bit, dafür aber billig und leicht zu beschaffen (~1,50€ bei reichelt)) und LTC2642CMS (16bit, relativ teuer (~16€ bei farnell)) vorgeschlagen. Ich hab mir jetzt erstmal den MCP4922 bestellt da ich eh ein paar Sachen von reichelt gebraucht habe. Für die ersten Gehversuche wird es wohl erstmal reichen.

Und sobald ich mal wieder was bei farnell oder mouser bestelle besorg ich mir dann die dickeren DACs. :)

zu 2) Hab ich noch nirgends gesehen. Wenn ich tatsächlich mal vorberechnete Daten nehme, dann generier ich die üblicherweise in Excel (Accumulatoren, Sinuskurven, etc) oder schreib mir ein kleines Programm, das ich mit ein paar Parametern befüllen kann und bei dem dann hinten eine .h rausfällt. Ich versteh allerdings auch nicht so ganz wozu Du fertige Daten für eine Hüllkurve willst - eigentlich brauchst Du da doch nur eine log-Tabelle, wenn's nicht linear sein soll, oder was hast Du vor?

Ich denke, dass Du mit "ADSR Daten" generell die Soundparameter meinst, also nicht nur die Huellkurve fuer die Lautstaerke, sondern auch Wellenformen, Filtereinstellungen (falls vorhanden), Filterhuellkurve, LFOs fuer Vibrato usw.

Die sind zunaechst einmal sehr synth-spezifisch. Ich behaupte mal, dass Du eine GM kompatible Bank mit einem subtraktiven Synth nur Ansatzweise hinbekommen wirst.

Mit einem FM Synth geht das schon eher (und mit einem samplebasierten Synth natuerlich am besten)

Vor Urzeiten habe ich ein Skript geschrieben, welches das .o3 Format (das mal im Linux-Soundkarten Treiber verwendet wurde, evtl. immer noch) in ein lesbares Format umwandelt, und darueber hinaus auch in MBFM Patches.

-> es befindet sich hier: http://svnmios.midib...ls%2Fpatches%2F

Jetzt wo ihr beiden das so umschrieben habt ziehe ich meine Frage mal zurück, da sie keinen Sinn ergibt. :) Ich war irgendwie davon ausgegangen, dass es standartisierte Daten für Hüllkurven und dergleichen gibt (zb Dauer der 4 Abschnitte in einer ADSR Kurve). Bei näherer Überlegung macht das aber wirklich keinen Sinn, da jeder synth ja (wie erwähnt) eigene Einstellungsmöglichkeiten bietet.

In das Tool von TK schau ich aber trotzdem mal rein, vielleicht hilft es weiter :)

Zur Erzeugung der Wavetables hab ich mir übrigens ein kleines Program in Synthmaker erstellt. Damit kann ich entweder verschiedene Wellenformen erzeugen und mixen, oder gleich .wav dateien in wavetables umwandeln, komplett mit einstellbarem maximalpegel, größe des wavetablearrays, etc.

Mit einem FM Synth geht das schon eher (und mit einem samplebasierten Synth natuerlich am besten)

Gesagt getan :)

Hab mal eine einfache FM Synthese eingebaut (vorallem das hier: InsideSynthesis04: FM Synthesis war sehr hilfreich bei der Implementierung). Das ganze lässt sich pro Program ein und auschalten, man muss also kein FM nutzen wenn man nicht will.

Abschließend ein kleines Beispiel der FM Synthese auf dem bitPad (Gescheite Modulator Volume & Pitch Envelopes fehlen noch... momentan emuliert meine Hand an zwei Potis die Envelopes ;) )

http://soundcloud.com/boh_havoc/bitpad-v0-35-tyrian-fm-ride

Edited by BoH_Havoc
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...