(gelöst) Audiosignal übersteuern – und wieder zurück

Design Patterns, Erklärungen zu Algorithmen, Optimierung, Softwarearchitektur
Forumsregeln
Wenn das Problem mit einer Programmiersprache direkt zusammenhängt, bitte HIER posten.
Antworten
Benutzeravatar
Krishty
Establishment
Beiträge: 8245
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

(gelöst) Audiosignal übersteuern – und wieder zurück

Beitrag von Krishty »

Hi,

Ich möchte die Qualität eines Audiosignals senken, indem ich es gezielt übersteuere. Ganz banal also: Volume auf tausend drehen, damit so ziemlich alles clippt, und die Boxen ein wenig runter.

Das lässt sich auch super durch Filter (in DirectShow) oder Submix Voices (in XAudio) realisieren: Lautstärke auf tausend, rendern, Lautstärke wieder dimmen, nochmal rendern.

Und genau da liegt auch das Problem: Wie kriege ich raus, um wie viel ich die Lautstärke beim zweiten Rendern dimmen muss, damit es sich wieder so laut anhört wie das Original? Ich kann nicht einfach die Inverse der ersten Lautstärke nehmen, weil der Effekt ja darauf beruht, dass bei 1 abgeschnitten wird … muss ich da erstmal die durchschnittliche Lautstärke des Originals ausrechnen? Oder die Lautheit?

(Die Alternative wäre, einen Filter selber zu schreiben, der die 16 Bits auf zwei oder drei quantisiert. Das scheue ich, weil COM und anstrengend und so.)

Gruß, Ky
Zuletzt geändert von Krishty am 02.05.2011, 21:14, insgesamt 1-mal geändert.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
joggel

Re: Audiosignal übersteuern – und wieder zurück

Beitrag von joggel »

Nur sone spontane Idee:
1. maximale Laustärke/Wert (aka Amplitude) des original Signals ermitteln (Zahlenbeispiel: 0.8)
2. dein Übersteuerungs-Effekt, also Lautstärke aufdrehen (Signale werden bei 1.0 geclippt)
3. Lautstärke wieder runter
4. Joar, neue Lautstärke für das senden des Signals is eben 80% von der Lautstärke, wenn du das Signal "normal" senden würdest.

Wie gesagt: nur eine spontane Idee, und bin mir auch nicht sicher ob ich alles verstanden habe..
Benutzeravatar
Krishty
Establishment
Beiträge: 8245
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Audiosignal übersteuern – und wieder zurück

Beitrag von Krishty »

Mit der maximalen Amplitude darf man nicht arbeiten, weil die immer irgendwo bei 0,99 ist. Da muss eher der Lautstärkepegel oder der Lautheitspegel ran. Ich überlege gerade, wie ich die rauskriege – habe hier jede Menge Dateien, aber WaveGain versagt bei mehr als hundert. Aber vom Konzept her dürfte das hinkommen; ich probiere direkt mal ein paar Testdateien.

Nachtrag: Ach, Mist. Das Clipping geschieht erst in der Mastering Voice; nicht schon im Mixing. Das bedeutet: Ich kann die Lautstärke auch millionenfach überhöhen, da ist kein Qualitätsverlust zu hören sondern nur, wenn ich es überhöht an den Lautsprecher schicke. Ich muss also doch einen Effekt selber schreiben -.-

… zumindest scheint XAudio dafür freundliche Schnittstellen und Hilfsklassen zur Verfügung zu stellen. Mal einarbeiten.

Und nochmal: Ich habe nun ein eigenes Cross-Platform Audio Processing Object (XAPO, wie es die Doku so salopp schimpft) geschrieben. Dank der Helferklassen war das sogar recht fix fertig; nur so zwei- bis 300 Zeilen. Ich quantisiere das Signal darin schlicht von 16 bis auf sechs Bits runter (je nach gewünschter Qualität). Klingt auch für den Anfang nicht schlecht.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Antworten