Salut, il aimerait savoir si c'est dans la mesure du possible créer un égaliseur "paramétrique" en flash. Pas seulement les effets graphiques habituels mais un outil pour modifier la sortie du son qui passe par l'application. Toute référence, idée de conseils bien accueillie. MerciCréer un Egaliseur Flash (modifier le son de sortie)
Répondre
Il ne va pas être terriblement facile ... mais voici peut-être un moyen:
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);
}
}
Certains sur la FFT et les fonctions IFFT, FFT sorties généralement des valeurs complexes (réelles + de composants complexes), qui peut être converti en composants de magnitude et de phase. Ce dont vous avez vraiment besoin, c'est seulement la grandeur, qui a une formule = (sqrt (real^2 + complex^2)). Les oreilles des humains ne sont PAS sensibles à la phase (contrairement aux yeux, qui sont TRÈS sensibles à la phase), donc quand vous faites la FFT inverse, vous pouvez insérer une phase aléatoire ou plate avec peu de différence. Notez que mon approche est très faible en termes d'implémentation de filtres.
Voici une fonction de transformation de Fourier (pas rapide cependant, c'est juste une convolution (O (n^2)) vs FFT O (nlogn)) juste pour référence (erreur .. c'est hors de ma tête si pourrait être mal avec les constantes):
// 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;
}
Découvrez Andre Michelle's labs page. Il fait beaucoup de boulot avec audo en Flash ... probablement l'un des meilleurs. Je ne suis pas sûr de ce qu'est un eq paramétrique, mais vous devriez être capable de trouver de bonnes informations sur cette page.
probablement un ensemble de digital filters serait votre meilleur pari. Contrairement à la FFT, avec le filtre numérique, vous n'avez pas besoin de conserver toute la forme d'onde en mémoire, car les filtres numériques sont causaux et ne regardent que quelques points dans le passé et/ou le futur. Aussi, si vous pouvez diffuser le son, vous pouvez simplement les appliquer à la volée. Les filtres simples peuvent être facilement enchaînés pour créer des filtres plus compliqués.
Il ya un free book on digital filters qui a une théorie de base, mais où l'on peut aussi juste parcourir et lever des formules. Par exemple, une lecture rapide de Ch. 19 répertorie des formules simples pour les filtres récursifs passe-haut, passe-bas et passe-bande qui feront probablement l'affaire, mais si vous voulez être plus chic, il y a beaucoup d'autres filtres dans le livre.
Le problème avec les filtres FIR et IIR est qu'il n'est pas trivial de les faire fonctionner sur des paramètres de fréquence arbitraires. – CookieOfFortune
@Cookie - Ceci est vrai pour certains filtres numériques mais pas tous. La référence que j'ai mentionnée répertorie plusieurs filtres faciles à calculer à la volée, en quelques lignes de code très simples. – tom10
Check this out: SoundFX, out-of-the-box audio filters with actionscript 3
Mise à jour: Je trouve un exemple de 3-band equalizer using Flash 10. Il utilise des maths différentes de celles de CookieOfFortune, mais cela fonctionne (enfin, c'est le cas). En utilisant cela, j'ai mis à jour l'exemple pour 5 bandes et l'ai converti pour fonctionner dans Flex. Vous pouvez see the code on GitHub.
Si quelqu'un a des suggestions sur la façon dont les maths sont exécutées, je serais plus qu'heureux d'en entendre parler. Je ne sais vraiment pas beaucoup en termes de modification sonore.
Original post: Je ne sais pas à quel point cela vous aidera, mais c'est un pis-aller pour obtenir l'effet de l'égaliseur sonore sans la douleur de la FFT et tel.
http://www.webdesign.org/web/flash/tutorials/sound-equalizer.5020.html
Fondamentalement, vous créez plusieurs versions du fichier son, chaque jeu à un réglage de l'égaliseur pré-faites. Ensuite, lorsque l'utilisateur ajuste les graves ou les aigus, il suffit d'ajuster le volume sonore du fichier respectif.
Vous trouverez peut-être aussi la fonction extract() utile sur la variable du son: http://livedocs.adobe.com/flex/3/langref/flash/media/Sound.html#extract
Il semble qu'ils utilisent FFT. Vous pouvez assez facilement généraliser ces instructions pour créer des bandes arbitraires (au prix d'avoir à augmenter la longueur de votre buffer). – CookieOfFortune
- 1. Modifier le chemin de sortie
- 2. Modifier la langue de sortie dans Flash CS4?
- 3. Flash - Modifier le caractère de fin CDATA?
- 4. Modifier flash avec Java
- 5. Un éditeur NetStream de Flash peut-il interrompre son flux?
- 6. Créer son propre codage
- 7. Méthode préférée pour boucler le son flash as3
- 8. Flash Tab Modifier les modifications
- 9. Modifier la sortie HTML de Tomcat
- 10. Comment créer un organigramme? Javascript ou Flash?
- 11. Comment créer un objet enum à partir de son type et de son nom?
- 12. En utilisant NSTask: congélation app après son retour de sortie
- 13. ne pouvait pas créer le fichier de sortie « »
- 14. Sortie Flash Trace vers Firebug Console
- 15. Modifier l'index z du contenu flash
- 16. comment créer une sortie personnalisée de JAXB?
- 17. Comment créer un processus qui survivrait son parent
- 18. Modifier UITableViewCell de UIViewController avec UITableView sortie sur iPhone
- 19. Modifier la source Flash par Python
- 20. Make binaires de sortie de génération IDE vers le dossier unique et résoudre ref son de ce
- 21. dois-je fermer() un son ou arrêter() le canal? (AS3)
- 22. Modifier le chemin de sortie par défaut pour le projet d'installation VS2008?
- 23. charger le son dynamiquement dans as2 ayant un problème
- 24. Désactiver le son de Javascript?
- 25. Créer un exécutable flash qui appelle des fonctions dll externes
- 26. Comment faire pour modifier un propriétaire de fenêtre en utilisant son handle
- 27. Comment arrêter un son dans AS3 pour reproduire un autre son?
- 28. Créer une interface Flash pour WordPress?
- 29. Comment empêcher un utilisateur de modifier d'autres profils que son propre contenu dans l'application Web MVC.NET?
- 30. Modifier la valeur d'une zone de texte pour son ordre actuel dans un onglet triable
l'objet event.data passé par SampleDataEvent est un bytearray, pas un tableau. Toutes les recommandations pour mettre à jour le code pour gérer un bytearray. Aussi, qu'est-ce qui est nécessaire pour faire l'IFFT? – klamping
ByteArrays permet l'indexation (en utilisant [i] pour saisir des parties), donc vous l'utilisez essentiellement comme un tableau. Vous pouvez trouver les algorithmes IFFT en ligne, mais il s'agit essentiellement de la FFT, mais avec des facteurs de magnitude et de phase différents. – CookieOfFortune