Forums Développement Multimédia

Aller au contenu

Comment faire un filtre audio passe-haut ?

CODE Actionscript

8 réponses à ce sujet

#1 thenaoh

    Ceinture Orange

  • Members
  • PipPipPip
  • 47 messages

Posté 09 July 2013 - 19:09 PM

Bonjour,

Je cherche à réaliser un filtre passe-haut (ou coupe-bas), afin de couper les basses fréquences d'un signal audio en cours de lecture.

J'ai bien trouvé quelques algorithmes ça et là, mais je n'arrive pas à les implémenter en actionscript.

Si quelqu'un a déjà réalisé un filtre audio de ce type, ça m'intéresse :smile: !

Merci par avance pour votre aide !

#2 Benzouye

  • Members
  • PipPipPipPipPipPipPipPip
  • 583 messages

Posté 10 July 2013 - 15:58 PM

Bonjour,

Je n'ai pas regardé dans le détail, mais tibibi0508 à poster des classes dans les contributions qui pourraient convenir : c'est ici.

Tentes ta chance ;)
Benzouye
Travaille avec FlashDevelop 4 + Flex SDK 4.6 open source

#3 thenaoh

    Ceinture Orange

  • Members
  • PipPipPip
  • 47 messages

Posté 10 July 2013 - 17:37 PM

Merci pour l'info !
Malheureusement, il n'y a rien qui puisse répondre à mon problème ...
D'autres suggestions ? ;-)

#4 Galacta

    Etudiant Ingénieur

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 689 messages

Posté 11 July 2013 - 08:17 AM

Salut,

Tu t'y connais un peu en traitement du signal etc ?

J'ai réalisé un Low pass filter dans le cadre de mon travail, essaye de l'adapter, il n'y a qu'une petite chose à modifier Image IPB


private function onSampleData(e:SampleDataEvent):void
  {
   var start : int = getTimer();
   const pi : Number = Math.PI;
   const sqrt2 : Number = Math.SQRT2;
 
   const qcRow : Number = 2 * pi * CUT_FREQUENCE / 44100;
   //const qcWarp : Number = Math.tan(qcRow);
   const qcWarp : Number = 0.2929231737200821;
 
   //const gain : Number = 1 / (1 + sqrt2 / qcWarp + 2 / (qcWarp * qcWarp));
   const gain : Number = 0.03432077180816782;
 
 
   const ax : Vector.<Number> = new Vector.<Number>(3, true);
   ax[0] = gain, ax[1] = 2 * gain, ax[2] = gain;
 
   const by : Vector.<Number> = new Vector.<Number>(3, true);
   by[0] = 1, by[1] = (2 - 2 * 2 / (qcWarp * qcWarp)) * gain, by[2] = (1 - sqrt2 / qcWarp + 2 / (qcWarp * qcWarp)) * gain;
 
   const xv : Vector.<Number> = new Vector.<Number>(3, true);
   const yv : Vector.<Number> = new Vector.<Number>(3, true);
   for (var i:int = 0; i < 8192; i++)
   {
        xv[0] = data.readFloat();
        xv[1] = xv[0];
        xv[1] = xv[1];
 
        yv[2] = yv[1]; yv[1] = yv[0];
 
        yv[0] = (ax[0] * xv[0] + ax[1] * xv[1] + ax[2] * xv[2] - by[1] * yv[0] - by[2] * yv[1]);
 
        e.data.writeFloat(y[0]);
   }
 
   trace("Latency : ", getTimer() - start, "ms");
  }
 

N'hésite pas si tu as des questions
Word hard, play hard.

#5 Beatrice78

    Ceinture Jaune

  • Members
  • PipPip
  • 15 messages

Posté 11 July 2013 - 08:43 AM

Bonjour, là comme ça je n'ai pas une réponse exacte à ton problème mais je t'ai chopé ce lien http://www.audiosoni...ltre_passehaut/
J'éspère que ça va t'aider!
www.imprimez-moins-cher.com

#6 thenaoh

    Ceinture Orange

  • Members
  • PipPipPip
  • 47 messages

Posté 11 July 2013 - 21:13 PM

Merci beaucoup tout le monde !

Alors depuis, j'ai trouvé une solution qui peut faire l'affaire pour mon besoin, en m'inspirant du code d'asModular (http://code.google.com/p/asmodular/), mais qui est assez basique, et je pourrais peut-être avoir mieux.

@Galacta : Pour répondre à ta question, il me reste quelques lointains souvenirs de traitements numériques du signal. Cela dit, merci pour ton exemple ! Je crois comprendre que tu utilises à juste titre de la FFT, saurais-tu juste me rafraîchir la mémoire et me dire ce qu'il y a à changer pour en faire un filtre passe haut ? Et à quoi correspond dans ton code "filter.w" (qui me bloque à la compilation) ?

Merci !! ;-)

#7 Galacta

    Etudiant Ingénieur

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 689 messages

Posté 20 July 2013 - 12:01 PM

J'ai édité mon code, désolé pour la coquille :)
Word hard, play hard.

#8 thenaoh

    Ceinture Orange

  • Members
  • PipPipPip
  • 47 messages

Posté 02 September 2013 - 10:56 AM

@Galacta : Merci ! Je vais jeter un coup d'oeil prochainement. Et désolé pour le temps de réponse pas mal long, j'étais en vacances ;-)

#9 thenaoh

    Ceinture Orange

  • Members
  • PipPipPip
  • 47 messages

Posté 04 October 2013 - 15:16 PM

@Galacta : Ca y'est, j'ai enfin pu le faire fonctionner ! Hélas, lorsque je teste sur de la musique électro par exemple, j'entends quelques "clics" sur les coups de grosse caisse (donc là où les basses sont au max) ... J'ai essayé de corriger ça, sans succès. Aurais-tu une idée ? Merci !!



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP