Algorithmus (en) zum Mischen von Audiosignalen ohne Übersteuerung


49

Ich möchte zwei oder mehr PCM-Audiokanäle (z. B. aufgenommene Samples) akustisch originalgetreu digital mischen, vorzugsweise in Echtzeit (dh mit geringem oder keinem Peek-Ahead).

Der physikalisch "richtige" Weg, dies zu tun, besteht darin, die Abtastwerte zu summieren. Wenn Sie jedoch zwei beliebige Stichproben hinzufügen, kann der resultierende Wert das Doppelte des Maximalwerts betragen.

Wenn es sich bei Ihren Samples beispielsweise um 16-Bit-Werte handelt, beträgt das Ergebnis bis zu 65536 * 2. Dies führt zu Übersteuerungen.

Die naive Lösung besteht hier darin, durch N zu teilen, wobei N die Anzahl der zu mischenden Kanäle ist. Dies führt jedoch dazu, dass jedes Sample 1 / N-mal so laut ist, was völlig unrealistisch ist. In der realen Welt, wenn zwei Instrumente gleichzeitig spielen, wird jedes Instrument nicht halb so laut.

Eine gebräuchliche Methode zum Mischen ist: result = A + B - AB, wobei A und B die beiden zu mischenden normalisierten Samples sind und AB ein Begriff ist, um sicherzustellen, dass lauter werdende Sounds zunehmend "leiser" werden.

Dies führt jedoch zu einer Verzerrung des Signals. Ist dieses Maß an Verzerrung bei der hochwertigen Audiosynthese akzeptabel?

Welche anderen Methoden gibt es, um dieses Problem zu lösen? Ich interessiere mich für effiziente Algorithmen mit geringerer Qualität sowie für weniger effiziente Algorithmen mit hoher Qualität.

Ich stelle meine Frage im Kontext der digitalen Musiksynthese, um mehrere Instrumentenspuren zu mischen. Die Spuren könnten synthetisiertes Audio, aufgenommene Samples oder Echtzeit-Mikrofoneingang sein.


Ich frage mich, wie oft es möglich ist, Übersteuerungen zu vermeiden, indem man die Signale nur ein wenig zeitversetzt.
Sebastian Reichelt

Gute Idee, obwohl ich vermute, dass es nicht ganz so einfach ist, besonders wenn Sie nicht viel Vorausschau haben (z. B. in Echtzeit). Das Problem ist, dass Sie die Stichprobe im Voraus kennen müssen, um zu wissen, welche Art von Zeitverschiebung angemessen wäre. Das heißt, bei den meisten Musikstücken besteht eine hohe Wahrscheinlichkeit für eine Korrelation, so dass eine zufällige Zeitverschiebung möglicherweise sehr gut funktioniert. Hat jemand Erfahrung, auf die er zurückgreifen kann?
Bryhoyt

2
@bryhoyt: Echte Mixer addieren die Signale. Das ist es. Keine Zeitverzögerungen oder nichtlineare Verarbeitung erforderlich. Clipping ist kein Problem, da die Originalsignale nicht so laut waren.
Endolith

2
16 + 16bit = 17bit ;-)
Nikwal

1
Teilen Sie einfach durch die Anzahl der Eingänge, dann ist kein Clipping möglich. und wenn der Ton zu leise ist, drehen Sie den Verstärker auf ...
Sarge Borsch

Antworten:


14

Es ist sehr schwierig, Sie auf relevante Techniken aufmerksam zu machen, ohne einen Kontext für Ihr Problem zu kennen.

Die naheliegende Antwort wäre, Sie aufzufordern, die Verstärkung jedes Samples so einzustellen, dass es selten zu Übersteuerungen kommt. Es ist nicht so unrealistisch anzunehmen, dass Musiker in einem Ensemble leiser spielen würden, als wenn sie aufgefordert würden, solo zu spielen.

Die durch A + B - AB verursachte Verzerrung ist einfach nicht akzeptabel. Es erzeugt Spiegelbilder von A auf jeder Seite der Harmonischen von B - entsprechend der Ringmodulation - was ziemlich schrecklich ist, wenn A und B ein reiches Spektrum mit Harmonischen haben, die nicht in ganzzahligen Verhältnissen vorliegen. Probieren Sie es beispielsweise auf zwei Rechteckwellen mit 220 und 400 Hz aus.

Eine "natürlichere" Clipping-Funktion, die Sample für Sample arbeitet, ist die Tanh-Funktion - sie entspricht tatsächlich dem Soft-Limiting-Verhalten einiger analoger Elemente. Darüber hinaus können Sie sich mit klassischen dynamischen Komprimierungstechniken befassen. Wenn Ihr System im Voraus Spitzenwerte erkennen kann, ist dies sogar noch besser.


4
Ergänzungen und hartes Clipping. Schau dir einfach einen Open-Source-Mod-Player an. Die Verwendung eines Zusatzes zum Mischen mit entsprechend skalierten Eingängen, um Übersteuerungen zu minimieren, und dann ein harter Begrenzer (optional weich) ist die Norm, nicht die Ausnahme ...
Pichenetten

4
In den meisten Situationen ist der Entwickler nicht dafür verantwortlich, das Problem zu lösen. Sie geben dem Benutzer / Komponisten die Möglichkeit, die Lautstärke jedes Kanals anzupassen, und es ist dem Benutzer überlassen, den Mix so vorzunehmen, dass das Ausschneiden für ihn akzeptabel ist. Beispiel: In Renoise beträgt die Verstärkung jedes Instruments / jeder Note standardmäßig 1, und beim Hinzufügen von Spuren wird die Lautstärke stark eingeschränkt. Es ist Sache des Benutzers, die Lautstärke der Noten oder Instrumente im Modul anzupassen, um ein Übersteuern des Instruments zu verhindern Master-Track (sofern nicht gewünscht). Hier ist ein Screenshot, der Folgendes zeigt: i.imgur.com/KVxDt.png .
Pichenettes

2
IIRC, FastTracker war konservativer, da es auf jede Spur eine Dämpfung anwendete und dann im Einstellungsdialog einen globalen "Make-up-Gewinn" von x1 bis x32 aufwies. Ich erinnere mich, dass ich, als ich alle meine Module für eine CD auf .WAV rendern musste, Werte der Verstärkung ausprobieren musste, bis ich die niedrigste fand, die kein Clipping verursachte ...
pichenettes

2
In Bezug auf die Dämpfungsstufe, falls Sie keinen Benutzer in der Schleife haben können; 1/32 ist ein absolut sicheres Level (kein Clipping). Unter der Annahme, dass die Kanäle nicht korreliert sind (was für Musik wenig zutreffend ist - genauer beim Mischen von Hintergrundambiente), wäre ein Wert von 1 / sqrt (32) ein guter Kompromiss zwischen Lautstärke und Übersteuerungswahrscheinlichkeit. Die beste Lösung wäre immer noch, 1/32 zu verwenden und dann Ihre Proben mit einem dynamischen Kompressor nachzubearbeiten.
Pichenettes

3
Ergänzungen. Das ist sowieso, was Hardware-Mixer tun, und es ist die Art und Weise, wie die Leute erwarten, dass sich die Dinge verhalten. Mixer auf Systemebene werden einfach geklickt. Es wäre ein großes Problem, wenn die Systemtreiber jede Art von nichtlinearer Verarbeitung implementieren würden - ich könnte mir vorstellen, wie schwer es ist, Ingenieure zu beherrschen, die herausfinden wollen, ob es sich um ihre Kompressor-Plug-In-Einstellung oder um eine dynamische Verarbeitung auf Systemebene handelt. Die Musikproduktionssoftware bietet eine breite Palette an Plug-Ins für die Dynamikkomprimierung. Die Benutzer müssen sicherstellen, dass der Mix nicht gestoppt wird.
Pichenettes

16

Der physikalisch "richtige" Weg, dies zu tun, besteht darin, die Abtastwerte zu summieren. Wenn Sie jedoch zwei beliebige Stichproben hinzufügen, kann der resultierende Wert das Doppelte des Maximalwerts betragen. ... Die naive Lösung besteht darin, durch N zu dividieren, wobei N die Anzahl der zu mischenden Kanäle ist.

Das ist nicht die "naive" Lösung, sondern die einzige . Das ist es, was jeder analoge und digitale Mischer tut, denn es ist das, was die Luft tut, und es ist das, was Ihr Gehirn tut.

Leider scheint dies ein weit verbreitetes Missverständnis zu sein, wie diese anderen inkorrekten nichtlinearen "Misch" -Algorithmen (Verzerrungsalgorithmen) zeigen:

Das "Teilen durch N" nennt man Kopffreiheit ; Der zusätzliche Raum für Peaks, der über dem RMS-Pegel der Wellenform liegt. Der für ein Signal erforderliche Headroom wird durch den Crest-Faktor des Signals bestimmt . (Das Missverständnis der digitalen Signalpegel und des Headrooms ist wahrscheinlich teilweise für den Loudness-Krieg und Elephunk verantwortlich .)

Bei analoger Hardware beträgt der Headroom möglicherweise 20 dB. In einem Hardware-DSP wird häufig ein Festpunkt mit festem Headroom verwendet. SigmaDSP von AD bietet beispielsweise 24 dB Headroom. In Computersoftware wird die Audioverarbeitung normalerweise in 32-Bit-Gleitkommazahlen ausgeführt, sodass der Headroom enorm ist.

Im Idealfall müssten Sie gar nicht durch N dividieren, sondern würden die Signale nur zusammenfassen, da Ihre Signale in erster Linie nicht mit 0 dBFS generiert würden.

Beachten Sie, dass die meisten Signale sowieso nicht miteinander korreliert sind. Daher ist es ungewöhnlich, dass alle Kanäle eines Mischpults gleichzeitig konstruktiv interferieren. Ja, das Mischen von 10 identischen gleichphasigen Sinuswellen würde den Spitzenpegel um das 10-fache (20 dB) erhöhen, aber das Mischen von 10 nicht kohärenten Rauschquellen erhöht den Spitzenpegel nur um das 3,2-fache (10 dB). Bei realen Signalen liegt der Wert zwischen diesen Extremen.

Um das gemischte Signal ohne Übersteuerung aus einem DAC herauszuholen, reduzieren Sie einfach die Verstärkung der Mischung. Wenn Sie den RMS-Pegel des Mixes hoch halten möchten, ohne hart zu übersteuern, müssen Sie eine Art Komprimierung anwenden , um die Spitzen der Wellenform zu begrenzen. Dies ist jedoch kein Teil des Mixens, sondern ein separater Schritt. Sie mischen zuerst mit viel Headroom und komprimieren den Dynamikbereich später, falls gewünscht.


1
Ich verstehe diese Konzepte, bin mir aber nicht sicher, ob sie ganz richtig sind. Sicher, wenn ich eine Reihe von 16-Bit-Samples hinzufüge, ergeben 32 Bit einen Haufen numerischen Raums. Aber ich muss die resultierende Mischung immer noch mit normalisierter Lautstärke auf einem realen Soundsystem wiedergeben. Ich möchte, dass 2 Kanäle lauter klingen, als jeder Kanal separat abgespielt wird, aber ich möchte kein Clipping. Dabei hilft es nicht, meine Summen in 32 oder sogar 64 Bit zu machen. Vielleicht beginne ich damit, meine eigene Frage zu beantworten: Die ursprünglichen Samples sollten auf einen niedrigeren Pegel als die maximale Amplitude normalisiert werden. Wie Sie vorschlagen, etwas Kopffreiheit beim Mischen zu lassen.
Bryhoyt

3
@bryhoyt: Ja, aber Sie müssen auch bedenken, dass die Wellen selten miteinander korrelieren. Wenn Sie also 5 Sounds addieren, werden die Peaks nicht fünfmal so hoch.
Endolith

1
Danke, @endolith, ich denke, das ist wirklich der Kern all dessen und erklärt mir, warum es kein so großes Problem ist, wie ich es mir zuerst vorgestellt habe.
Bryhoyt

Wenn also 10 nicht kohärente Quellen 10 dB ergeben, wäre eine Division durch sqrt (Anzahl der Quellen) eine vernünftige Heuristik? Das heißt, wenn Sie 3 Quellen haben, addieren Sie diese und dividieren Sie durch sqrt (3)? (Entschuldigung für das Kommentieren eines alten Threads)
nerdfever.com

@ nerdfever.com So lassen sich die Effektivwerte zusammenfassen, also ... wahrscheinlich?
Endolith

6

die Formel

result=A+BAB

AB=AB

result=g(A+B)

g1

g=0.5g=1/2

g

result[i]=g[i](A[i]+B[i])

g[i]ABgresult

Vielleicht das:

g[i]=f(A[i]+B[i],g[i1])

UPDATE: Wie von hotpaw2 vorgeschlagen, können Sie das Eingangssignal verzögern, aber nicht die Gain-Unterdrückung. Dies wird als "Look-Ahead-Limiter" bezeichnet.


Mit "AB" meine ich "A * B". Ich verstehe, dass die Amplitude entweder positiv oder negativ sein kann. Sie haben recht, meine Gleichung ist für eine Kombination mit negativen Amplituden nicht sehr sinnvoll.
Bryhoyt

Ich muss 8 bis 10 (N) verschiedene Sinuswellen mischen. Aus Erfahrung wusste ich, dass der richtige Wert bei 0,3 liegt ... 1 / √N scheint richtig zu sein ... Gibt es einen Zusammenhang damit, warum diese Formel korrekt ist?
Zibri,

5

Dies kann zum Nicht-Echtzeit-Mischen unter Verwendung einer Vorausschau-AGC erfolgen, bei der die Verstärkung eines oder beider Kanäle mit einer kaum wahrnehmbaren Rate verringert wird, bevor die Summenamplitude die Begrenzungsgrenze überschreitet. Je weniger Vorausschau verfügbar ist, desto hörbarer wird entweder die AGC-Verstärkungsanpassung, oder die maximale Verstärkung für eine weichere Verstärkungsanpassungsrampe nähert sich an der Grenze immer mehr 0,5 pro Kanal. Bei Tonquellen mit einer gewissen Vorhersagbarkeit könnte man auch Statistiken zum Verhalten der Hüllkurve im Zeitverlauf verwenden, um adaptiv eine Verstärkungsgrenze zu erraten, jedoch mit einer gewissen Wahrscheinlichkeit eines Ausfalls (was eine abrupte Anpassung der AGC-Verstärkung bedeuten würde).


Dies ist ein Look-Ahead-Limiter, keine Look-Ahead-AGC.
Bjorn Roche

2
@ BjornRoche: Kann ein Limiter nicht als eine Art AGC angesehen werden?
Endolith

Einige Limiter sind AGCs, aber ein Lookahead-Limiter ist keine AGC.
Bjorn Roche

1
@ BjornRoche Nun, es ist automatisch und steuert die Verstärkung ...
Olli Niemitalo

2

Ich hatte mit einem Mixer-Designer aus den späten 1990ern und den ersten 2000ern gesprochen, der auf der digitalen Welle lief (nachdem er auf Zehenspitzen gegangen war). Ich denke, der Typ war ein Designer für SPL, aber vielleicht nicht so groß, ich kann mich weder an den Namen noch an die Marke erinnern, ich erinnere mich nur daran, wie wirklich groß und teuer die Maschine war.

Wir sprachen lange und sprachen schließlich über die Techniken, um wirklich zu gewährleisten, dass ihre 64/128 @ 24-Bit-Kanäle gemischt einen 24-Bit-genauen gemischten Ausgangskanal ohne Übersteuerung darstellen.

Die Technik, die er erklärte, war ziemlich einfach. Die 64 Spuren (auf 24 Bits) wurden in einem 48-Bit-Kanal hinzugefügt, in dem das Abschneiden nicht auftreten kann. Gerade.

Ich kann nicht sagen, wie dieses Signal dann von 48 auf 24 Bit zurückgedithert wurde. Vielleicht werden hier die kniffligen Küchenrezepte angewendet.

Und vielleicht gibt es eine Menge Techniken, um das zu erreichen, vor allem verschiedene, ob in Echtzeit oder mit allen Signalen, die bereits mit einfach zu bestimmenden Hochspitzen aufgezeichnet wurden ... alle Arten von Normalisierungen, die ich mir vorstellen kann.


2

Verringern Sie die globale Lautstärke. Der Impulstracker gibt standardmäßig Kanäle mit einer Lautstärke von maximal ca. 33% aus.

Dies scheint sowohl laut genug für Musik mit wenigen Kanälen (4-Kanal-Amiga-Modi) als auch leise genug für Songs mit 50 Kanälen zu sein (da der Kanalinhalt in der Regel nicht korreliert, sodass sich die Lautstärke ab einem bestimmten Pegel nicht mehr so ​​schnell summiert ... Außerdem werden einige Kanäle mit maximaler Lautstärke ausgegeben, wenn so viel los ist. Es bleibt auch genügend Headroom für Kanäle mit festem Links- oder Rechtsausschnitt (die 66% des Bereichs ausmachen).

Außerdem möchten Sie Ihre Kanäle nicht zu 16 Bit zusammenfassen, sondern zu 32 Bit zusammenfassen, das Ergebnis abschneiden und ganz am Ende auf 16 Bit reduzieren. Sie benötigen den höheren Bereich, damit er sich beim Rechnen nicht dreht. Eine andere Option ist die Verwendung von 32-Bit-Gleitkommazahlen (dies ist praktisch für Filter, Effekte usw.).


0

Ich denke, der Schlüssel ist, wenn Sie 16-Bit-Werte haben und Sie 2 Werte addieren, die möglicherweise mehr als der Maximalwert sein könnten, dann haben Sie 2 Optionen:

1) Wirken Sie beide auf 32-Bit-Addition und geben Sie den Maximalwert zurück, wenn die Addition diesen Wert überschreitet. Dann wandle es zurück auf 16 Bits. Wenn Ihre Werte beispielsweise 32768 und 34567 sind, überschreitet sie 65535, und der Schlüssel lautet, 65535 zurückzugeben. Sie würden dasselbe tun, wenn Sie am Ende des Mindestwerts vorzeichenbehaftete Werte verwenden.

2) Komprimieren Sie beide Werte und addieren Sie sie dann.

Das erste ist im Wesentlichen hartes Beschneiden, das zweite ist weiches Beschneiden. Analoge Systeme sind alle hart im Nehmen.


0

Sie sind nur doppelt so groß wie der Abstand, wenn die Frequenzen in beiden Spuren frequenzmäßig den gleichen Abstand einnehmen. Verwenden Sie Equalizer und Komprimierung, um dies zu umgehen, indem Sie Bereiche des Frequenzspektrums für jeden Sound ausarbeiten und die Übergänge und Stützen von Sounds so steuern, dass alles dort herausragt, wo es sollte. Vielleicht beantwortet das die Frage aber nicht. Sie können niederfrequente Signale um bis zu 2 ms verzögern. Die Phase wird nicht unterbrochen, da die Wellenlängen länger als die höheren Frequenzen sind, und es wird Platz hinzugefügt, da die Transienten nicht vollständig mit den leistungshungrigen Basssignalen übereinstimmen. Etwas lineares Hinzufügen einer größeren Verzögerung, je niedriger das Signal ist, wäre interessant zu testen.


-1
A + B + {
    (|A| = A) = (|B| = B) = true: -AB;
    (|A| = A) = (|B| = B) = false: AB;
    else: 0
}

Das heißt, wenn sowohl A als auch B ein Vorzeichen gemeinsam haben, wenden Sie einen begrenzenden Versatz an. Die Größe des Versatzes ist das Produkt von A und B. Die Richtung des Versatzes ist der von A und B entgegengesetzt.

Wenn A und B kein Vorzeichen gemeinsam haben, wird kein Limit angewendet, da kein Überlauf möglich ist.


Beachten Sie, dass dies nicht kommutativ ist. Wenn Sie mehr als 2 Stimmen mischen möchten, müssen Sie alle Stimmen gleichzeitig mischen. In diesem Fall sollten Sie alles in eine Richtung "reduzieren" (wenn Sie zu hoch sind, reduzieren Sie die positiven Werte mit den negativen; wenn Sie zu niedrig sind, reduzieren Sie die negativen Werte mit den positiven). Sobald Sie den Versatz berücksichtigt haben (proportional auf die verbleibenden Werte angewendet); Verwenden Sie den binären Ansatz, aber skalieren Sie den Begrenzer basierend auf der Anzahl der gemischten Werte.
Rich Remer

-1

Mein Vorschlag:

  1. Konvertiert das Audioformat von 16-Bit-Festkomma in 32-Bit-Gleitkomma.
  2. Addieren Sie den aktuellen Sample-Wert aller zu mischenden Tracks.
  3. Tu nichts anderes.

Möglicherweise möchte der Benutzer diesen gemischten Stream vor dem Dithering und der Konvertierung in das 16-Bit-Festkommaformat mit Komprimierung und / oder Begrenzung verarbeiten (vorausgesetzt, diese Konvertierung ... Die Abmischung zur Übergabe an die Master-Ingenieure hat normalerweise ein höher auflösendes Format).


2
Hallo und willkommen bei DSP.se. Wir danken Ihnen, dass Sie versucht haben, einen Beitrag zu leisten, aber ich glaube nicht, dass dies die Frage des OP überhaupt beantwortet. Das OP erwähnte keine "Benutzer" seines Systems: Er spielte möglicherweise alleine damit oder schrieb das Programm nach bestimmten Anforderungen. Es tut mir leid, dass ich abgelehnt habe: Ich werde gerne meine Abstimmung überarbeiten, wenn Sie Ihre Antwort genauer formulieren. Achten Sie auch auf Ihre Formatierung: In den häufig gestellten Fragen erfahren Sie , wie Sie gute Antworten schreiben.
Penelope
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.