Création d'un synthé sous Matlab (Choc par ici !)
- 114 réponses
- 7 participants
- 14 491 vues
- 9 followers
![Wolfen Wolfen](https://img.audiofanzine.com/img/user/avatar/2/0/2069.png?w=40&h=40&fm=pjpg&s=5372bf4b3f29517321f2d20787cffd3c)
Wolfen
![13939 posts au compteur 13939 posts au compteur](https://static.audiofanzine.com/images/audiofanzine/forum/avatars/new/editor.png)
![:ptdr:](https://img.audiofanzine.com/images/audiofanzine/interface/smileys/icon_ptdr.gif)
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:](https://img.audiofanzine.com/images/audiofanzine/interface/smileys/icon_bave.gif)
Développeur de Musical Entropy | Nouveau plug-in freeware, The Great Escape | Soundcloud
![Pov Gabou Pov Gabou](https://static.audiofanzine.com/img/user/avatars/generic.png?w=40&h=40&fm=pjpg&s=0d6213e9da38ef4cab8d0bdd3999c731)
Pov Gabou
![19553 posts au compteur 19553 posts au compteur](https://static.audiofanzine.com/images/audiofanzine/forum/avatars/new/9.png)
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
![Choc Choc](https://static.audiofanzine.com/img/user/avatars/generic.png?w=40&h=40&fm=pjpg&s=0d6213e9da38ef4cab8d0bdd3999c731)
Choc
![6968 posts au compteur 6968 posts au compteur](https://static.audiofanzine.com/images/audiofanzine/forum/avatars/new/honorific.png)
Hors sujet : Cool 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
Site personnel: https://www.enib.fr/~choqueuse/
![Wolfen Wolfen](https://img.audiofanzine.com/img/user/avatar/2/0/2069.png?w=40&h=40&fm=pjpg&s=5372bf4b3f29517321f2d20787cffd3c)
Wolfen
![13939 posts au compteur 13939 posts au compteur](https://static.audiofanzine.com/images/audiofanzine/forum/avatars/new/editor.png)
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
![:|](https://img.audiofanzine.com/images/audiofanzine/interface/smileys/icon_neutral.gif)
![:volatil:](https://img.audiofanzine.com/images/audiofanzine/interface/smileys/icon_volatilize.gif)
![:noidea:](https://img.audiofanzine.com/images/audiofanzine/interface/smileys/noidea.gif)
Développeur de Musical Entropy | Nouveau plug-in freeware, The Great Escape | Soundcloud
![Pov Gabou Pov Gabou](https://static.audiofanzine.com/img/user/avatars/generic.png?w=40&h=40&fm=pjpg&s=0d6213e9da38ef4cab8d0bdd3999c731)
Pov Gabou
![19553 posts au compteur 19553 posts au compteur](https://static.audiofanzine.com/images/audiofanzine/forum/avatars/new/9.png)
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.
![Wolfen Wolfen](https://img.audiofanzine.com/img/user/avatar/2/0/2069.png?w=40&h=40&fm=pjpg&s=5372bf4b3f29517321f2d20787cffd3c)
Wolfen
![13939 posts au compteur 13939 posts au compteur](https://static.audiofanzine.com/images/audiofanzine/forum/avatars/new/editor.png)
![:8)](https://img.audiofanzine.com/images/audiofanzine/interface/smileys/icon_cool.gif)
![:mrg:](https://img.audiofanzine.com/images/audiofanzine/interface/smileys/icon_mrgreen.gif)
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:](https://img.audiofanzine.com/images/audiofanzine/interface/smileys/noidea.gif)
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 | Soundcloud
![Pov Gabou Pov Gabou](https://static.audiofanzine.com/img/user/avatars/generic.png?w=40&h=40&fm=pjpg&s=0d6213e9da38ef4cab8d0bdd3999c731)
Pov Gabou
![19553 posts au compteur 19553 posts au compteur](https://static.audiofanzine.com/images/audiofanzine/forum/avatars/new/9.png)
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.
![Pov Gabou Pov Gabou](https://static.audiofanzine.com/img/user/avatars/generic.png?w=40&h=40&fm=pjpg&s=0d6213e9da38ef4cab8d0bdd3999c731)
Pov Gabou
![19553 posts au compteur 19553 posts au compteur](https://static.audiofanzine.com/images/audiofanzine/forum/avatars/new/9.png)
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:](https://img.audiofanzine.com/images/audiofanzine/interface/smileys/icon_redface.gif)
![Wolfen Wolfen](https://img.audiofanzine.com/img/user/avatar/2/0/2069.png?w=40&h=40&fm=pjpg&s=5372bf4b3f29517321f2d20787cffd3c)
Wolfen
![13939 posts au compteur 13939 posts au compteur](https://static.audiofanzine.com/images/audiofanzine/forum/avatars/new/editor.png)
![](http://yelims.free.fr/TopOuNul/Super16.gif)
Développeur de Musical Entropy | Nouveau plug-in freeware, The Great Escape | Soundcloud
![Wolfen Wolfen](https://img.audiofanzine.com/img/user/avatar/2/0/2069.png?w=40&h=40&fm=pjpg&s=5372bf4b3f29517321f2d20787cffd3c)
Wolfen
![13939 posts au compteur 13939 posts au compteur](https://static.audiofanzine.com/images/audiofanzine/forum/avatars/new/editor.png)
Développeur de Musical Entropy | Nouveau plug-in freeware, The Great Escape | Soundcloud
![Choc Choc](https://static.audiofanzine.com/img/user/avatars/generic.png?w=40&h=40&fm=pjpg&s=0d6213e9da38ef4cab8d0bdd3999c731)
Choc
![6968 posts au compteur 6968 posts au compteur](https://static.audiofanzine.com/images/audiofanzine/forum/avatars/new/honorific.png)
Les publis sont la
http://www.research.att.com/projects/tts/pubs.html
Site personnel: https://www.enib.fr/~choqueuse/
- < Liste des sujets
- Charte