AVR synth

huhu...

ich bastel in letzter zeit an nem kleinen AVR digitalsynthesizer...
ein bischen info und soundbeispiele gibts hier... ist aber alles noch in arbeit...

gruß,
comboy
 
ah. ein ganz ähnliches filter benutze ich in einem softwareprojekt auch. :)
hast du das r2r netzwerk ordentlich gematcht bekommen? r2r wandler sind ja SEHR empfindlich gegenüber streuungen der widerstände.
 
naja - geht so...
also der sinus sieht schon aus wie ein sinus...
die LSBs sind halt kritisch... wenn man ein signal nur auf den untersten bits ausgibt wird es schon ungleichmässiger von den abstufungen.

aber da ich generell eh eher auf was lofi mässiges abziehl und ich keine lust mehr hatte ordentliche wandler zu suchen hab ich halt maln r2r gemacht.

klanglich bin ich bisher ganz zufrieden
 
da hab ich mich an das alte casio PD verfahren gehalten.
ich hab nen wavetable indem ein invertierter cosinus liegt
und der wird halt variabel ausgelesen
man kann dann den cosinus stufenlos zu sägezahn oder Pulswelle verziehen...
so funktioniert dann auch das anti aliasing auf dem kleinen chip, weil für mehrere wavetables und oversampling reicht einfach die CPU power nicht aus

bei wikipedia stehts ganz gut erklärt[/url]
 
ah. da hab ich bei meiner oszillatorimplementierung nicht dran gedacht, damals :) (hab straight forward funktionen implementiert, allerdings in hochsprache auf nem dsp).

und das läuft alles auf einem atmega644? schick :)
 
naja, auf ner richtigen CPU würd ich auch nen anderen ansatz wählen, aber bei den popligen 20Mhz vom Atmega muss man halt knausern.

gäbe auch wesentlich bessere filtermodelle ;-)

aber ja, ich bin selbst überrascht was alles auf so ner kleinen gurke läuft. man beachte das der output 16Bit bei 39kHz ist...

was hast du denn entwickelt? und auf was für einem DSP?
 
nen polyphonen subtraktiven, auf einem adsp-21369. alles sehr einfach gehalten ;-)
durchaus verbesserungswürdig. leider nicht open source, ist ein uniprojekt gewesen.

edit: mit besseren filtermodellen hatte ich übrigens meine probleme mit der rechengenauigkeit :-/
 
haesslich schrieb:
edit: mit besseren filtermodellen hatte ich übrigens meine probleme mit der rechengenauigkeit :-/

hmmm aber der adsp-21369 ist doch 32-bit float?
das ist doch die gleiche genauigkeit wie man sie auch bei nativen lösungen hat? wo gabs denn da probleme?
 
32bit float ist nicht SO viel - in meinem matlab modell lief das filter nämlich problemlos. nur läuft matlab auch mit deutlich höherer rechengenauigkeit ;-)
das problem liegt, denke ich, in der filterstruktur. (ich habe es nicht näher analysiert):
ich hab mich anfangs recht genau an das stilson&smith paper gehalten (http://citeseer.ist.psu.edu/article/stilson96analyzing.html).
quick&dirty kommt dort eine filterstruktur raus, die sich einfach in direktform II implementieren lässt. aber mit steigender zahl der pole (und das ist halt n 4 pol filter...) wird die bei sehr kleinen koeffizienten halt deutlich ungenau - auch in 32bit float.
und blöderweise lässt sich der geschlossene ausdruck der übertragungsfunktion des filters nicht so einfach in eine andere form bringen, so dass man eine bessere implementierung hätte machen können.
ich schätze, die "großen firmen" (und dutzende hobbyprogrammierer...) halten sich halt nicht zu genau an dieses stilson&smith paper ;-)
von filterdesign habe ich nicht SO viel ahnung, und ich hatte keine zeit mehr, was anderes zu probieren. also hab ich ein anderes filter genommen.
das filter, was du implementiert hast, ist ja (ebenso wie das, was ich letztlich genommen habe) "nur" ein 2pol filter, und ist somit eh unproblematischer.

ein alternative wäre gewesen, deutlich die blockgröße zu reduzieren (ich führe fast alle berechnungen auf blöcken von 256 samples durch - die berechnung der filterkoeffizienten ist aber samplegenau), und dann meinetwegen alle 32 oder 64 samples das filter zu berechnen, indem ich die koeffizienten in die (in der analog devices adsp-C-bibliothek) IIR-funktion eingebe. denn diese ist in einer effizienten filterstruktur implementiert.
dann hätte ich aber die samplegenaue berechnung der koeffizienten verspielt, deswegen zum "ausgleich" das verkleinern der blockgröße. dann hätte ich mich mit einigen details des dsps herumschlagen müssen (speicherverwaltung etc.) und zusätzlich noch etwas überlegen zur glättung der blockübergänge (die filterkoeffizienten könnten sich dann ja sprunghaft ändern) etc.
also doch lieber ein "einfacheres" filter ;-)
 
sooo - nochn bischen rumoptimiert, und tatsächlich noch platz für einen sample kanal auf dem soundchip gefunden. jetzt muss ich nur noch den Sampletransfer über USB fertig machen (auf nen externen 4MBit flash), dann sollte der soundchip fast fertig sein. Von PC->Controllchip klappt schon und lässt freudig ein paar leuchtidioten flackern

also gehts jetzt dann an frontplatte und sequencer...
ich hab mal mein design ein bischen auf vordermann gebracht und brauche meinungen. ist jetzt nur ne skizze...
groove2.gif

sequencer teil unten ist mir erstmal egal, da hab ich noch nicht wirklich ausgiebig drüber nachgedacht. Weiß auch nicht ob ich wirklich RGB LEDs brauch, obwohls schon flashig wär! auch die hässliche polizei farbkombination wird sich noch ändern ;-)

mir gehts jetzt eher um die vorhandenen potis und knöpfe. fehlt noch was?
von der anordnung her grob in ordnung?
was könnt noch in das loch rechts unten?

das konzept sieht in etwa so aus:
soll ja primär auf chipmusik ausgelegt sein, also so ne art hardware tracker programm ;-) man hat 3 synth parts (2x sine/saw/PWM, 1x FM Paar), die jeweils unabhängig voneinander spielen, einen noise part (für drums und fx) und einen sample part. alle parts lassen sich dann unten über die sequencerspuren programmieren.

man kann den jeweils aktiven part zum editieren über die knöpfe unten wählen.

der HARMONIC regler stellt bei den saw/rec OSCs die obertonanzahl und beim fm OSC den mod-amount ein.

einen resonanten tiefpass gibt es, durch den man beliebige kanäle schicken kann.

noise und sample haben nur nen Decay EG.

die 3 synth parts haben jeweils einen LFO und 2 ADSR EGs. der erste ist fest auf die lautstärke verdrahtet, den zweiten kann man dann auf die angegebenen ziele leiten.

hab ich was vergessen?

ach ja - nen schmissigen namen brauch ich für die kiste noch. AVR Groovebox ist doof!
 
haesslich schrieb:
(...) aber mit steigender zahl der pole (und das ist halt n 4 pol filter...) wird die bei sehr kleinen koeffizienten halt deutlich ungenau - auch in 32bit float.(...)

ja da hast du wohl recht. Ich glaub generell war die faustregel bei digitalen filtern: nie mehr als 2 Pole direkt in eine stufe integrieren, weil es dann eben zu instabilen filtern wegen ungenauigkeit kommen kann. dann den 4 Pol lieber in zwei 2-Pole transformieren... aber beim filterdesign muss ich auch noch vieeeeeel lernen.
 
nachdem ich viel zu viel zeit ergebnislos nach einem schönen gehäuse gesucht hab und mir die schaeffer frontplatten zu teuer sind, hab ich das geld jetzt lieber in neues werkzeug investiert und bau mir das alughäuse selbst:

case.jpg


und hier schon die ersten beiden sequencer buttons
firstButt.jpg


sieht gleich viel edler aus als so klobige holzkästen :D
 


News

Zurück
Oben