Dieser Artikel wurde maschinell übersetzt.
Der DirectX-Faktor
Filter in XAudio2
In das Pantheon der bemerkenswerte Wellenformen herrscht die einfache Sinus-Kurve. Nur indem man es, kann man seine Quintessenz sanft hügelige Natur — Verlangsamung erreicht seinen Gipfeln, fast zu beenden, wie es Hügelkämme und dann schrittweise Abholung Geschwindigkeit, maximale Geschwindigkeit als es erreicht kreuzt die horizontale Achse um eine weitere Verlangsamung zu starten.
Dieser Eindruck wird durch eine tiefere mathematische Analyse bestätigt. Die momentane Geschwindigkeit der Sinus-Kurve zu jedem Zeitpunkt ist eine Tangente der Kurve. Diese Geschwindigkeiten Graph, und Sie erhalten einen anderen Sinus-Kurve, aus dem Original durch ein Viertel Zyklus ausgeglichen. Tun Sie es wieder mit dieser zweiten Kurve, und zwar eine Sinus-Kurve zeigen Beschleunigung, vom Original durch die Hälfte eines Zyklus ausgeglichen, wie in gezeigt Abbildung 1.
Abbildung 1-Sinus-Kurve, seine Geschwindigkeit (in violett) und Beschleunigung (in Aqua)
Die Sinus-Kurve ist Kalkül den negativen eigene zweite Ableitung. Aus der grundlegenden Physik wissen wir, dass Kraft proportional zur Beschleunigung, was bedeutet, dass in jedem physikalischen Prozess, wo die Kraft umgekehrt proportional zum Hubraum ist, Bewegung von Sinuskurven beschrieben wird. Federn haben dieses Merkmal: Je mehr dehnen Sie sie, desto größer die Kraft in die entgegengesetzte Richtung. Aber viele andere Substanzen, die in der Natur gefunden haben eine systeminterne Elastizität sowie, einschließlich der Kompression und Rarefaction Luft.
Betrachten Sie das Rupfen des Suchstrings straff, das Abhören einer gestreckten Tierhaut, die Schwingung der Luft in einem Rohr. Alle diese Prozesse beinhalten federnde-Objekten, die mit der charakteristischen Bewegung einer Sinus-Kurve zu vibrieren. Häufiger wird diese Sinus-Kurve durch zusätzliche Sinuskurven ergänzt, deren Frequenzen ganzzahlige Vielfache der Grundfrequenz sind. Die Sinus-Kurven in diesem Gefüge werden als Obertöne bezeichnet.
Selbst ist eine einzelne Sinus-Kurve hörbar ziemlich langweilig. Aber ein paar von ihnen zusammen in einer harmonischen Beziehung zu setzen und der Klang bekommt viel interessanter. Im wirklichen Leben sehr oft die Frequenzen dieser Obertöne sind nicht genaue integrale von einer Grundfrequenz und korrekter als Obertöne bezeichnet werden. Es ist diese Kombination von Obertönen — einschließlich, wie sie sich im Laufe der Zeit verändern — definiert ein Musikinstrument charakteristischen Sound oder Klangfarbe.
Eine kleines Fragment einer bestimmten Wellenform kann als Funktion der Zeit grafisch dargestellt werden, wie auf den Top Abbildung 2. Wenn diese Wellenform alle 4 ms wiederholt wird, hat es eine Frequenz von 250 Hz, am mittleren C auf dem Klavier liegt.
Abbildung 2-Wellenform im Zeitbereich (oben) und Frequenzbereich (unten)
Mit einige Fourier-Analyse können wir diese Wellenform in seine konstituierenden Sinuskurven zu trennen und auf eine etwas andere Weise darstellen, wie gezeigt auf der Unterseite in Abbildung 2. Dieses Diagramm zeigt die relativen Amplituden dieser konstituierenden Sinuskurven nach Häufigkeit geordnet. In Signalverarbeitung Jargon Abbildung 2 zeigt die Äquivalenz der Zeitdomäne Darstellung einer Wellenform auf der Oberseite und der Frequenz-Domäne-Darstellung auf der Unterseite.
Im wirklichen Leben würde eine Darstellung eines Klanges in seiner Frequenzdomäne umfassen das gesamte audio-Spektrum von 20 Hz bis 20.000 Hz, und ständig im Laufe der Zeit ändern.
Filter-Grundlagen
Die Frequenz-Domäne-Darstellung ermöglicht es uns, Ton als eine Sammlung von Sinus-Wellen mit verschiedenen Frequenzen zu denken, und das ist oft nützlich Audioverarbeitung zu verstehen.
Eine sehr häufige Art von audio-Bearbeitung umfasst ergänzen oder bestimmte Adressbereiche Frequenzen im Audiospektrum abgeschwächt, daß die harmonischen Aufbau des Klanges dadurch gestört. Dies ist ein Tool, das als Filter bezeichnet. In der analogen Signalverarbeitung sind Filter Schaltungen; Sie sind in der digitalen Signalverarbeitung, Algorithmen.
Die am häufigsten verwendeten Filtertypen sind Hochpass, Tiefpass und Bandpass-genannt; die Begriffe beziehen sich auf die Frequenzen der Filter durchgelassen. Der Tiefpass-Filter betont niedrige Frequenzen von höhere Frequenzen abgeschwächt. Ebenso vermindert der Hochpass-Filter niedrigerer Frequenz. Der Tiefpass und Hochpass-Filter werden von einer bestimmten Grenzfrequenz definiert, die angibt, wo die Dämpfung beginnt. Der Bandpass-Filter keine Grenzfrequenz, aber eine Center-Frequenz dient einen ähnlichen Zweck. Frequenzen außerhalb von einem Bereich um die Center-Frequenz sind abgeschwächt.
Die meisten Filter können nicht einfach alle Sinuswellen oberhalb oder unterhalb einer bestimmten Frequenz blocken. Stattdessen ist eine Sinuskurve mit einer bestimmten Frequenz basierend auf seine Entfernung von der Cut-Off oder Center-Frequenz mit einem Roll-off-Effekt abgeschwächt. Die Steigung der diese RO-unterliegt einer Eigenschaft des Filters bekannt als Q, die für Qualität steht. Ein Filter mit einem höheren Q hat ein steiler-Roll-off.
Der Q-Faktor ist am einfachsten mit einem Bandpass-Filter zu interpretieren. Abbildung 3 zeigt den Effekt der einen Bandpass-Filter auf eine Reihe von Frequenzen angewendet. Die Center-Frequenz wird bei f0, und zwei andere Frequenzen sind markiert, f1 und f2, wo der Bandpass-Filter die Amplitude auf 70,7 Prozent der f0-Amplitude dämpft.
Abbildung 3 Bandbreite in einem Bandpass-Filter
Warum 70,7 Prozent?Die Macht einer Wellenform wird berechnet als das Quadrat der Amplitude der Wellenform und f1 und f2 angeben die Frequenzen, wo die Wellenform die Hälfte ihrer ursprünglichen Stärke abgeschwächt worden ist. Da macht Amplitude kariert ist, ist die Amplitude an diesen Punkten die Quadratwurzel von 1/2 oder 0,707.
Q errechnet sich durch Division die Center-Frequenz durch den Unterschied zwischen den zwei Hälfte-Energie-Frequenzen:
Q = f0 / (f2-f1)
Allerdings ist der Unterschied zwischen f2 und f0 nicht dasselbe wie der Unterschied zwischen f0 und f1. Stattdessen sind die Verhältnisse die gleichen: F2 / f0 entspricht f0 / f1. Wenn f2 Doppel f1, das eine Oktave ist, und es ist relativ einfach zu berechnen, dass Q gleich der Quadratwurzel von 2 ist, oder ca. 1.414.
Das Verhältnis zwischen f2 und f1 ist bekannt als der Filter-Bandbreite und wird oft in Oktaven angegeben. Sie können für eine Bandbreite B in Oktaven, Q berechnen wie folgt:
Wie verringert sich die Bandbreite, ist Q erhöht und die Roll-off steiler.
Ich sagte, dass die f2 und f1 sind die Frequenzen, die der Filter zur Hälfte die Kraft f0 dämpft. Halbe Leistung ist auch bekannt als-3 Dezibel. Das Dezibel ist eine logarithmische Skala, die etwa Angleichung der menschlichen Wahrnehmung der Lautstärke. Der Unterschied in Dezibel zwischen zwei Leistungsstufen P1 und P0 ist:
DB = 10·log10(P1/P0)
Wenn P1 halbe P0 ist, ist der Logarithmus zur Basis 10 von 0,5-0.301 und ca.-3 ist 10-Mal. Beim Umgang mit Amplituden sind Dezibel wie folgt berechnet:
DB = 20·log10(A1/A0)
Der Logarithmus zur Basis 10 von 0,707 ist-0.15 und auch-3 ist 20-Mal.
Jede Verdoppelung der Amplitude entspricht einer Steigerung von 6 Dezibel, weshalb die 16-Bit Sampling-Rate von audio-CDs manchmal einen Dynamikbereich von 96 Dezibel haben soll.
Anwenden eines Filters
Wenn Sie XAudio2 in einem Programm Windows 8 verwenden Töne zu erzeugen oder die Klängen der vorhandene Musik-Dateien zu ändern, ist das Anwenden eines Filters auf jene Töne so einfach wie drei Felder einer XAUDIO2_FILTER_PARAMETERS-Struktur initialisieren und Aufrufen einer Methode mit dem Namen SetFilterParameters.
Wie Sie in den letzten Ausgaben dieser Rubrik gesehen haben, ein Programm erstellt eine oder mehrere Instanzen des IXAudio2SourceVoice um die Wellenformen zu definieren, sich selbst und eine einzelne Instanz des IXAudio2MasteringVoice, effektiv alle Quelle Stimmen in einer einzigen audio-Stream zu kombinieren. Später in diesem Artikel sehen Sie auch Instanzen von IXAudio2SubmixVoice zur Steuerung der Verarbeitung und Mixen von Sounds auf ihrem Weg zur mastering Voice zu erstellen. Quelle Stimmen und Submix Stimmen unterstützen die SetFilterParameters-Methode, sondern nur, wenn die Stimmen mit dem XAUDIO2_VOICE_USEFILTER-Flag erstellt werden.
Ein Aufruf von SetFilterParameters erfordert einen Zeiger auf eine XAUDIO2_FILTER_PARAMETERS-Struktur, das drei Felder:
Typ: Legen Sie auf einen der Mitglieder der XAUDIO2_FILTER_TYPE-Enumeration, die Mitglieder für Tiefpass, Hochpass und Bandpass-Filter sowie eine Kerbe (oder Band-ablehnen) Filter enthält, und Einpoliges Tiefpass und Hochpass Filter, die (wie Sie bald sehen werden) einfacher Filter sind.
Häufigkeit: Legen Sie auf 2·sin(π·f0/fs), wobei f0 die cutoff-Frequenz und fs ist die Sampling-Frequenz, wo f0 nicht größer als 1/6 fs, was bedeutet, dass der Wert für das Feld festgelegt ist nicht größer als 1.
OneOverQ: 1 geteilt durch die gewünschte Q-Faktor größer als 0 (null) und nicht größer als 1,5. Daher dürfen nicht Q weniger als 2/3, das entspricht einer Bandbreite von 2 Oktaven.
Ich habe nicht noch gezeigt, dass Sie Diagramme, ähnlich wie Abbildung 3, zeigen, dass, wie der Tiefpass und Hochpass-Filter Frequenzen dämpfen. Manchmal solche Diagramme zeigen Sie einfach einen Roll-off-Effekt und können daher gefährlich irreführend, wenn der eigentliche Filter nicht ganz wie das funktioniert. Dies ist der Fall mit XAudio2 filtern. Für Tiefpass, Hochpass, Bandpass und Notch-Filter implementiert XAudio2 eine Art von digitaler Filter, bekannt als eine Biquad, die beinhaltet eines ziemlich einfachen Algorithmus, sondern erstellt einen einfachen Roll-off-Effekt für Tiefpass und Hochpass Filter nicht. (Wenn Sie den Algorithmus interessiert sind, folgen Sie den Links im Wikipedia-Artikel "Digital Biquad Filter" bei bit.ly/Yoeeq1.)
Biquad Filter neigen dazu, die Resonanz auf die Center-Frequenz ein Bandpass-Filter, und in der Nähe die Grenzfrequenzen der Tiefpass und Hochpass Filter. Dies bedeutet, dass der Filter nicht nur einige Frequenzen dämpft, sondern andere verstärkt. Um diese Filter Intelligent zu verwenden, müssen Sie diesen Effekt bewusst sein. Glücklicherweise ist diese Verstärkung relativ einfach vorherzusagen. Für den Bandpass-Filter wird die Amplitude einer Sinuskurve auf die Center-Frequenz um den Faktor Q gleich erhöht. Der Tiefpass und Hochpass-Filter ist die maximale Verstärkung in der Nähe der cutoff-Frequenz für höhere Werte von Q Q gleich, aber etwas größer als Q für niedrigere Werte.
Abbildung 4 zeigt die Auswirkungen aller XAudio2-Filter-Typen für eine Frequenz von 261,6 Hz (Middle C) und ein Q 1,414 festgelegt. Die horizontale Achse ist logarithmisch mit 3 Oktaven oberhalb und unterhalb mittleren c. Die vertikale Achse zeigt die resultierende Amplitude für Sinuskurven bei diesen Frequenzen. Die horizontale schwarze Linie bei einer Amplitude von 1 ist für kein Filter. Alle anderen Zeilen sind mit verschiedenen Farben gekennzeichnet.
Abbildung 4 die Wirkung der Filter für eine Q 1,414
Zum Beispiel der Lowpass-Filter kann nicht nur durch Frequenzen unterhalb der Grenzfrequenz, sondern verstärkt sie, und diese Verstärkung erhöht, da Sie an die cutoff-Frequenz näher. Der Hochpass-Filter hat den gegenteiligen Effekt.
Abbildung 5 ist ähnlich Abbildung 4 , aber für einen Q von 4.318, die mit einer Bandbreite von 1/3 Oktave verbunden ist. Beachten Sie, dass die vertikale Achse die höhere Verstärkung aufnehmen abweicht.
Abbildung 5 die Wirkung der Filter für eine Q 4,318
Möchten Sie einen einfachen Tiefpass oder Hochpass-Filter verwenden, der überhaupt zu verstärken, wird nicht, halten Sie sich an die 1-Pol-Filter. Diese sind sehr einfache Filter einfach unterliegt einer Grenzfrequenz und sie verwenden nicht die Q-Einstellung. Sie arbeiten viel wie einfache Bass- und Höhen-Steuerelemente auf ein Autoradio. Aber wenn Sie komplexere Filter verwenden möchten, muss Ihr Programm für jede Verstärkung durch den Filter kompensieren.
Wenn Sie lieber Ihre eigenen Filter implementieren würde, Sie können dies auch durch die Schaffung einer XAudio2 Audio Verarbeitung Objekt (XAPO), die eine Klasse, die Zugriff auf einen Audiostream erhält und Effekte realisieren.
Gerade das Volumen
Um mich (und Sie) mit Filtern experimentieren zu ermöglichen, habe ich eine Windows-8-Projekt mit dem Namen AudioFilterDemo, die im herunterladbaren Code für diesen Artikel enthalten ist. Abbildung 6 zeigt es läuft.
Abbildung 6 das AudioFilterDemo-Programm
Die drei Oszillatoren nach oben sind alle unabhängig voneinander steuerbar, mit einem Frequenzbereich umfasst 3 Oktaven auf beiden Seiten des mittleren C. Der Schieberegler ist eine logarithmische Skala aber einstellbar bis 10 Abteilungen zwischen den Noten, die ist eine Schrittweite 10 Cent genannt.
Der Filter hat eine Frequenz-Regler sowie ein Schieberegler für Q. Die Frequenz-Regler haben Tooltips, die die Note und seine Frequenz zu identifizieren. Abbildung 7 zeigt die Methode, die den Filter auf die drei Stimmen der Wellenform-Quelle immer es eine Änderung in den Steuerelementen gibt eingestellt wird.
Abbildung 7 AudioFilterDemo XAudio2 Filter Einstellparameter
void MainPage::SetFilterParameters()
{
if (pSawtoothOscillator != nullptr)
{
XAUDIO2_FILTER_PARAMETERS filterParameters;
if (currentFilterType != -1)
{
double cutoffFrequency =
440 * pow(2, (filterFrequencySlider->Value - 69) / 12);
filterParameters.Type = XAUDIO2_FILTER_TYPE(currentFilterType);
filterParameters.Frequency =
float(2 * sin(3.14 * cutoffFrequency / 44100));
filterParameters.OneOverQ = float(1 / filterQSlider->Value);
}
else
{
// Documentation:
// "acoustically equivalent to the filter being fully bypassed"
filterParameters.Type = LowPassFilter;
filterParameters.Frequency = 1.0f;
filterParameters.OneOverQ = 1.0f;
}
pSawtoothOscillator->GetVoice()->SetFilterParameters(
&filterParameters, XAUDIO2_COMMIT_ALL);
pSquareWaveOscillator->GetVoice()->SetFilterParameters(
&filterParameters, XAUDIO2_COMMIT_ALL);
pSineWaveOscillator->GetVoice()->SetFilterParameters(
&filterParameters, XAUDIO2_COMMIT_ALL);
}
}
Der untere Bereich ist ein Band-Meter skaliert in Dezibel. Dadurch werden die resultierende Lautstärke für eine bestimmte Wellenform und Filter-Einstellungen finden Sie unter. Das Programm macht keine Anpassungen Band anders als über Benutzereinstellungen. Wenn dieses Messinstrument in die Verlustzone geht, bedeutet dies, dass das Programm generiert einen Ton, der zu laut ist, und dieser Wellenform abgeschnitten werden, wird bevor ich auf die sound-System auf Ihrem Computer.
Das Band-Meter basiert auf eine vordefinierte Effekte-Klasse. Abbildung 8 zeigt den Code, die ich verwendet, um eine Instanz von diesen Effekt zu erstellen. Das Programm dann legt einen Timer und ruft GetEffectParameters zu höchstem Niveau des Klanges Ausgabe seit dem letzten Mal den GetEffectParameters genannt wurde.
Abbildung 8 erstellen ein Volume Meter Effekt
// Create volume meter effect
IUnknown * pVolumeMeterAPO;
XAudio2CreateVolumeMeter(&pVolumeMeterAPO);
// Reference the effect with two structures
XAUDIO2_EFFECT_DESCRIPTOR effectDescriptor;
effectDescriptor.pEffect = pVolumeMeterAPO;
effectDescriptor.InitialState = true;
effectDescriptor.OutputChannels = 2;
XAUDIO2_EFFECT_CHAIN effectChain;
effectChain.EffectCount = 1;
effectChain.pEffectDescriptors = &effectDescriptor;
// Set the effect on the mastering voice
pMasteringVoice->SetEffectChain(&effectChain);
// Release the local reference to the effect
pVolumeMeterAPO->Release();
Eine interessante Übung in diesem Programm ist, ein Rechteck oder Sägezahn durch einen Bandpass-Filter mit einem Q mindestens 4 oder so spielen. Wenn Sie die Filterfrequenz ändern, hört man die einzelnen Obertöne der Wellenform. Eine quadratische Welle hat nur ungerade Oberschwingungen, aber ein Sägezahn hat sowohl gerade und ungerade Oberschwingungen.
Die Grafik-Equalizer
Es war Zeit, jeden gut ausgestatteten Heim-audio-Setup einen Grafik-Equalizer mit eine Reihe von vertikalen Folie Potentiometer Steuern einer Bank Bandpass-Filter enthalten. In ein Grafik-Equalizer deckt jeden Bandpass-Filter zwei Drittel oder ein Drittel der Oktave in das gesamte Audiospektrum. Grafik-Equalizer dienen unter professionellen Tontechniker für die akustische Antwort eines Raumes anpassen, indem die Steigerung oder Schneiden von verschiedenen Frequenzen. Heimanwender häufig ordnen die Regler in einem "Lächeln"-Muster, wie imitiert Abbildung 9, der die niedrigen und hohen enden und mittleren Bereich weicher um Konversation nicht übermäßig stören verlassen.
Abbildung 9 das GraphicEqualizer-Programm
Das GraphicEqualizer-Programm können Sie eine MP3- oder WMA-Datei aus Ihrer Musik -Bibliothek von Windows 8 laden und spielen es durch einen 1/3-Oktav-Graphic-Equalizer. Das Programm enthält 26 vertikalen Schieberegler, von die jede einen Bandpass-Filter zugeordnet ist. Wie Sie sehen können, ist jeder Regler mit die Center-Frequenz für diesen Band beschriftet. Theoretisch sollte jede Mittenfrequenz die Kubikwurzel aus 2 (oder etwa 1,26) höher als der vorherige Filter, aber viele der Rundung wird eingesetzt, um die Zahlen sinnvoll zu halten. Basierend auf einer Fotografie von einer 1/3-Grafik-Equalizer, die ich auf Wikipedia gefunden, ich die 26 Regler, beginnend mit 20 Hz, 25, 31,5, 40 beschriftet und bis über 6,3 KHz, stoppen kurz die 7.350 Hz-Grenze für eine Abtastrate von 44.100 Hz.
Die meisten grafischen Equalizer haben eine separate Band der Potentiometer für linken und rechten Kanal, aber ich beschloss, diese Annehmlichkeit zu verzichten.
Sie haben gesehen, wie ein einzelner Filter für eine bestimmte IXAudio2SourceVoice-Instanz angewendet werden kann, aber das GraphicEqualizer-Programm muss eine Quelle Stimme 26 Filter zuweisen. Dies geschieht durch Erstellung von 26 Instanzen des IXAudio2SubmixVoice entspricht diese Filter (plus ein paar mehr) und das Erstellen von was in XAudio2 aufgerufen hat, ein "audio-Bearbeitung-Diagramm", siehe Abbildung 10. Jede Box ist eine Instanz eines der drei Schnittstellen, die von IXAudio2Voice abgeleitet und das Feld identifiziert den Variablennamen in das GraphicEqualizer-Programm verwendet.
Abbildung 10 verwendet die Audioverarbeitung-Grafik in das GraphicEqualizer-Programm
Eine IXAudio2SubmixVoice-Instanz kann nicht eigenständig-Sound erzeugen. Diese Berechtigung ist für Quelle Stimmen reserviert. Aber es kann erhalten Eingaben von einer Quell-Voices (oder eine andere Submix-Stimme); eine Band, Filter oder Effekt anwenden; und übergeben das Ergebnis auf einem oder mehreren Submix Stimmen oder der mastering-Stimme.
An der Spitze der Abbildung 10 ist die Quelle-Stimme, die die Musik aus einer Musikdatei generiert. Unten befindet sich die mastering-Stimme, die das Ergebnis auf dem Computer sound-Hardware verschickt. Dazwischen sind die Submix-Stimmen.
Es ist ein Push-Modell: Wenn Sie eine Quelle Voice oder Submix Voice erstellen, können Sie angeben, die Ziel-Stimme (oder Stimmen) die Ausgabe von die Stimme erhalten sollen. Später können Sie das Ziel der Ausgabe mit einem Aufruf von SetOutputVoices ändern. Wenn Sie in beiden Fällen NULL angeben, geht die Ausgabe auf die mastering Stimme.
Sie angeben, wo die Ausgabe einer Stimme mit einem Zeiger auf eine XAUDIO2_VOICE_SENDS-Struktur, die zwei Felder enthält, gehen:
- SendCount vom Typ unsigned integer
- pSends, ist ein Zeiger auf NULL oder mehr XAUDIO2_VOICE_DESCRIPTOR-Strukturen
Die SendCount gibt die Anzahl der XAUDIO2_VOICE_DESCRIPTOR Strukturen mit pSends gezeigt. Es kann sein, dass 0 (null), um anzugeben, dass die Stimme nicht überall gehen. Die XAUDIO2_VOICE_DESCRIPTOR-Struktur hat auch zwei Felder:
- Flaggen, die 0 oder XAUDIO2_SEND_USEFILTER
- pOutputVoice vom Typ IXAudio2Voice
Die beiden IXAudio2SubmixVoice-Instanzen, die wiederum in die Bank 26 Submix Stimmen und diejenige, die die Ausgabe von diesen 26 Stimmen konsolidiert sind nicht unbedingt notwendig, den grafischen Equalizer bauen, aber sie vereinfachen die Struktur des Programms. Wenn das Programm erstellt eine neue Quelle-Stimme — was geschieht, wenn der Benutzer in einer neuen Musikdatei lädt — es muss nur direkt die Quelle-Stimme der pSourceVoiceOutput Instanz ausgegeben.
Das Programm hat auch eine CheckBox-Taste, um den Equalizer zu umgehen. Alles, was nötig ist um den Equalizer aus dem audio-Bearbeitung-Diagramm zu trennen, rufen Sie SetOutputVoices auf die pSourceVoiceOutput mit einer NULL Zeiger angibt, dass es gehen sollte, um die mastering Stimme soll. Wiederherstellen des Equalizers umfasst ein paar Codezeilen Ausgabe von pSource wiederherstellenVoiceOutput zu pEqualizerInput.
Es gibt ein paar Möglichkeiten, die Filter zu definieren, die einen Graphic Equalizer zu bilden. Ein Ansatz ist für jeden Slider, das Q wird der Filter zu ändern — dass des Filters restriktiver, wenn Sie den Schieberegler erhöhen. Aber ich beschloss, den Q-Faktor der einzelnen Filter bei einer 1/3-Oktav-Bandbreite oder 4.318 konstant zu halten, und verwenden Sie den Schieberegler, um das Volumen der die Submix-Stimme zu variieren. Ich entschied mich für einen ±24-dB-Bereich für weitere extremen Auswirkungen Grafik-Equalizer in der Regel ermöglichen Wechsel der Bank von Schiebereglern zwischen einen Bereich ±6 dB und einen Bereich von ±12 dB
Wenn ein Equalizerschieberegler in seiner Mittelstellung ist, hat die entsprechenden Submix-Stimme ein Standard-Volumen von 1. Normalerweise würde das bedeuten, dass ein Ton gerade die Submix-Stimme unverändert durchläuft. Anwenden eines Filters mit einem Q 4.318 Submix Stimme bewirkt jedoch, dass die Amplitude zu erhöhen um einen Faktor von 4.318 auf der Center-Fregerphase. Um das auszugleichen, setzt das Programm das Volumen der Submix-Stimme-pEqualizerOutput auf 1 geteilt durch Q.
Mit alle Schieberegler legen Sie in ihren Mitte-Positionen verursacht durch Klicken auf das Kontrollkästchen, um den Equalizer ein-und die audio-Grafik wechseln keine Änderung in Band. Der Klang ändert sich ein wenig —zweifellos durch die Art und Weise die verschiedenen Bandpass-Filter Überlappung — aber das Gesamtvolumen nicht.
Die Equalizer-Regler haben ihre Eigenschaften Minimum auf-24 und maximal auf 24, festgelegt und entspricht des Gewinns in Dezibel. Wenn die Wertänderungen Schieberegler das Volumen wie für die entsprechenden Submix-Stimme in der ValueChanged-Ereignishandler festgelegt ist also:
Slider^ slider = dynamic_cast<Slider^>(sender);
int bandIndex = (int)slider->Tag;
float amplitude = float(pow(10, (args->NewValue / 20)));
pEqualizerBands[bandIndex]->SetVolume(amplitude, 0);
Dieser Amplitude-Berechnung ist eine Inverse von zuvor gezeigten Dezibel-Berechnung. Die resultierende Amplitude reicht von ca. 0,06 (bei-24 dB) bis ungefähr 16 (bei 24 dB). Wenn Sie im Hinterkopf, die jede Änderung von 6 dB eine Halbierung oder Verdoppelung der Zentrum-Amplitude von 1 ist behalten, sind diese Bereiche sinnvoll. Aber wenn Sie sich die Schieberegler auf ihre maximalen Einstellungen Kurbel, die Gesamtamplitude um den Faktor 16 steigt, und das Ergebnis wird wahrscheinlich abgeschnitten und verzerrt werden.
Mit anderen Worten, nimmt das Programm implizit, dass der Benutzer einen ausgewogenen Ansatz zum Leben erhält und einige Regler verringern wird, während die andere.
Charles Petzold schreibt seit langem redaktionelle Beiträge für das MSDN Magazin und ist Autor von „Programming Windows, 6th edition“ (O’Reilly Media, 2012), einem Buch über das Schreiben von Anwendungen für Windows 8. Die Adresse seiner Website lautet charlespetzold.com.
Unser Dank gilt dem folgenden technischen Experten für die Durchsicht dieses Artikels: Richard Fricks (Microsoft)