Algorithmus für einen digitalen Kompressor

Wo kann ich es eigentlich laden? :)
Aktuell noch garnicht.
Die alte Version (V0.1, noch mit der standard Schwarz/Weiß GUI) hattee ich auch nur per PN an ein paar User zum testen geschickt.

So Far...
Laguna
 
wir hier kriegen das ja sicherlich umsonst, nicht wahr? ;)
 
Wenn du nett fragst... ;)

So Far...
Laguna
 
  • Gefällt mir
Reaktionen: 1 Benutzer
Soll nicht böse klingen, aber wenn du es verkaufen willst, dann musst du wohl oder übel nochmal an die GUI ran. Die ist etwas altbacken und wird bei vielen den Klang beeinflussen. :redface: ;)
 
Soll nicht böse klingen, aber wenn du es verkaufen willst, dann musst du wohl oder übel nochmal an die GUI ran. Die ist etwas altbacken und wird bei vielen den Klang beeinflussen. :redface: ;)
Klingt nicht böse. Ist auch die erste GUI, die ich entwickel. Für Vorschläge bin ich gerne offen. :)

So Far...
Laguna
 
  • Gefällt mir
Reaktionen: 1 Benutzer
Ich bin leider absolut untalentiert, was Grafik angeht. Ich kann dir aber sagen, ob es gut aussieht oder nicht und ob ich dafür bezahlen würde. :D
 
  • Gefällt mir
Reaktionen: 2 Benutzer
Ich bin leider absolut untalentiert, was Grafik angeht. Ich kann dir aber sagen, ob es gut aussieht oder nicht und ob ich dafür bezahlen würde. :D
Dann sind wir schon zu zweit. :D
 
<----- bietet sich auch gern als Tester an.

Ohne ihn probiert zu haben kann ich natürlich wenig konkretes dazu sagen, aber die Dinge die du geschrieben has lesen sich schonmal spannend.
 
Ich habe nochmal ein wenig zu den denormalized floats recherchiert. Eine gängige Methode, dieses numerische Problem zu umgehen sind die folgenden Zeilen Code:

double denormal = 1e-12;
value += denormal;
value -= denormal;


Ich habe das mal vorsichtshalber bei allen betroffenen Variablen hinzugefügt.

So Far...
Laguna
 
Hm, das repariert eine zu kleine Double-Zahl und setzt sie auf 0, aber es verhindert nicht, dass beim Multiplizieren ein zu kleiner Wert entstehen kann und damit die Exception auftritt und die Performance einbricht. Das Beimischen von Rauschen in ähnlichem Wertebereich wie Dein 'denormal' verhindert das von vorneherein.

Banjo
 
Hi,

So und nochmal ein Update zur GUI. Das ist sicherlich auch noch nicht der finale (Ent-)Wurf. Es wird in kleinen Schritten gearbeitet.
gui3.png

Überarbeitet wurde vor allem die generelle Farbwahl und die Buttons. Außerdem ein ganzer Haufen Kleinigkeiten.

Auch bei den Features hat sich einiges getan. Ich habe endlich meinen Dual-Mono/Stereo-Bug gefixed. Manchmal zweifel ich echt an mir selber. :( Zu meiner Verteidigung muss man sagen, dass ich die letzten zwei Jahre immer mit dem Nörgel-Compiler GCC gearbeitet habe. Der Visual Studio Compiler (mit dem ich jetzt arbeite) vergibt deutlich mehr und warnt nicht bei so vielen Dingen. Das hat mich ordentlich auf die Schnauze fliegen lassen.
[Fach-Geblubber]Funktionspointer sind ja im Grunde blos Speicheradressen. Wenn man jetzt hinter der Funktion die Klammern vergisst wird die halt nicht aufgerufen, sondern die Speicheradresse zurückgegeben. Das ist wie gesagt eine Zahl. Zahlen kann man auf Bool casten. Schön blöd, dass dann der Stereo-Schalter in der GUI natürlich fröhlich die Farbe wechselt, aber nichts passiert. meeeeeeh, Ich bin unfähig & böse Welt & überhaupt. Für heut ist Schluss. :D


Achso ja:
Bei meiner Recherche bin ich auf einige wissenschaftliche Veröffentlichungen gestoßen, die das Thema Kompression wissenschaftliche fundiert und gleichzeitig verständlich anpacken. Die nicht direkt verlinkten Veröffentlichungen findet man auch im Netz als PDF zum Download.
Gerade das "Digital Dynamic Range Compressor - Tutorial and Analysis" kann ich jedem Interessenten nur wärmstens empfehlen. Top! :great:

@Banjo : Wenn man die paar Zeilen Code konsequent auf alle Werte anwendet dürfte es nach meinem Verständnis zu keinen Exceptions mehr kommen. "normalen" Zahlenwerten passiert durch den Code nichts. Denormalized floats werden entsprechend behandelt und (wie du selbst sagst) auf 0 gesetzt. Finde ich persönlich sauberer als Rauschen zu addieren.
Ich bin da aber sicherlich auch kein Experte und falls du (oder jemand sonst) ein Beispiel hat, wo das nicht funktioniert, immer her damit! :)

So Far...
Laguna
 
Grund: Persönliche Unzulänglichkeit zum Text hinzugefügt
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: 1 Benutzer
Mal grade noch ne Idee:
Diese Graphen die für Übergangsfunktion wie auch im Meldaplugin sind ja durchaus verbreitet. Was ich mich immer frage ist, warum der Levelindikator nur auf der Line hoch und runter fährt. Wenn ich gerade nicht total nen Knoten im Hirn habe müsste man hier doch auch sehr schön Attack und Release Zeiten mit visualisieren können, und ich frage mich immer warum das noch Keiner gemacht hat. Evtl geht es ja auch gar nicht, aber ich stelle mir das so ähnlich vor wie ein Anzeige zur Phasenkorellation. :D
phase_meter.png

Ich hab da mal ne Skizze auf Basis des Pro-C gemacht.

visualize attack.png

Wenn das funktioniert wie ich mir das vorstelle könnte man auch schön die Auswirkung deines Pre-Attack-Parameters ablesen, weil das ja dann entsprechend noch ein Stück gerade aus und dann erst in die Kompression gehen sollte.

Falls ich hier gerade völlig auf dem Holzweg sein sollte schreit jetzt jemand schnell "Halt stop".
Ich wollte das evtl. selbst mal ausprobieren, hab mich aber aufgrund mangelnder VST Softwarekenntnisse noch nicht rangewagt.

Vielleicht ist das ja was für die Version 2.1 ;-)
 
Zuletzt bearbeitet:
Der Visual Studio Compiler (mit dem ich jetzt arbeite) vergibt deutlich mehr und warnt nicht bei so vielen Dingen.

Einen C-Compiler der Funktions-Pointer ohne Warning implizit auf nen Bool typecasten läßt, asoziiere ich nur mit dem Wort "Schrott." :-S Ich kann nur für Dich hoffen daß man die Reizschwelle deutlich hochschrauben kann, sonst ist C einfach nur gemeingefährlich. :)
 
ich denke eher, das ist klassisch: eine der Geschichten, für die man C früher schätzte :D
das 'gemeingefährlich' würde ich eher auf Entwickler beziehen, die so etwas nicht im Griff haben
nicht dass ich das jetzt Laguna anlasten würde...
er hat auf diese Weise immerhin eine Erfahrung gemacht - und davon profitiert er
(nicht davon, dass ihm ein Parser das Denken abnimmt)

bei den 'Zahlen' wird er die sicher auch (noch) machen
ich bin definitiv kein DSP Codierer, aber bei Dynamikfunktionen wüsste ich nichts, was auch nur ansatzweise Fliesskommazahlen erfordert
ergo codiert man so etwas besser nicht... nur weil's vermeintlich bequem wirkt ;)

cheers, Tom
 
Mich würde am Ende einfach mal der Code interessieren. Also wie das alles aufgebaut ist, hinter welchem Knopf und Regler welche Funktionen stehen und so. Könnte man auch bei Lust und Laune als Workshop aufziehen.
Wieviel Zeit investierst du da täglich, @Laguna ?
 
Hallo Laguna,

welchen Warning-Level verwendest Du denn? Ich arbeite bei Visual Studio prinzipiell mit Warning Level 4 und mit Warning=Error. Im Zweifelsfall disable ich dann eher gezielt einzelne Warnungen, zum Beispiel wenn Funktionsparameter nicht verwendet werden, was halt doch in Frameworks und APIs manchmal vorkommt, weil man sie schlicht nicht braucht. Das mit dem Funktion-Pointer hab ich aber noch nicht probiert.

Allerdings muss ich mich auch fragen, wofür Du da einen Function-Pointer brauchst. Ich spekulier mal, dass Du abhängig von Stereo oder Dual Mono verschiedene Funktionen anspringst. Das ist in C++ eigentlich ein Fall für verschiedene abgeleitete Klassen, dann braucht man keinen Function-Pointer. Und wenn man bei einem normalen Member-Funktionsaufruf die Klammern vergisst, kriegt man defintiv eine Warnung vom Compiler (zumindest in Level 4).

Edit: Den Funktionspointer mit vergessenen Klammern hab ich grad probiert, bekomme da in Visual Studio 2015 ab Warning Level 3 aufwärts eine Warnung.

Ich versuch die Tage mal ein simples Beispiel in Sachen Denormalized Floating Point zu basteln und probier Deine Methode.

Telefunky: Nachdem Plugins ihre Daten prinzipiell als Fließkommazahlen bekommen, würde eine Wandlung nach Festkomma zusätzliche Performance erfordern. Zudem gibt es leider in Hochsprachen wie C oder C++ keine Möglichkeit, beim Multiplizieren wie auf einem DSP zu arbeiten, also dass ein Festkommafaktor als Zahl zwischen 0 und 1 zu verstehen ist. Da müsste man dann schon in Assembler arbeiten, was doch recht mühsam, ist und bei einem performanceunkritischen Kompressor eigentlich nicht nötig ist. Und einen Nachteil hat eine Fließkomma-Implementation auch nicht. Wenn man alles richtig macht:)

Banjo
 
Zuletzt bearbeitet:
Wenn das funktioniert wie ich mir das vorstelle

Hab gerade fasziniert deine Zeichnung betrachtet und finde die Idee sehr spannend.
Man müsste sich aber erst mal überlegen, nach welchem Prinzip die Kurve links und rechts driftet, der Pegel selbst hat ja auf der Anzeige "nur" ein Oben und Unten.

Pre-Attack-Parameters

Als Quereinsteiger in diesen Thread muss ich jetzt mal fragen, was dieses Pre-Attack eigentlich macht.
 
Als Quereinsteiger in diesen Thread muss ich jetzt mal fragen, was dieses Pre-Attack eigentlich mach

Ich hab das als Verzögerung der Attack verstanden, sprich die Attack springt etwas später an und die erste Transiente ist schon unbeschädigt durch den Kompressor durchgeschlupft.

Aber genau wissen tut das nur Laguna:)

Banjo
 
Telefunky: Nachdem Plugins ihre Daten prinzipiell als Fließkommazahlen bekommen, würde eine Wandlung nach Festkomma zusätzliche Performance erfordern.
der Hinweis zielte auf ein schlichtes 'Wissen was man tut' statt einfach zum nächstliegenden 'workaround' zu greifen
dazu zählt auch die Auswahl des passenden Zahlenformats
unabhängig von der konkreten Anwendung dürfte eine (mal hypothetisch gesetzte) Eingangs/Ausgangsformat-Wandlung performanter als die permante Behandlung von Einzelwerten sein (falls ich es nicht missverstanden habe)

cheers, Tom
 
unabhängig von der konkreten Anwendung dürfte eine (mal hypothetisch gesetzte) Eingangs/Ausgangsformat-Wandlung performanter als die permante Behandlung von Einzelwerten sein (falls ich es nicht missverstanden habe)

Das stimmt schon, allerdings bin ich von der Behandlung der Einzelwerte wie von Laguna gepostet nicht überzeugt. Einmal Rauschen (weit unterhalb von -200dB fullscale reicht völlig aus) addieren geht jedenfalls schnell.

Bleibt eben noch, dass man mit Festkomma praktisch nur in Assembler sinnvoll arbeiten kann, nicht in einer Hochsprache.

Banjo
 
  • Gefällt mir
Reaktionen: 1 Benutzer

Ähnliche Themen


Unser weiteres Online-Angebot:
Bassic.de · Deejayforum.de · Sequencer.de · Clavio.de · Guitarworld.de · Recording.de

Musiker-Board Logo
Zurück
Oben