Hi, ich würde gerne wissen, ob es überhaupt möglich ist, einen "parametrischen" Equalizer im Flash zu erstellen. Nicht nur die üblichen grafischen Effekte, sondern auch ein Werkzeug, um die Ausgabe des Sounds zu modifizieren, der durch die Anwendung geht. Jede Referenz, Tipps Idee begrüßt. DankeErstelle einen Flash Equalizer (ändere den Ausgangsound)
Antwort
Es ist nicht sehr einfach sein ... aber hier könnte ein Weg sein:
var parameters:Array = [1,1,1,1,0.5]
var sound:Sound = new Sound();
sound.addEventListener(SampleDataEvent.SAMPLE_DATA, filter);
sound.load(soundURLRequest);
sound.play();
private function filter(event:SampleDataEvent):void
{
var freqDomain:Array = FFT(event.data, parameters.length); // You will need to find a FFT(Fast Fourier Transform) function to generate an array.
for(var i:int = 0; i < freqDomain.length; i++)
{
freqDomain[i] = freqDomain[i] * parameters[i]; // This is where your EQ parameters get applied.
}
var timeDomain:Array = IFFT(freqDomain, event.data.length); // Inverse FFT
for(value:Number in timeDomain)
{
event.data.writeFloat(value);
}
}
Einige auf der FFT und Funktionen IFFT, gibt in der Regel FFT komplexe Werte (real + komplexe Komponenten), der in Größen- und Phasenkomponenten umgewandelt werden. Was Sie wirklich brauchen, ist nur die Größe, die eine Formel = (sqrt (real^2 + complex^2)) hat. Menschen Ohren sind nicht empfindlich auf die Phase (im Gegensatz zu den Augen, die sehr empfindlich auf Phase sind), so wenn Sie die inverse FFT, können Sie eine zufällige oder flache Phase mit wenig Unterschied einfügen. Beachten Sie, dass mein Ansatz hinsichtlich der Filterimplementierung sehr gering ist.
Hier ist eine Fourier-Transformationsfunktion (nicht Fast, es ist nur eine Faltung (O (n^2)) vs FFT O (nlogn)) nur als Referenz (err .. es ist von der Spitze meines Kopfes, also wenn könnte mit den Konstanten falsch sein):
// Note that this only returns the magnitude, I am discarding the phase.
function FFT(sample:Array, size):Array
{
var frequencies = new Array(size);
for(int i = 0; i < sample.size; i++)
{
for(int j = 0; i < frequencies.size; j++)
{
var real:Number = sample[i] * Math.cos(Math.PI/2 * i * j);
var complex:Number = sample[i] * Math.sin(Math.PI/2 * i * j);
frequencies[j] += Math.sqrt(real * real + complex * complex);
}
}
return frequencies;
}
Überprüfen Sie Andre Michelle's labs page. Er macht eine Menge Arbeit mit Audo in Flash ... wahrscheinlich einer der besten. Ich bin mir nicht sicher, was eine parametrische Gleichung ist, aber Sie sollten in der Lage sein, einige gute Informationen auf dieser Seite zu finden.
Wahrscheinlich ein Satz von digital filters wäre die beste Wahl sein. Anders als bei der FFT müssen Sie mit dem digitalen Filter nicht die gesamte Wellenform im Speicher halten, da die digitalen Filter kausal sind und nur wenige Punkte in die Vergangenheit und/oder Zukunft schauen. Auch wenn Sie den Sound streamen können, können Sie diese einfach im laufenden Betrieb anwenden. Einfache Filter können einfach miteinander verkettet werden, um kompliziertere Filter zu erstellen.
Es gibt eine free book on digital filters, die einige grundlegende Theorie hat, aber wo man auch Formeln durchblättern und heben kann. Zum Beispiel, eine schnelle Durchsicht von Ch. 19 listet einfache Formeln für rekursive Hochpass-, Tiefpass- und Bandpassfilter auf, die wahrscheinlich den Zweck erfüllen werden, aber wenn Sie raffinierter werden wollen, gibt es im ganzen Buch viele andere Filter. diese
Das Problem mit FIR- und IIR-Filtern ist, dass es nicht trivial ist, dass sie an willkürlichen Frequenzparametern arbeiten. – CookieOfFortune
@Cookie - Dies gilt für einige digitale Filter, aber nicht für alle. Die Referenz, die ich erwähnte, listet mehrere Filter auf, die einfach zu berechnen sind, in nur ein paar sehr einfachen Codezeilen. – tom10
Update: fand ich ein Beispiel einer 3-band equalizer using Flash 10. Es verwendet andere Mathematik als CookieOfFortune erwähnt, aber es funktioniert (gut, es tat). Mit diesem Update habe ich das Beispiel für 5-Bänder aktualisiert und es für die Ausführung in Flex konvertiert. Sie können see the code on GitHub.
Wenn jemand irgendwelche Vorschläge hat, wie die Mathematik ausgeführt wird, wäre ich mehr als glücklich, davon zu hören. Ich weiß wirklich nicht viel in Bezug auf Klangmodifikation.
Original-Beitrag: Ich bin nicht sicher, wie viel dies helfen wird, aber das ist eine Notlösung, ohne den Schmerz der FFT und solche die Wirkung des Equalizers zu bekommen.
http://www.webdesign.org/web/flash/tutorials/sound-equalizer.5020.html
Grundsätzlich Sie mehrere Versionen der Sounddatei erstellen, legt jeweils eine vorgefertigte Equalizer-Einstellung. Wenn der Benutzer dann die Bässe oder Höhen einstellt, stellen Sie einfach die Lautstärke der jeweiligen Datei ein.
Sie können auch die extract() Funktion hilfreich auf dem Sound Variable finden: http://livedocs.adobe.com/flex/3/langref/flash/media/Sound.html#extract
Es scheint, dass sie FFT verwenden. Sie können diese Anweisungen ziemlich einfach verallgemeinern, um beliebige Bänder zu erzeugen (auf Kosten der Erhöhung der Pufferlänge). – CookieOfFortune
- 1. Wie erstelle ich Equalizer für Android
- 2. Einen Equalizer für MP3-Player machen
- 3. Sound mit Equalizer
- 4. Equalizer - Effektbibliothek nicht geladen
- 5. Erstelle Windows (.exe) -Datei mit Adobe Flash
- 6. kann ich mit AVAudioPlayer einen Equalizer-Player erstellen?
- 7. So verwenden Sie den nativen Equalizer in der App
- 8. einen Flash Player JavaScript
- 9. Erstelle einen Feuerregisterbericht
- 10. einen Flash-Stream mit HTML5
- 11. Wie ändere ich den Kopf in einen anderen Ordner?
- 12. Erstelle einen eindeutigen Dateinamen
- 13. Wie ändere ich den Etikettenstil?
- 14. Wie ändere ich den spark.ui.port?
- 15. Wie ändere ich eine Spalte und ändere den Standardwert?
- 16. C#: Wie erstelle ich einen Delegattyp aus den Delegattypen?
- 17. Wie erstelle ich einen ICalendar-Feed, den Leute abonnieren können
- 18. Wie erstelle ich einen NSManagedObjectContext
- 19. Wie ändere ich den Spaltennamen
- 20. Wie erstelle ich einen Timer
- 21. Wie erstelle ich einen Thread?
- 22. Erstelle einen Link zwischen Knoten
- 23. Wie erstelle ich einen Metagrammar?
- 24. Wie erstelle ich einen Zeitplaner?
- 25. RadioButton: Wie ändere ich den IsChecked-Zustand?
- 26. Inhalte über einen Flash 9 SWF anzeigen?
- 27. Flash-Konfigurationsdatei
- 28. Latex: Ändere den Nummerierungsstil für Algorithmen
- 29. PyQt: Wie ändere ich den customContextMenu-Trigger?
- 30. Page Load - White "flash" zwischen den Seiten
das Objekt event.data von Sample vergangen ist ein bytearray, kein Array. Empfehlungen zum Aktualisieren des Codes für die Verarbeitung eines Bytearrays Was ist auch erforderlich, um die IFFT zu machen? – klamping
ByteArrays ermöglichen die Indexierung (mit [i], um Teile zu greifen), so dass Sie es im Wesentlichen wie ein Array verwenden. Sie können IFFT-Algorithmen online finden, aber es wird im Wesentlichen die FFT erneut ausgeführt, aber mit unterschiedlichen Größen- und Phasenfaktoren. – CookieOfFortune