Erste Core Schritte Level-Kompensator Bau

Fragen und Antworten, Beispiele

Moderator: herw

Antworten
PrinzThomas
meister
Beiträge: 158
Registriert: 10. September 2006, 18:23

Erste Core Schritte Level-Kompensator Bau

Beitrag von PrinzThomas »

Hallo,

ich bin ganz frisch in die Core Welt eingetaucht, um Events besser und kreativer verarbeiten zu können.
Auf Audioebene bevorzuge ich immer noch mit Primary zu arbeiten solange es dort lösbar ist.

Als erstes Projekt hattte ich mich ja bereits an einen Router gemacht und soweit auch - nach einigen Anfangsschwierigkeiten - mit Hilfe von herw gelöst.
Mein zweites Vorhaben war da schon komplizierter.

Ich möchte vier Oscis in einem Mix in der Lautstärke regeln.
Aufgabe ist es, dass sich die Lautstärken der einzelnen Oscis beim Mixing so beeinflußen, dass das Ausgangslevel immer gleichgroß ist.
Allerdings immer nur so groß wie das größte eingestellte Level bei einem der vier Eingänge.

Folgende Überlegung habe ich dazu angestellt:
Zuerst musste ich jeden Eingang mit jedem vergleichen, um den größten Levelwert der einzelnen Eingänge zu ermitteln.
Ist der größte Eingang ermittelt wird der aktuelle Levelwert zu einem Addierer weitergeleitet ansonsten wird null geschickt.
Damit wird immer nur der höchste Levelwert in den Addierer geschickt.
Um nun prozentual das Gesamtlevel runterzusetzen musste ich das höchste Level noch durch das Gesamtlevel aller vier Eingangswerte teilen.

Es ergaben sich leider noch 2 Probleme:

1. Wenn 2 Eingänge den gleichen Wert haben und zugleich auch das höchste Level beschreiben werden beide Werte an den Addierer geschickt, was beim Regeln einen kurzen Lautstärkesprung erwirkte.
Das habe ich gefixt in dem ich versucht habe Gleichheit so gut wie auszuschließen.
Als Lösung dafür habe ich zu jedem Eingang einfach 0.0001.... 0.0002 ... usw. dazu addiert und am Ende wieder abgezogen.
Es ist realtiv unwahrscheinlich, dass es dann noch zur Gleichheit kommt.

2. Wenn alle Eingangswerte auf null gedreht waren ergab es beim ermitteln der Gesamtlautstärke am Ende der Kette ein Division by Zero Fehler, was ja auch logisch ist, wenn mann 0 durch 0 teilt ^^
Es mussste also noch ein Fix her, der bei null aller addierten Eingänge einfach eine 1 rausschickt und 0 durch 1 ergibt 0 und keinen Fehler. :)

Den Level Compensator - wie ich ihn nenne - habe ich mal in einem kleinen Osci-Mixer Beispiel angehangen um mal eure Meinung dazu zu hören, ob und was man noch alles verbessern kann.
Sicherlich sind viele Sachen umständlicher als nötig - Kritik ist also angebracht!

Übrigens: die hörbare Levelkompensation ist wieder ein anderes Thema.
Ein Rechteck klingt nunmal deutlich lauter als ein Sinus.
Meine Lösung bezieht sich hier nur auf mathematische Bedingungen.

Ich würde mich über den ein oder anderen Kommentar freuen. :)
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
PrinzThomas
meister
Beiträge: 158
Registriert: 10. September 2006, 18:23

Re: Erste Core Schritte Level-Kompensator Bau

Beitrag von PrinzThomas »

Nachtrag:

es gibt noch einen kleinen Fehler, was den Ausgleich betrifft.
Vielleicht kommt jemand auf die mathematisch Formel.
Mein Kopf glüht schon ... ich komm einfach nicht darauf.

Angenommen wir haben 4 Oscis, die wir mit 4 Regler mixen können.
Um einen Ausgleich zu schaffen müssen wir nun den Ausgang einfach mutliplieren.
z.B.
x1 bei 1 Regler
x0,5 bei 2 Regler
x0,25 bei 4 Regler
usw...
Also könnte man meinen einen schönen Dreiersatz zu bedienen.
Aber genau da liegt der Hund begraben.
Mit einem Dreiersatz komme ich da leider nicht weit, weil wenn 1 Regler = 1 sein soll und 4 Regler = 0,25 komme ich bei 2 Reglern logischerweise auf 0,75.
Wie in Gottest Namen macht man das korrekt?
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

Re: Erste Core Schritte Level-Kompensator Bau

Beitrag von herw »

PrinzThomas hat geschrieben:Nachtrag:

es gibt noch einen kleinen Fehler, was den Ausgleich betrifft.
Vielleicht kommt jemand auf die mathematisch Formel.
Mein Kopf glüht schon ... ich komm einfach nicht darauf.

Angenommen wir haben 4 Oscis, die wir mit 4 Regler mixen können.
Um einen Ausgleich zu schaffen müssen wir nun den Ausgang einfach mutliplieren.
z.B.
x1 bei 1 Regler
x0,5 bei 2 Regler
x0,25 bei 4 Regler
usw...
Also könnte man meinen einen schönen Dreiersatz zu bedienen.
Aber genau da liegt der Hund begraben.
Mit einem Dreiersatz komme ich da leider nicht weit, weil wenn 1 Regler = 1 sein soll und 4 Regler = 0,25 komme ich bei 2 Reglern logischerweise auf 0,75.
Wie in Gottest Namen macht man das korrekt?
Das ist nicht so einfach wie du denkst, da unser Gehör Lautstärke nicht linear auswertet.
Abgesehen davon ist das Lautstärkeempfinden auch noch frequenzabhängig.
Hier ist ein Link, wie das technisch-mathematisch zu behandeln ist.
http://www.sengpielaudio.com/Rechner-spl.htm
Ich denke, dass du aber mit deiner einfachen mathematischen Herangehensweise eine Näherung erreichen kannst, indem du beachtest, mit welcher Polyphonie dein Ensemble arbeitet und wie viele Audioquellen du addieren möchtest.
Falls du Komplete hast, kannst du dir ja bei Absynth mal anschauen, wie das wirkt. Dort werden drei Quellen autmatisch geregelt.

ciao herw
Benutzeravatar
Triton
synthesist
Beiträge: 58
Registriert: 1. August 2010, 17:22
Wohnort: Gießen
Kontaktdaten:

Re: Erste Core Schritte Level-Kompensator Bau

Beitrag von Triton »

Gruits. Was gehen könnt, ist das ganze durch die Summe zu teilen (bei Bedarf dann wieder mit dem Wert vom Lautesten multiplizieren).

Also wenn man vier Osz. nimmt und mit a-d benennt, z.B. vol a=0.9, b=0.5, c=0.8, d=0.1. Dann als Multiplikator a/(a+b+c+d) = .9 / (.9+.5+.8+.1) ~ .39

Oder so. Allerdings addieren sich wie von herw erwähnt die Volumen nicht ganz (weil sie sich im Normalfall in der Phase immer mehr oder weniger fressen und dann noch das ganze Paket psychoakustischer Phänomene dazukommt). Zur Gewichtung bei verschiedenen Osz. fällt mir noch der Root Mean Square ein. So ein vollausgesteuertes Rechteck z.B. wäre damit äh rechnen äh... 3dB lauter als der Sinus.
PrinzThomas
meister
Beiträge: 158
Registriert: 10. September 2006, 18:23

Re: Erste Core Schritte Level-Kompensator Bau

Beitrag von PrinzThomas »

Ok aber im Grunde hat das jetzt wenig mit der Lautstärke zutun als viel mehr ein mathematisches Problem.
Das mit dem teilen durch die Anzahl der Regler ist nämlich nicht korrekt!
Das mit den Oscis war im Grunde nur ein kleines Beispiel.
Also anders: nehmen wir an es sind 4 EventRegler die jeweils von 0-1 regeln.
Die Summe aller Reglerstellungen möchte ich nun wieder mittels Multiplikator auf 1 normalisieren.
Z.B. 2 Regler sind runtergedreht und 2 auf maximum - die Summe wäre 2.
Multipliert mit 0,5 wäre es dann wieder 1.
Oder alle 4 Regler sind maximum aufgedreht - multiplizieren wir mit 0,25 um wieder auf 1 zu kommen.
Wenn ich jetzt denken würde wenn 1 = 1 ist und 4 = 0,25, dass ich damit alle Zwischenwerte errechnen kann hätte ich mich geschnitten.
Das geht leider nicht, denn dann wäre z.B: 1 = 1 .... 2 = 0,75 ... 3 = 0,5.... 4 = 0,25 - also in Viertel Schritten.
Es muss aber rauskommen 1 = 1 .... 2 = 0,5 .... 3 = 0,3~ .... 4 = 0,25
Genau dafür suche ich die richtige Formel.
Seltsamerweise wird im ersten Schritt ein halb gerechnet und dann in achteln, zwischen durch mal wieder nicht, dann wieder achtel.. usw...
Das ist mir ein Rätsel. ^^

Nachtrag:
Jetzt wo ich es gepostet habe fällt es mir auf einmal auf.
OMG! wie doof.
Es sind ja im Grunde nur die Teiler.
Ich brauch doch nur 1 durch die Summe der Regler zu teilen. :roll:

@Triton
Du hast absolut recht - genau das ist die Lösung.
Benutzeravatar
Triton
synthesist
Beiträge: 58
Registriert: 1. August 2010, 17:22
Wohnort: Gießen
Kontaktdaten:

Re: Erste Core Schritte Level-Kompensator Bau

Beitrag von Triton »

Wündörboo, dass es doch passt. Hätt mich net gewundert, wenn net. Komm bei sowas nämlich auch gern mal auf Unsinn, weil mich so Rechnungen oft ganz kyrr machen. Hatte so eine in der Art nur vor kurzem, als ich Filterkoeffizienten normiert hab.

Würd als Trick den Faktor noch etwas abschwächen, also näher an die 1 ziehen (z.B. mit Wurzel), weil die Summe von zwei Signalen ja in der Regel leiser (zumindest nie lauter) ist als die Summe der Lautstärken.
PrinzThomas
meister
Beiträge: 158
Registriert: 10. September 2006, 18:23

Re: Erste Core Schritte Level-Kompensator Bau

Beitrag von PrinzThomas »

Die einfachste Lösung ist natürlich einfach ein Limiter hinterzuschalten bloß dann hätte ich mir die ganze Kompensatorsache auch sparen können. ;)
Im Grunde gings mir eigentlich ursprünglich darum die Sache in Core umzusetzen damit ich etwas Übung bekomme.
Antworten