30

chapo!
Zeph (./26) :
Je déphase chaque harmonique pour éviter d'avoir des pics trop hauts, mais c'est un déphasage bidon donc ça ne sert surement à rien (il faudrait que je trace visuellement le signal pour vérifier)

les déphasages sont potentiellement utiles non? je sais pas trop.
Regarde ce que donne la fft, normalement tu obtiens un résultat complexe x(f)+iy(f), l'amplitude c'est sqrt(x^2+y^2) et la phase arctan2(y,x). Normal.

pour info c'est quoi les amplitudes relatives de chaque harmonique par rapport au fondamental? grin

31

squalyl (./30) :
les déphasages sont potentiellement utiles non? je sais pas trop.

Utiles certainement, mais bien fichus dans mon algo basique, sûrement pas grin
pour info c'est quoi les amplitudes relatives de chaque harmonique par rapport au fondamental? grin

Quand tu fais la FFT du signal produit par l'enregistrement d'une note d'instrument, et que tu prends sa valeur absolue, tu obtiens une courbe qui présente un pic très net pour chacune des harmoniques de ta note. Dans mon cas, un "la" au piano donne après FFT-isation une courbe avec un pic correspondant à 440hz, un autre à 880hz, un autre à 1760hz et ainsi de suite. Ce sont les ordonnées correspondant à ces pics que j'ai récupérées et que j'utilise comme coefficients pour les harmoniques de chaque note que je veux ensuite jouer. Par contre je colle une enveloppe commune à la fréquence de base et ses harmoniques, et ça c'est peut-être extrêmement faux, j'en sais rien ^^
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

32

oui je sais bien, je te demandais justement les rapports d'amplitude que tu as utilisé grin

genre pour un signal rectangulaire c'est
1 -> 1
2 -> 0
3 -> 1/9
4 -> 0
5 -> 1/25
2n -> 0
2n+1 -> 1/((2n+1)^2)
etc

pour un signal triangulaire c'est
1 -> 1
2 -> 0
3 -> 1/3
4 -> 0
5 -> 1/5
2n -> 0
2n+1 -> 1/(2n+1)

(je crois, de mémoire)

et pour un son "pianolaire" c'est quoi?

(sinon je pense que l'enveloppe est commune vu qu'elle enveloppe tout le signal #modui#)
edit: ptet pas en fait mais je pense que t'es pas loin comme ça, si tu veux finasser tu peux essayer de faire décroitre plus vite les harmoniques, qui s'amortiront plus vite que le fondamental.

et puis sinon bon courage: http://www.google.fr/search?hl=fr&q=software+synthesizer&gs_sm=e&gs_upl=2436l6065l0l7003l20l15l2l0l0l2l731l5599l0.1.1.7.3.1.1l15l0&bav=on.2,or.r_gc.r_pw.,cf.osb&biw=1280&bih=591&um=1&ie=UTF-8&tbm=isch&source=og&sa=N&tab=wi #modlove#

33

Juste pour info, parce que quand j'étais en classe de composition & informatique musicale on faisait de la synthèse sonore (mais pas à aussi bas niveau grin on utilisait des outils graphiques pour fabriquer des sons d'instrument avec de la synthèse additive, soustractive et à modulation de fréquence)...
Comme exercice de base, on nous faisait faire un son de clarinette. Il y a des sons plus simple à synthétiser (flûte et cor dans l'aigu) sur le plan harmonique, mais c'est tellement simple que ça ne ressemble pas du tout à l'instrument réel (qui, vu le peu d'harmoniques en jeu, sont plus définis par leur transitoire d'attaque et leur enveloppe que par les harmoniques).
Pour faire une clarinette, donc, on prend les harmoniques impaires et uniquement celles-ci. Bon, c'est un son "approchant" la clarinette, bien sûr, et il manque toujours le transitoire d'attaque et l'enveloppe générale, mais ça sonne vite correctement smile.
Ensuite, comme second exercice, on devait fabriquer l'enveloppe d'une note de piano, avec n'importe quel son ; on arrive ainsi rapidement à faire des choses très sympa (qui se rapprochent des sons de clavinet de la seconde partie du XXème siècle).
avatar

34

35

./32 : oh pardon ^^

Pour les exemples de ./21, j'ai utilisé ça comme coefficients :static const double factors[] = {1.00f, 0.50f, 0.40f, 0.45f, 0.36f, 0.01f, 0.30f};

J'ai aussi essayé de pousser un peu plus loin avec ça, mais c'est encore moins bon :static const double factors[] = {4.50f, 2.01f, 1.30f, 1.50f, 1.24f, 0.10f, 0.70f, 0.10f, 0.60f, 0.55f, 0.50f, 0.55f, 0.80f, 0.30f, 0.50f, 0.55f, 0.26f, 0.26f, 0.10f, 0.10f, 0.10f, 0.05f};

(c'est de l'estimation 100% pifométrique d'après le graphe de la courbe grin)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

36

Rien ne vaux le Linear Arithmetic embarrassed wink

Honnêtement bravo pour ce que tu as fait ^^
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

37

38

Godzil (./36) :
Rien ne vaux le Linear Arithmetic redface.gif wink.gif
Oui, mais c'est une synthèse qui utilise des échantillons, donc c'est pas vraiment de la synthèse "pure" (où tu pars vraiment de zéro).
avatar

39

./35 Pour une meilleure estimation des amplitudes et des fréquences, tu pourrais utiliser les méthodes haute résolution au lieu d'une transformé de Fourrier smile
avatar

40

Certes, mais ça reste de la synthèse additive, qui est pas vraiment adaptée pour les sons de piano smile
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

41

Nil (./38) :
Godzil (./36) :
Rien ne vaux le Linear Arithmetic redface.gif wink.gif
Oui, mais c'est une synthèse qui utilise des échantillons, donc c'est pas vraiment de la synthèse "pure" (où tu pars vraiment de zéro).

Les échantillons sont apriori généré a la volée suivant le matos que tu utilise, et les échantillons ne sont pas forcement des son d'instruments
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

42

L'attaque est tout de même générée en utilisant un sample wink
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

43

Rien n'empeche bob de faire la meme chose embarrassed


wink
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

44

Bon, comme la génération de son fait appel à trop de connaissances que je n'ai pas, j'ai modifié mon machin pour utiliser des .wav comme instruments. C'est fait de façon assez immonde, je n'ai qu'une seule note (un DO moyen) par instrument, et les échantillons sont étirés ou compressés selon le besoin pour atteindre la note voulue.

J'imagine que c'est une version très (très) rudimentaire de ce que font les formats Downloadable Sound (.dls) et Soundfont (.sf2), mais ils ont l'air l'un comme l'autre assez costauds à implémenter. Pour le premier je n'ai pas pu mettre la main sur une spec, et pour le deuxième j'ai pris peur rien qu'à voir tous les paramètres de modulation du son grin

Bref du coup je peux convertir pas mal de musiques MIDI avec une qualité bien pourrie, ça reste amusant comme résultat mais je suis pas sûr que ce soit la bonne direction à prendre ^^

[flash=200,20]http://www.mirari.fr/module/file/player/dewplayer.swf?mp3=http%3A%2F%2Fwww.mirari.fr%2F/6xSI[/flash]
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

45

C'est pas mal, on dirait du MOD love
avatar

46

pour décaler un signal en fréquence "il suffit de" multiplier chaque échantillon par exp(i delta_omega t)

enfin je crois, tu peux toujours tester, ça pourrait faire des trucs rigolos.

ça marche sur des complexes, donc au départ chaque échantillon n'a qu'une partie réelle et la partie complexe est nulle, et tu obtiendras des complexes, donc faudra en prendre la norme sqr(x^2+y^2) (ou bien alors juste la partie réelle, je crois pas mais on sait jamais)

http://music.columbia.edu/pipermail/music-dsp/2005-February/062795.html

47

J'ai envie de gerber, ça me rappelle les cours de traitement du signal à l'iut
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

48

Corrélation!

Dirac!

Hilbert!

Pôle!

Shannon!

Bon tu devrais avoir l'estomac vide là cheeky

49

#gerb6#
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

50

Nil (./45) :
C'est pas mal, on dirait du MOD love

Forcement, c'est comme ça que ça marche hehe
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

51

Vivi, je sais, même si la sortie n'est pas un wav mais la sortie son ^^
avatar

52

Zeph > maintenant tu peux essayer de générer un fichier stéréo à partir d’une description 3D de la position des sources sonores oui
avatar
« Le bonheur, c'est une carte de bibliothèque ! » — The gostak distims the doshes.
Membrane fondatrice de la confrérie des artistes flous.
L'univers est-il un dodécaèdre de Poincaré ?
(``·\ powaaaaaaaaa ! #love#

53

Zeph > pas mal du tout ! top

squalyl > nan non grin
Ton truc c'est de la modulation AM, ça fait une translation dans l'espace fréquentiel : si tu as par exemple le mélange d'un sinus à 100 Hz (f1) et d'un autre à 220 Hz (f2), et que tu modules à 100 Hz (f3), tu obtiens en sortie un sinus à 200 Hz (f1 + f3), mais aussi un à 320 Hz (f2 + f3), un à 0 Hz (f1 - f3) et un à 120 Hz (f2 - f3).

Ce qu'il faut c'est une homothétie (un truc qui conserve les rapports de fréquence), par exemple avec un rapport 2 si tu veux décaler d'une octave vers le haut, du coup tu obtiens un sinus à 200 Hz et un autre à 440 Hz.

(Les deux sont équivalents seulement si le signal est un sinus pur.)

L'homothétie ça s'obtient en réenchantillonnant, la méthode la plus simple c'est (pour chaque échantillon de sortie) :
échantillon_sortie = échantillon_entrée[pos];
pos += fréq_sortie / fréq_entrée;

Bon évidemment on obtient des valeurs de pos qui ne sont pas entières. Y'a des algos pour évaluer mathématiquement la valeur du signal échantillonné entre les échantillons, mais ils sont assez lourds. En pratique une interpolation "classique" donne de bons résultats ; rien qu'une interpolation linéaire, c'est déjà beaucoup mieux que rien. Perso je le fais avec une polynôme d'ordre 3 (je prends les 2 échantillons avant la position, les 2 après, je calcule l'équation du polynôme qui passe par ces 4 points, et je l'évalue en x = le point que je cherche), et les résultats sont très corrects à l'oreille.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

54

C'est bien la première solution que j'ai utilisée ; j'ai voulu faire une interpolation linéaire dans un premier temps mais ça a donné absolument n'importe quoi, donc par flemme je suis repassé à un ré-échantillonnage "au plus proche" et c'est probablement ça qui donne un son aussi crasseux.

Il faudra que je réessaie avec des méthodes moins mauvaises, mais ça ne sera jamais aussi bon que ce qu'on peut avoir avec des échantillons multiples pour chaque instruments (+ plein de constantes que je ne sais pas utiliser, ne connaissant pas les équations dans lesquelles les utiliser), du coup je suis pas super motivé ^^

Sally : oui, mais pour l'instant je ne gère pas (du tout) le stéréo donc il y a des étapes avant grin
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

55

(Le plus facile c’est quand même de monter d’une octave tout en multipliant le tempo par 2 oui)
avatar
« Le bonheur, c'est une carte de bibliothèque ! » — The gostak distims the doshes.
Membrane fondatrice de la confrérie des artistes flous.
L'univers est-il un dodécaèdre de Poincaré ?
(``·\ powaaaaaaaaa ! #love#

56

(cross) c'est exactement ce qu'il fait, mais ça sux, ça change la durée du son. Il faut interpoler puis filtrer pour éviter l'aliasing.

et pour info, mon opération c'est un mélange, pas un AM, donc upconversion/downconversion. Et comme on le fait en complexe, on fait un mélange avec deux signaux en quadrature, donc si je parlais de radio, on dirait que j'ai un modulateur de BLU. Tu prends le spectre et tu le décales.

Tu fais de la modulation AM uniquement si tu mélanges avec un sinus (ou un signal réel).

En faisant un mélange avec un complexe, tu annules le lobe gênant du spectre qui apparaitrait en AM.

Et ça fait exactement ce qu'il faut: une translation fréquentielle pour obtenir toutes les notes à partir d'un sample unique, plutôt que de changer la fréquence d'échantillonnage du sample, qui change aussi sa durée.

57

Non, tu te plantes. Ce que tu décris c'est du pitch-shifting, et :
- c'est plus complexe qu'un réenchantillonnage, et il y a une dégradation de qualité qui fait que ce n'est pas avantageux pour générer des notes
- ça ne se fait avec de l'hétérodynage. t'as qu'à essayer sur un extrait de musique si tu me crois pas tongue
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

58

on est bien d'accord en fait, le pitch shifting c'est de la modulation BLU, mais c'est pas grave grin que la qualité soit éventuellement pourrite c'est autre chose, a mon avis il faut un signal suréchantilloné à la base, et des filtres passe-bas après l'opération.

http://en.wikipedia.org/wiki/Single-sideband_modulation
en fait tu fais la somme de 2 modulations AM en quadrature de phase, ce qui annule la bande latérale qui t'intéresse pas, j'avoue que c'est sournois.

Moi j'attends que Zephyr tente de l'implémenter et poste un résultat tongue

Zephyr, t'as compris ce qu'on veut te faire expérimenter? grin

4636a569c61e51f5dd8d47439f265dba.pngc3d52fc58b4cce6452722401379d766a.pnga53753f31cfb10a8f78a4940f4abff46.png

cette expression te donne les samples de n'importe quelle note en se basant uniquement sur ton sample original et la fréquence que tu veux. et tous les samples auront la même longueur.

s chapeau est le conjugué, pour ton signal réel ça change rien.

59

Heu ouais enfin teste toi-même, mon temps ne suffit déjà pas pour mes propres expérimentations, je vais pas implémenter les vôtres grin
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

60

boaf c'est pas compliqué pourtant. et puis t'as eu le temps pour rééchantilloner tes samples, alors tu peux bien remplacer cette fonction par un machin qui multiplie par des cosinus nan? tongue

(et je préfère passer mon temps à mélager des fréquences plus élevées que de l'audio grin)