Se connecter
Se connecter

ou
Créer un compte

ou

Sujet Création d'un synthé sous Matlab (Choc par ici !)

  • 114 réponses
  • 7 participants
  • 14 242 vues
  • 9 followers
Sujet de la discussion Création d'un synthé sous Matlab (Choc par ici !)
Salut à tous et à Choc qui a intérêt à se ramener vite fait :ptdr:

Bon, je me suis acheté un Palm T|X pour pouvoir faire tourner dessus le séquenceur MIDI Bhajis Loops (basé sur un sampleur et sur des banques d'échantillons, une vraie tuerie ce soft !). Donc j'ai commencé à sampler plein de trucs à droite et à gauche pour en faire des WAV qui sont lisibles par ce logiciel.

Je me suis dit que c'était comme même dommage qu'il n'y ait pas de VSTis sur ce séquenceur, même si je sais pertinemment que de toutes façons, au vu de la puissance des CPU pour Palm, ça serait complètement impossible... Du coup je me suis dit que ça serait génial d'avoir un synthétiseur sur Palm, qui ne fonctionne pas en temps réel mais qui permette d'exporter des WAV pour les utiliser dans Bhajis Loops ! Ca serait parfait.

J'ai donc deux solutions pour faire ça : la première c'est de développer un soft avec un compilateur pour Palm OS, comme HB++... Ca a l'air un peu pénible comme même mais c'est faisable...

La deuxième solution, qui me convient le plus, c'est un Matlab like gratuit qui existe sur Palm OS qui s'appelle LyME ! Ainsi, j'aurais qu'à écrire le programme et changer les définitions de variables au début pour le paramétrer... En plus je crois qu'il y a des fonctions pour faire une vraie GUI donc c'est parfait. Le seul hic, c'est que ce soft ne fait pas encore l'import/export en WAV, mais j'ai contacté les developpeurs à ce sujet, donc ça sera peut être possible...Donc, en attendant, je vais m'y mettre sur Matlab !

En gros, si vous avez des conseils, je suis preneur... Je vais faire un truc de synthèse additive pour commencer avec 2 ou 3 oscillos, autant de filtres, un LFO etc. et ensuite il faudra que l'utilisateur spécifie un fréquence d'échantillonnage et une note/octave, pour créer un fichier WAV correspondant... Bref il me faut un truc versatile, qui crée une bonne variété de sons différents, et peut-être que je vais tester ensuite d'autres types de synthèse. Quelques suggestions ? Des remarques sur mon projet ?

Autre question en passant : qu'est-ce qui donne le caractère de tel ou tel autre synthétiseur numérique ? Est-ce les formes d'ondes (par exemple un sinus bruité modélise sur du sinus analogique au lieu d'un sinus numérique parfait), la nature des filtres ?

Choc > je suis en train de me plonger dans tes sources Matlab sur la synthèse, c'est très intéressant et ça va bien m'aider :bave:

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

Afficher le sujet de la discussion
51
Ca fait 4 ans que je suis sur musicdsp (la mailing list), et recemment, il y a moins de participation. Faut voir ca comme un site applicatif. Si tu veux de la rigueur, il faut se plonger dans les articles de revues et de conf, il y a pas vraiment d'autre moyen, je pense.

Sur la mailing list de musicdsp, t"as quand meme des gars qui sont bons, chacun avec leur truc: t'as Robert B. Jones, comme les fameux filtres RBJ, t'as plusieurs pros qiu bossent dans des boites de MAO, un gars qui a bosse pour fairlight, etc... Il y a aussi le newsgroups comp.dsp.lang, de memoire, qui est plus technique.

Citation :

Hors sujet : Gabou, t'as commencé une autre thèse ? ca porte sur quoi ?



Je commence cette annee, a l'universite de Kyoto, en traitement de la parole, mais pas en reconnaissance. Je suis pas encore sur, j"ai le choix entre faire un truc applicatif sur l'analyse de discussions, mais ca me botte de moins en moins, ou alors axer plus sur la reconnaissance de parametres non verbaux de la parole tels que le pitch, prosodie, etc... La, en ce moment, je bosse sur la detection de voix en milieu bruite, je bosse sur un article que j"espere publier a Interspeech

52

Hors sujet : Cool :bravo: Comme je bosse plutot sur des systemes multi recepteurs, j'aurais bien trippé aussi appliqué ca a la reconnaissance de parametres dans une discussion, Genre Nombre de personnes, Detection d'arrivée des ondes acoustiques (placement potentiel des personnes), Séparation de sources etc etc

53
Là j'ai des gros problèmes avec ces histoires de sampling... Mes ondes d'oscillos sont stockées sur 1024 échantillons, et en haute fréquences ça grésille, on ne distingue plus la différence entre un triangle et un palier...

J'ai plusieurs solutions : soit je rajoute une amélioration sur le sampling (parce que l'interpolation linéaire visiblement c'est pas ça), en augmentant la taille des tableaux d'ondes, ou en utilisant un truc comme http://www-ccrma.stanford.edu/%7Ejos/resample/ ; soit je calcule mes échantillons en temps réel... Pour des rampes/triangles/dents de scie c'est super jouable, mais pour le sinus, vu que la fonction sinus est super lente, ça va être chaud... Une piste :

Citation : Why have I used sampling? Because this is the only way of getting accurate tuning and low complexity. Floating point operations are emulated on a Palm, so they are slow as hell. sin/cos are also emulated, and are even more slower. Don't expect no more than 4000/5000 calls to sin per second. The only possible solutions are:
- sampling.
- finite difference methods (you write the sine function you want to generate as the solution of a PDE, and you solve this PDE by finite differences). The problem is that the coefficients of this PDE do not linearly depend on the frequency - so you end up needing a table with the coefficients for each possible frequency (bad when you need small frequency increments) AND you will get round off errors that will result in inaccurate frequency. As a rule of thumb: LINEAR is implementable ; NON-LINEAR is not.



Vous en pensez quoi vous ? Le problème majeur est que le CPU n'est pas super rapide :| J'ai pas le droit d'utiliser les virgules flottantes qui sont "émulées" sur les Palm :volatil: Et puis faudrait que je balance un filtre bien extrême pour faire de l'anti-aliasing en sortie, ça pourrait régler quelques problèmes peut-être, même si y a juste lecture d'échantillons à des fréquences basses pour l'instant (à 440 Hz ça coince déjà) :noidea:

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

54
Je serais pas etonne qu'un palm recent soit plus puissant qu'un nordlead premiere generation. Tout est implemente en virgule fixe, donc c'est possible. Tu devrais jetter un coup d'oeil a musicdsp ML, ils sont justement en train de parler de l'emulation de SH09.

Citation :
'ai plusieurs solutions : soit je rajoute une amélioration sur le sampling (parce que l'interpolation linéaire visiblement c'est pas ça



Oui, le lineaire est tres mauvais, surtout en haute frequence. Jette un coup d'oeil a libsamplerate de Erik Castro de Lopo :

http://www.mega-nerd.com/SRC/

Pour generer des ondes sinusoidales, personne n'utilise cos ou sin, surtout la version de la librairie C standart. Typiquement, lorsque j'avais implemente un pitch shifter cense marcher en temps reel, j'avais besoin de calculer a la volee des fenetre de Hamming qui consiste principalement a calculer des cos: tu peux utiliser des appproximations et calculer par recurrence chaque valeur a partir de la premiere, et c'est beaucoup plus rapide (a l'epoque sur PII, c'etait environ 20 fois plus rapide, et je programmais vraiment comme un pied a l'epoque).

T'utilise un truc niveau lycee: cos(a+b) = cos(a)cos(b) - sin(a)sin(b), avec b = a, ca donne cos(2a) = cos(a) * cos(a) - sin(a)*sin(a). Et tu procedes par recurrence 3a, 4a, etc... Tu remplaces le calcul de cos ou sin par 2 mul et une addition... C'est plutot pas mal.
55
Je viens de jeter un oeil rapide à la ML, c'est vrai que c'est plutôt intéressant, bien plus que les bouts de code :8) Je vais voir également ton site :mrg:

Pour l'instant j'ai trouvé ça pour le cosinus :
https://fr.wikipedia.org/wiki/Construire_des_tables_trigonom%C3%A9triques
Doit y'avoir mieux comme algo non ? :noidea:

Sinon pour info, Bhajis Loops est un séquenceur pour Palm OS, à mi chemin entre le tracker et les séquenceurs PC, basé sur un sampleur qui lit des fichiers WAV, avec quelques effets (réverb, EQ, compression...). On peut lire une dizaine d'échantillons en même temps avec des effets sans problèmes, doit y'avoir une bonne marge de puissance.

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

56
Je comprends pas leur histoire d'imprecision. Il y a un probleme en precision finie, il faut faire attention a l'ordre des operations, mais l'algo est exacte a priori ?

Imaginons par exemple que tu veuilles une table de 1024 samples sur une periode de cos: cos[2(k+1)pi/N] = cos[2kpi/N]cos[2pi/N] - sin[2kpi/N]sin[2pi/N] avec la formule cos(a+b) = cos(a)cos(b) - sin(a)sin(b).

Premiere recurrences:

cos[0] = 1, sin[0] = 0.
cos[2pi/N] = a, sin[2pi/N] = b.

Puis apres:

u(k+1) = a*u(k) - b*v(k)

faut calculer les sinus correspondant en meme temps. Donc leur approximation lineaire est assez debile je trouve

Ah, en anglais, l'article est beaucoup plus precis. Le truc d'au dessus donnait de bons resultats avec des tailles de 1024 samples pour des fenetres de hamming. Il faut faire attention a l'ordre dans lequel tu calcules le truc d'au dessus.
57

Citation :
Je viens de jeter un oeil rapide à la ML, c'est vrai que c'est plutôt intéressant, bien plus que les bouts de code



En parlant de code, ca me rapelle que je n'ai toujours pas converti le code matlab pour le time stretch que j'avais poste :oops:
58
Merci, va falloir que j'épluche ça

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

59
Au fait, question HS, vous n'avez pas des liens sur la synthèse vocale ? Sur comment marche ce genre de softs : http://www.research.att.com/projects/tts/demo.html

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

60
Il marche tres bien effectivement ce moteur de synthese vocale.

Les publis sont la

http://www.research.att.com/projects/tts/pubs.html