![]() |
Audio Kompressor
Hi ihr lieben Leute!
Wie die Überschrift schon sagt, habe ich vor einen Audiokompressor zu basteln. Für alle die nicht wissen, was das ist: Das ist so, wie wenn ein Männchen in deinem PC hockt und jedesmal, wenn der Soundpegel einen bestimmten Wert erreicht , den Lautstärkenregler ein bisschen nach unter zieht und nach kurzer Zeit wieder auf normal zurückstellt. Also praktisch ein Programm, das zu laute Sounds "abschwächt". Nachdem ich mir die Finger wund gegoogelt habe und dieser Beitrag mir auch nicht weiter geholfen hat ( ![]() Ich brauche eigtl nur eine Möglichkeit das Soundausgangslevel meiner Soundkarte auszulesen. Praktisch ein VUMeter für die Soundkarte. Bass.dll nützt mir in diesem Fall wahrscheinlich nichts, da ich keinen Player baue, sondern den Systemsound brauche! Hoffe ihr könnt mir helfen! Gruß Thomy |
Re: Audio Kompressor
wenn deine Soundkarte als Aufnahmequelle SterioMix, WaveMix etc. unterstützt kannst du darüber die Sounddaten abfragen welche ausgegeben werden.
|
Re: Audio Kompressor
Werd mal nachschauen...
Danke schonmal! |
Re: Audio Kompressor
Ähm, ich glaub du möchtest eher einen Limiter programmieren?
Kannst mal über deine Erfolge was schreiben? Wie machst du das mit Attack, Release und Ratio? |
Re: Audio Kompressor
Such mal nach ACS (Audio Component Suit), da gibt es die Komponente TAudioIn, eine ältere Version der Komponente wird glaub ich auch beim VUMeter verwendet.
Die Bass.dll kannst du auch verwenden, In dem du mit der Bass.dll einfach den Audio aufnimmst. Bei aufnehmen wird eine Callback Methode aufgerufen, in dieser Methode speicherst du die Werte nicht in einer Datei sondern benutzt sie für dein Programm. Zur ACS: Das ist glaub ich ein sf.net Projekt, aber leider nicht (mehr) sonderlich aktuell. Auf jeden Fall wäre es schön wenn du deine erkenntnisse uns hier Mitteilst, so etwas in der Richtig will ich auch noch machen, bin da bisher aber noch nicht zu gekommen. mfg, Björn |
Re: Audio Kompressor
Zitat:
Im Einfachsten Fall (wenn die Funktion nichts machen soll), dann wäre das einfach f(X) = X. Bei einem Limiterwürde man z.B f(X) = If X<90 then X else If X<110 then 90+(X-90)/2 else X:=100 implementieren. Wenn 0<=X<=110 ist, dann wird ab einer Lautstärke von 90 gedrosselt, und lauter als 100 wird das Ganze nicht, Man kann sich aber auch eine komplexe Funktion (z.B. durch ein Spline definiert) vorstellen, die leise Passagen verstärkt und laute eben etwas abschwächt... Das Ganze kann man noch auf die Spitze treiben, in dem eine FFT vorgeschaltet wird und so eine Manipulation auch noch abhängig von der Frequenz ist: Bässe anheben, Mitten runter etc... |
Re: Audio Kompressor
Zitat:
Wenn nur ab einem bestimmten Pegel runtergeregelt werden soll, dann ist ne Limiterfunktion, die dann auch eine Ratio von unendlich:1 hat Interessant wäre wirklich, das ganze als Multibandausführung, damit die Bässe, Mitten und Höhen getrennt bearbeitet werden. Standard-Kompressoren/Limiter in der Summe klingen furchtbar... |
Re: Audio Kompressor
Liste der Anhänge anzeigen (Anzahl: 3)
Also, ich war jetzt eine Woche im Urlaub, aber da hat sich hier ja schon einiges getan! Respekt und Danke an alle!
Zum ersten zu eurer Frage ob es nun ein Limiter, Kompressor oder Normalizer sein soll! Ich glaube ich erklärs euch mal kurz was was ist, da ich mich da ganz gut auskenne. Um das zu verdeutlichen habe ich eine kleine Zeichnung gemacht, welche das meiner Meinung ganz gut darstellt. Die verschiedenen Arten sind mit unterschiedlichen Fargen markiert. Die grüne Linie zeigt den normalen Verlauf, ohne irgendein Eingreifen. Limiter und Kompressor schalten sich ab einem bestimmten Pegel ein, der sogenannte "Threshold". Ab diesem Wert greifen sie ein. Weiter gibt es noch die Variablen Attack und Release, welche bezeichnen, wie schnell das Programm anspringt bzw. wie schnell es wieder zu seinem Ursprungswert zurückkehrt. 1. Limiter Der Limiter begrenzt ab dem Thresholdwert alles auf diese Lautstärke. Das heißt, dass kein Signal lauter als der Thresholdwert den Limiter verlässt. Limiter sind dazu da um zum Beispiel Geräte vor Übersteuerung zu schützen. Endstufen haben zum Beispiel meistens einen Limiter integriert um die Bauteile vor Schaden zu schützen. Auf dem Bild wäre das der rote Strich. 2. Kompressor Beste Erklärung, die ich dafür gehört habe: Ein Kompressor ist die technische Form von einem Tontechniker, der vor seinem Mischpult sitzt und den Fader bei zu lauten Stellen um ein Stück nach unter zieht um ihn danach wieder zurückzuschieben. Dabei gibt es die sogenannte "Ratio". Diese besagt, in welchem Verhältnis der Soundpegel ab dem Thresholdwert abgeregelt wird. In dem Bild ist der blaue Strich ein Beispiel für einen Kompressor mit dem Verhältnis 1:2. Ein weiterer Wert, welcher bisschen unwichtiger ist, ist der sogenannte "Knee". Dieser gibt an, ob der Kompressor sofort anfängt zu arbeiten, oder ob er die Regelung sanfter, in einer Kurve, machen soll (!Vorsicht! nicht mit Attack verwechseln; auf dem Bild die gelbe Linie). 3. Normalizer Dieses Gerät ist ziemlich schnell beschrieben. Es hebt leise Passagen an und schwächt laute ab. Am Schluss hat also alles die gleiche Lautstärke, was meiner bescheidenen Meinung nach weniger Sinn der Sache ist! Gut, soviel zu Kompressor etc ^^ Hoffe es war nicht zu lange. Jetzt zu meinem Programm: Ich hab mich schonmal hingehockt und ein paar Sachen ausprobiert. Um den Audioausgang zu kontrollieren habe ich indirekt die Bass.dll benutzt. Ich habe im Netz ein Programm von Michael Gaedtke namens Record-Demo gefunden, welches den Ausgangspegel angibt. Sehr schön gestaltet mit Combobox zum Auswählen der Quelle etc. (Auch im Anhang). Dieses hab ich schlicht und ergreifend umgebaut und einen Normalizer integriert, was nicht weiter schwer war. Aber es gibt trotzdem noch ein Problem: Mit diesen Pegeln ist es nicht möglich einen richtigen Kompressor zu basteln, weil diese "nur" das Signal ist, welches von der Soundkarte zurückgeschickt wird. Also sobald ich das Signal auf meinem Monitor sehe ist es schon zu spät, weil es zu diesem Zeitpunkt schon auf den Boxen ist. Und das ist nicht der Sinn der Sache, weil wirklich laute Signal nicht "erwischt" werden sondern nur ihre "Nachfolger". Ich hab mir auch schon überlegt, ob ich den Kompressor auf Frequenzen bezogen arbeiten lassen soll. Selbstverständlich ist das eine gute Idee, aber bevor wir nicht das Problem gelöst haben, wie wir "pünktlich", also vor der Ausgabe, an das Ausgabesignal kommen, wird das keinen Sinn machen, weil es sonst wieder nur zu spät kommt =*MIST!!!* Aber wenn wir das gelöst haben, wäre es sehr intressant. Ich habe selber schon ziemlich viel mit solchen Teilen gearbeitet, weil ich viel mit Ton&PA Technik zu tun habe und die sind wirklich 1a!! Kosten aber als "Hardwareausführung" ein Schweinegeld! Ich schick euch jetzt mal das ganze Programm von mir und die Recorddemo damit ihr euch das mal anschauen könnt. Vielleicht hat ja jemand eine Idee, wie man das Signal noch unter Windows auslesen kann. Ansonsten verabschiede ich mich jetzt, da ich genug geschrieben habe ^^ Gruß Thomy |
Re: Audio Kompressor
Du musst einen Soundkarten-Treiber bauen, und soweit ich weiss, geht das nmit Delphi nicht so einfach (oder gar nicht). Na ja, 'alles geht' aber imho wäre da C die bessere Wahl.
|
Re: Audio Kompressor
Da kann ich leider überhaupt nicht mitreden, weil ich in C überhaupt nix kann! Ich bin jetzt kurz davor mein Informatik oder Elektro- und Informationstechnik Studium anzugehen, wo ich das sicherlich lernen werde, aber bis ich mich so gut eingearbeitet habe wie in Pascal wird das sicherlich dauern!
Aber ich glaube du hast Recht, weil mein Bruder auch mal probiert hat auf den Treiber von seiner Grafikkarte mit Delphi zuzugreifen und er hat auch kläglich versagt... Naja, falls es doch noch irgendwelche Ideen gibt oder sich jemand bereit erklärt das ganze in C zu schreiben dann bitte ich um Antwort! Grüße Thomy |
Re: Audio Kompressor
also hier
![]() Wenn der Sound extern eingespeist wird, kann man ihn ja aufnehmen, analysieren, bearbeiten und dann ausgaben. Wenn mehrere Ausgänge vorhanden sind könnte man ja auch den Ausgabe1 (notfalls per externen Kabel) in den Eingang schicken, und dann über einen anderen Ausgang nach draus. Gruß tr909 |
Re: Audio Kompressor
Also wie ich das jetzt verstanden habe, willst du folgendes machen:
Du willst den Sound ausgeben, dann über den Return bearbeiten.... und diesen dann danach wieder ausgeben? Dann habe ich das Signal ja zwei mal... Was macht das denn für einen Sinn! Falls ich hier was missverstanden habe, dann klär mich bitte auf ^^ Den Treiber von dir werde ich mal anschauen und dann nochmal posten aber vielen Dank! Thomy |
Re: Audio Kompressor
Ich meinte folgendes. Ohne einen Treiber zu programmieren kannst du den Sound ja nicht vor der Ausgabe bearbeiten. Deswegen wäre es eine Möglichkeit das Ausgangssignal aufzunehmen und dann das veränderte auszugeben. Das du dann das Signal "zweimal" hast ist klar (einmal orginal und einmal bearbeitet). Aber du "hörst" dann ja nur das bearbeitete.
und zu kxproject Zitat:
DerAnkh |
Re: Audio Kompressor
Sorry tr,
aber ich kapier da was nicht! Es ist genau des Problem, was du sagst: Du hast das Signal dann doppelt! Wie kommst du denn darauf, dass man dann nur noch das bearbeitete hörst? Also einer von uns steht defenitiv auf der Leitung, und ich glaube fast, dass ich es bin ^^ Den Treiber von Kx hab ich jetzt schonmal angeschaut und ist echt nicht schlecht des Teil! Ist echt der Hammer, was du da alles einbauen kannst! An alle die dieses Thema intressiert: Lest die Hilfe, sonst habt ihr wenig bis gar keine Chance, aber schaut euch das Teil an, des is echt subba! Gruß Thomy |
Re: Audio Kompressor
Das ganze geht wie gesagt nur wenn du mind 2 Ausgänge an der Karte hast bzw. zwei Karten. Wenn du es mit nem Kabel machst, geht ja der eine Ausgabe direkt in den Eingang. Ergo kannst du da schon mal keinen "Lautsprecher" dranhängen, du hörst also nix ;) Im interne Audio-Mixer muß dann nur die Wiedergabe-Lautstärke des Eingangs auf 0 stehen. Also hörst du nix ;)
Ich hoffe du hast nun verstanden wie ich es meine. *edit* ich hab mit den kx eigentlich nur mal drauf gepackt wegen der asio-unterstützung. damit hab ich bei reason nur noch 5-10ms Latenz :D Den rest habe ich mir noch nicht so genau angesehen *edit* Gruß tr909 |
Re: Audio Kompressor
So, jetzt hab ichs verstanden! Hab irgendwie nicht mitbekommen, dass du was von 2 Ausgängen gesagt hast. Aber du hast recht, so könnte es gehen. Aber ich glaube nicht, dass es die "eleganteste" Lösung wäre. :warn:
Ich hab bei mir zwar 2 Soundkarten aber ich glaube, dass es fast ein bisschen zu umständlich wäre das so hinzuprogrammieren, dass es dann nur bei mir läuft! Es haben ja auch noch ein paar andere Interesse bekundet und man kann echt nicht davon ausgehen, dass jeder 2 Soundkarten hat... Bei mir ist es zufällig so, weil meine Onboard Karte total Schwachsinn ist. Aber mit der Zeit sind die auch immer besser geworden, also schlechte Chancen... :wall: Der Kx Treiber ist aber wirklich erste Sahne es fehlen mir zwar noch ein paar "speziellere" Einstellungen beim Kompressor, aber im großen und ganzen könnte man schon gut damit arbeiten... Gruß Thomy |
Re: Audio Kompressor
eventuell kannst du ja mit apihooks arbeiten. Über irgend eine einheitliche schnittstelle müssen die Daten ja zur Soundkarte gelangen und somit kannst du wenigstens die Pegel der Programme beeinflussen welche keinen eigenen treiber mitbringen.
|
Re: Audio Kompressor
Hi!
Könntet ihr mir vielleicht erklären, wie man apihooks benutzt? ich habe noch nie mit sowas gearbeitet und habe ehrlich gesagt auch keine ahnung, was genau das ist.. Gruß Thomy |
Re: Audio Kompressor
Vielleicht musst du mal nach DirectX oder VST suchen...
Ist mir nur grad so eingefallen, Logic Audio, Cubase, Nuendon, Audition usw. nutzen ja VST und DirectX-Plugins. Evtl. findest du ja was, wie die den Sound vor dem Ausgang abgreifen, bearbeiten und ausgeben. Bei deiner Software wäre vielleicht auch Sidechain nicht schlecht, könntest dann über Mikro die Lautstärke regeln, ähnlich wie Ducking. Legst du das jetzt eigentlich als Multiband aus? Hard und Softknee würd ich aber schon wählbar machen. Für deine Anwendung ist ein Softknee wohl die besser klingende Variante. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz