voila mon problème
j'ai un son de batterie qui dure quelques secondes et une sequence de 12 images,
avec mon Son j'en extrait une enveloppe > Assistant image clé > Convertire les données audio en image clé' bref pour déterminer le moment d'arrivée des piques je fais un delta avec cette expression :
- Code: Tout sélectionner
Delta = math.abs(thisComp.layer("Amplitude audio").effect("Les deux couches")("Curseur") - thisComp.layer("Amplitude audio").effect("Les deux couches")("Curseur").valueAtTime(time - framesToTime(1)));
et ça fonctionne, ensuite à chaque fois que je dépasse une certaines valeur avec ce delta que je détermine manuellement en fonction des pics que j'ai (ici 0,2 semble bien) j'aimerais incrémenter un compteur genre
- Code: Tout sélectionner
Seuil = 0,2;
if (Dela > Seuil) Z = Z + 1; //ou Z++ comme vous voulez
mais c'est là que ça se gâte malheureusement c'est pas possible d'incrémenter comme ça une variable dans after effect qu'ils disent sur le forum de creativecow, j'ai bien essayé avec valueAtTime genre dans pour l'expression d'un texte qui m'indiquait si le compteur s'incrémentait bien ou non j'ai fait
- Code: Tout sélectionner
Z = text.sourceText.valueAtTime(time - framesToTime(1)) + 1;
mais ça ne marche pas non plus je ne comprends pas pourquoi d'ailleurs.
à terme ce que je veux faire c'est qu'a chaque fois qu'il y a un nouveau Son de percu ou autre qui se produit After Effect avance dans une petite sequence d'image, ça pourrait être super marrant de faire ça
Quelqu'un peut m'aider ?
Edit:
Bon apparement il y a une solution si je fais une boucle et qu'au fur et à mesure que j'avance je recalcule tout depuis le debut genre comme ça :
- Code: Tout sélectionner
threshold = 2;
Longueur_Sequence_Image = 12;
f = Math.round(time/thisComp.frameDuration);
Z = 0;
for (i = 0; i <= f; i++){
Delta = Math.abs(thisComp.layer("Amplitude audio").effect("Les deux couches")("Curseur").valueAtTime(i*thisComp.frameDuration) - thisComp.layer("Amplitude audio").effect("Les deux couches")("Curseur").valueAtTime(i*thisComp.frameDuration - framesToTime(1)));
if(Delta > threshold) Z= (Z+1)%Longueur_Sequence_Image;
}
value =Z;
Seulement après 200 frames le calcul devient tres long snif