Se connecter
Se connecter

ou
Créer un compte

ou
FR
EN

Dessiner sa forme d'onde

  • 38 réponses
  • 10 participants
  • 9 744 vues
  • 12 followers
Sujet de la discussion Dessiner sa forme d'onde
Heureux possesseur de Reaktor, j'avais placé pas mal d'espoirs dans de la synthèse type "je dessine mon motif de forme d'onde" (motif qu'on boucle à la fréquence fondamentale)...

Mais en ayant essayé deux ou trois ensembles fait par la communauté d'utilisateur, je suis assez déçu de ce type de synthèse, et bizarrement ça sort toujours un peu le même type de sons, très souvents creusés... C'est vrai que c'est facile de dessiner une première harmonique, et de lui rajouter des biduleries qui vont créer des fréquences aigues, mais dessiner une 2nd, 3e harmonique c'est quasiment impossible...

C'est pourtant une technique qui se présentait bien, typiquement rendue possible par les outils de notre époque, et qui pourrait apporter des familles de sons un peu différentes... enfin le croyais-je.

une extension qui m'intéresserait alors, ce serait de partir de formes d'ondes standards ou de samples et de leur placer des points qu'on pourrait faire varier verticalement ou horizontalement ( par des lfo, enveloppes, etc, enfin les trucs habituels), et qui "tireraient" la forme d'onde derrière eux. Vous voyez ? Personne n'a envie de créer un ensemble qui ferait ça sur Reakor svp ? :clin:

Il Sorpasso, qui aimerait bien laisser la synthèse soustractive au monde analogique, et qui n'aime pas trop trop la FM.
2
Yep, je vois un peu le delire...

genre dessiner une forme d'onde au niveau temporel avec des truc genre des courbes de beziers, et puis ensuite, faire varier les parametres de ces courbes en fonction du temps

Ca peut etre tres sympa, mais compliqué a faire :boire:
3
J'avais fait un petit programme sur ce principe il y a quelques années.
En C de brute, avec une interface graphique homemade. Il y avait une fenètre pour dessiner sa forme d'onde et ça la jouait à le fréquence voulue.

Ca sortait une bouillie sonore infâme... C'était marrant, de loin ça ressemblait à la musique des jeux atari de mon enfance... de très très loin. Aves mes maigres connaissances de physique de lycéen j'avais laissé tomber, ça me dépassait. J'ai pas cherché à implémenter l'ADSR.

Maintenant j'ai compris qu'en fait dans ma synthèse (de bêtes polynomes, vu que la forme d'ondes venait des courbes de bézier) je dépassais la fréquence de nyquist, donc j'avais de l'aliasing dans tous les sens.

Même en ayait compris ça, je sais pas trop comment corriger le problème.
Si je suis motivé je vais rejeter un oeil dessus.
4
Je ne connais pas les courbes de bézier, seraient-ce des courbes pour rejoindre un point à un autre en choisissant un degré de convexité/concavité ?
5
Pour eviter l'aliasing, il te faut un traitement temporaire

Tu dessines ta courbe...avec un echantillonnage super fin (FE est tres grand)
ensuite, tu filtres passe pas pour que ca coupe a la frequence d'echantillonnage audio/2...ensuite tu decimes tes echantillons pour arriver a la fréquence d'echantillonnage audio (celle qui t'interesse)
6
Ouais c'est ça, comme dans les logiciels de dessin : t'as deux points pour l'origine et la destination, et deux autres points pour régler la concavité.
7
Hum hum ça me donne envie d'y rejeter un oeil tout ça ...

En plus ça doit pas demander trop de calcul, le filtrage je peux le faire une fois pour toutes .. ou du moins juste quand la forme d'ondes est modifiée.
8
Une fois que tu as dessiné ta forme d'onde :mrg:

- tu dessines
- tu filtres
-tu redessines ton truc sans aliasing

(Wolfen t'es ou ?)
9
Pour les courbes de Bézier, jette un oeil sur l'article de Wikipédia, y a des liens avec toutes les formules nécessaires pour appliquer le truc. Quelque chose que tu pourrais expérimenter aussi, c'est les polynomes de Chebyshev (sur Wikipédia y a aussi un article dessus, ainsi que sur MusicDSP.com). Ca permet d'ajouter des harmoniques à un signal quelconque sans le moindre aliasing, et tu pourrais t'amuser à contrôler l'amplitude de chacun avec un LFO par exemple :clin:

Développeur de Musical Entropy | Nouveau plug-in freeware, The Great Escape | Soundcloud

10
Contrôler l'amplitude des harmoniques par un lfo ou autre c'est intéressant c'est vrai... mais je crois que le subharmonic (ou un nom avoisinant) de reaktor le fait déjà plus ou moins. Il sort d'ailleurs d'excellents sons.

je pense que ce résultat serait plutôt prévisible, mon truc graphique avec des points qui bougent (on oublie le dessin, on part d'un sample allez), je le sens plus "surprenant"

mais jamais je prendrais le temps d'implémenter un truc pareil, perso :mdr:
11
Je viens de retrouver mon code ... c'est du grand n'importe quoi :mdr:
A l'époque je savais pas qu'il existait des librairies pour pas réinventer la roue à chaque fois, du coup j'ai tout implémenté moi même :mdr:

Je crois que si je m'y remets je vais reprendre à zéro :roll:
12
Je viens de zieuter wikipedia, ça parle de courbes de bézier paramétriques (x = f(t) et y = f(t))... pour l'audio l'approche est un peu différente, il faut des fonctions en y = f(x)
Mais j'ai déja le code qui fait ça.

J'étais un nerd au lycée quand même :mdr:
13
Pour ton problème, tu n'as besoin que d'une seule dimension des courbes de béziers : amplitude_signal = f(temps) et tes pôles sont les amplitudes "imposées" par ton dessin à un temps t.

Par contre fait attention avec les courbes de bézier, elles sont totalement instables et imprévisibles lorsque tu veux changer les valeurs des pôles (ou des points du polynome caractéristique). En effet un changement local modifie toute la courbe. Pour feinter, on utilise plusieurs courbes (degrès 3 en général) que l'on raccorde avec la continuité C². Mais c'est un beau bordel !
C'est pour cela que l'on utilise plutôt les Nurbs ou les B-Splines car la modification d'un paramètre ne change que localement la courbe. Par contre c'est plus complexe à appliquer car tu as des points de contrôle en plus des pôles.

Après faut voir ce que tu cherches exactement ... Si c'est pour de l'expérimental et des résultat spé, garde les courbes de Béziers. Sinon si tu veux vraiment être précis et quantifier tes modifications renseigne toi d'abord sur les Nurbs et B-Splines.

:coucou:
14
Les bezier par morceaux sont quand meme plus intuitive a manipuler. Et pas sur que la continuité C² ou infini s'entede a l'oreille?
15
Je suis parti sur les béziers par morceaux, avec une continuité C1. Je cherche pas une grande précision, du moins pas pour l'instant. Je veux juste voir si ça marche.

D'ailleurs c'est pas vraiment des courbes de Bézier, la longueur des segments de contrôle n'est pas prise en compte, juste leur pente.

J'ai aussi du code d'un de mes projets d'info, qui fait des splines par morceaux entre des points donnés et qui est assez optimisé. Il faudrait juste le modifier pour rajouter la continuité entre t=0 et t=T.

Avant de me plonger dedans de toutes façons j'attends de rentrer en France pour récupérer mes notes sur ce projet et mes cours de traitement du signal.

Je vais quand même regarder les Nurbs et les B-Splines.
16
Je fais remonter ce topic, parce que je me suis rendu compte en lisant vraiment la doc de l'instrument Oki Computer de Reaktor, qu'il s'approchait franchement de très près de ces formes de synthèse. Leurs presets ne le mettent pas vraiment en avant, mais j'ai l'impression que cet instrument peut sortir des sons évolutifs vraiment réussis. En plus ils ont un peu bossé sur l'anti aliasing apparemment dans la dernière version, ça n'était pas du luxe.
17
Pour démontrer que ça marche, voici un modeste petit essai en instrument Vst (je me suis basé sur le vstxsynth du sdk de steinberg donc la partie midi n'est pas top):

http://molecule.free.fr/spline/MazSpline_v0.1.dll

Attention, pas d'interface graphique ! La spline est divisée en 6 Pôles répartis régulièrements et que l'on peut faire bouger. Si vous mettez un oscillo à la sortie, on peux observer ce genre de trucs :



Bon, y'a pas encore la continuité C1 et l'attaque d'une note est brutale, ça clippe :


Pour l'instant tout les sons se ressemblent assez, mais je pense qu'il pourrait y avoir un bon potentiel à développer avec plus de pôles.
18
Eh eh, good job :boire:
19
Mais c'est qu'il est rapide le choquounet ! :clin:

Si t'arrives à sortir des sons exploitables avec ce truc, n'hésite pas ...
:boire:
20
Flag topic hyper intéréssent.
21
Au niveau temps de calcul on peut prévoir cb de notes de polyphonie? Tu prévois de distribuer les sources? J'aimerias bien m'en faire un effets jack ou ladspa.
Si j'ai le temps je pourrais même peut être faire une interface graphique (Dans l'idéal ça pourrait etre une interface utilisant une api portable sous windows)
22
Je suis en train de faire une nouvelle version avec 20 pôle et une vraie interface graphique (VstGui, je ne sais pas si c'est compatible avec toutes les plateforme ...).

Par contre mon algorithme de calcul de spline n'est pas très optimisé, donc ça rame énorme si on demande trop de points pour l'interpolation (256 pour l'instant :( en restant en monophonique) ce qui fait qu'on a beaucoup d'aliasing, surtout pour les notes graves... mais je ne perds pas espoir :bravo:
23
C'est pas possible d'avoir une méthode itérative sur l'axe du temps?

Cette librairie pourrait t'aider
http://libnurbs.sourceforge.net/
24

Citation : une méthode itérative sur l'axe du temps


:???: C'est-à-dire faire un calcul pour chaque pas de temps ?

Pour l'instant, je recalcule la forme d'onde pour chaque buffer que le programme envoie à l'host Vst, sauf si aucun paramètre n'a changé bien sûr. Je ne sais pas si c'est exactement ce que tu veux signifier.

Au niveau de la bibliothéque je me suis fais ma propore lib qui calcule une B-Spline (particularisation des Nurbs). Mais je ne me suis pas encore plongé dedans pour l'optimiser (ou la changer ;)).
25
Waou ,

ça fait 2 ans que je cherche désespéremment un soft capable de faire une forme d'ond a partire d'une courbe bézier, si y'ena un ki le sort, je suis son serviteur à vie :aime: