π
<-
Chat plein-écran
[^]

Fabrique un synthé avec la carte DSP TI-C5535 - #Épisode 2

Fabrique un synthé avec la carte DSP TI-C5535 - #Épisode 2

Unread postby Wistaro » 12 Dec 2017, 19:03

Il y a quelques semaines, nous te parlions d'une carte électronique programmable, fabriquée par
Texas instrument
, la
TMS320C5535 eZdsp
.
8206
Mais cette carte n'était pas une carte ordinaire, c'était une carte DSP, pour
Digital Signal Processing
.

Comme nous le disions, les possibilités offerte par cette carte étaient
nombreuses.




Aujourd'hui, après la théorie,
passons à la pratique!



Je vous propose de réaliser un premier projet tout au long de cet série d'articles: un
synthétiseur au clavier
.
Il s'agit en quelque sorte d'un piano virtuel. Vous appuyez sur des touches de votre clavier, et la carte DSP joue un son, différent pour chaque touche.
Tous les synthétiseurs utilisent ce principe! Une circuit détecte l'appui d'une touche
(par exemple, d'une touche au clavier s'il s'agit d'un piano électrique)
, et un autre circuit basé sur un ou plusieurs DSP se chargent de
générer le signal
.

Intéressant non?

Si vous êtes prêts, nous pouvons commencer.

Tout d'abord, il est important de définir notre
cahier des charges
, qui, dans un premier temps, vas être très simple! Nous serons peut-être amené à l'améliorer au fur et à mesure des épisodes de cette série. Aujourd'hui, nous ne nous imposons que très peu de limites!
En effet, nous voulons juste générer un son audible, à chaque appui d'une touche au clavier. Le programme devra tourner
en boucle
, pour pouvoir saisir autant de notes souhaitées. Nous pourrons ainsi créer une mélodie si nous sommes inspirés! :D

Nous voyons donc qu'il y a
2 parties majeures
dans ce projet:
  • Générer un signal audible
  • Détecter l'appui d'une touche au clavier


Je vais détailler chaque partie, et vous allez voir que même si cela semble peut-être un poil complexe, ce n'est en réalité par le cas!

Commençons par
la génération du son.



Un son, c'est quoi? C'est tout simplement
une vibration de l'air
. Ces vibrations se propagent un certain nombre de fois par seconde, c'est ce qu'on appelle
la fréquence
. Cela, vous savez ce que c'est. C'est en quelque sorte la "hauteur" du son: un son haute fréquence sera perçu aiguë, un son basse fréquence sera grave. Quand vous écoutez de la musique sur une enceinte, celle-ci va faire vibrer une
membrane
sous l'action d'une tension électrique, qui va faire vibrer les molécules d'air. Ces vibrations vont arriver jusqu'à
vos tympans
qui vont recevoir ces vibrations, et vous allez entendre quelque chose.
Enfin, normalement.

Mais comment la source
(votre téléphone, votre ordinateur...)
génère t-elle la tension qui arrive à faire bouger la membrane? En fait, rien de secret, c'est très simple! Lorsque la source envoie une
tension positive
, la membrane est poussée dans un sens, et lorsque la
tension est négative,
elle est poussée
dans l'autre sens
. La répétition de cette tension positive, puis négative, puis positive, etc. va alors faire
vibrer les molécules d'air
: c'est le but recherché. Notez que le temps entre ces répétitions est la période, soit l'inverse de la fréquence (
Pour être plus pointilleux, il s'agit de la demi-période! La période complète étant la temps entre 2 tensions de même signe!
).

Autrement dit, pour un son plus aiguë,
il va falloir être rapide!


Maintenant, quelle
fonction mathématique
possède des
alternances négatives et positive
au cours du temps? Il s'agit des fonction périodiques de valeur moyenne nulle. La plus simple d'entre-elle, est le
sinus.


OK, maintenant nous savons que notre carte doit générer un
signal sinusoïdal
d'une certaine fréquence.
Mais comment faire ça?
Notre carte ne traite que
les signaux binaires
, à priori.
Sauf que nous sommes sur une circuit DSP, et que le traitement des signaux, c'est son job.

Encore une fois, le principe va être simple. Nous allons lui donner en entrée un nombre, par exemple 42. Puis un petit composant va se charger de convertir ce nombre en
impulsion électrique
. Ce petit composant s'appelle un
Convertisseur Digital Analogique
, ou
DAC
en anglais.
Son but? Convertir un valeur en un signal électrique.
Ici, le DAC sur notre carte est un
AIC TI-3204
, qui échantillonne les signaux à
192kHz.



Il ne reste plus qu'à calculer les valeurs d'un sinus pour pouvoir ensuite les envoyer au DAC.

En réalité, c'est un peu plus complexe. Pour des raisons de
gestion de la mémoire
, il serait problématique de calculer à chaque fois tous les points du
signal sinusoïdal
. Il est préférable de le pré-calculer au lancement du programme, puis de s'en servir après. N'oubliez que pas que nous sommes sur un circuit DSP!
J'ai donc au préalable généré une sinusoïde sur
16bits signés
(capacité du DAC), c'est à dire qu'en sortie il y aura
$mathjax$2^{16}$mathjax$
niveaux de tension.

La configuration du DAC est un peu complexe, car il faut paramètrer beaucoup de choses sur l'AIC et les ports. Il est vivement recommandé de se baser sur la documentation de la carte!




Il ne reste plus qu'à envoyer le signal! Mais le problème est ici que nous ne pouvons pas jouer sur le fréquence, étant donné que nous avons pré-généré le sinus! J'ai donc bidouillé un peu le code pour que quand la variable fréquence varie, le son change. Par la suite, nous essayerons de faire quelque chose de plus propre! Mais pour le moment, ce n'est pas grave. Remarquez aussi que j'ai copié le signal 2 fois, car nous sommes sur un port stéréo.
Cela fonctionne très bien. Dans un prochain épisode, nous verrons comment générer un signal plus propre, certes, mais aussi différent d'un signal sinusoïdal. Chaque forme de signal a sa tonalité bien particulière. Par exemple, un signal carré fait beaucoup pensé aux synthétiseurs dans les musiques des années 80 :p Il sera également possible d'appliquer des
filtres
, des effets au signal pour le rendre
beaucoup, beaucoup plus cool
. Mais pour l'instant, occupons-nous de notre petit piano électrique!

Voilà la fin de la première partie!
Maintenant, il ne reste plus qu'a détecter les touches du clavier.
Vous savez peut-être que lorsque vous appuyez sur une touche, votre ordinateur reçoit une donnée correspondante à la touche envoyée. On appelle ça le code ascii. Et bien, grâce à un petit programme installé de base sous windows,
Hyperterminal
, il est possible d'envoyer cette donnée non pas à Windows, mais plutôt sur un port spécifique. Un port est globalement une entrée/sortie de l'ordinateur qui communique au moyen d'un liaison série: un fil sert pour émettre des données, et un autre pour les recevoir.



Et, ça tombe bien, notre carte TMSezDSPC5535 est connecté sur l'un de ces
ports séries
de notre ordinateur! I suffit donc de connecter
(virtuellement bien sûr!
) le fil d
'émission de l'ordinateur
sur le fil de
réception de la carte
, pour assurer une liaison entre les 2 deux. Ainsi, quand vous appuierez sur
"E"
, le carte DSP recevra
"E"
.
Mais cela n'est pas magique. Sur la carte, le composant qui réalise cela et un UART. Il fonctionne aussi bien en émission, qu'en réception. Ici, nous travaillons avec une fréquence de transmission de
115200
bits par seconde. Il faut donc que Hyperterminal reçoive aussi les données à cette fréquence, sinon il y a aura un gros problème!


Comme vous pouvez le voir à gauche, le code final est très simple. Dans une boucle infinie, je regarde en continu si je reçois un caractère. Si c'est le cas, alors je génère un signal pendant
1 seconde
, et je réinitialise tout. On peut remarque que la je passe en paramètre de ma fonction qui génère le signal la touche appuyée. En effet, je m'en sert pour que, à chaque touche soit associée un son différent!
Notez que le programme pourrait être bien plus optimisé, notamment en travaillant avec les interruptions! Nous verrons ça un peu plus tard.


Bon, en réalité, avec mes bidouillages, le signal est en sortie n'est pas très beau. Il est même assez loin du signal sinusoïdal. Voyez par vous-même :)
Image Image


En effet, si vous regardez mon code, vous voyez que je n'envois pas la totalité du sinus à chaque fois. Pour faire varier la fréquence, je n'envoie qu'une partie à chaque fois, et je répète cette partie. Le signal n'est donc pas sinusoïdal en sortie. D'ailleurs, c'est également bien visible sur le spectre, qui comporte quelques harmoniques.


Attention donc les oreilles :troll:
Nous sommes encore loin d'un beau synthétiseur, mais on s'approche :D

Voici une courte vidéo vous montrant le résultat :p



Le code source du projet est disponible gratuitement sur GitHub: https://github.com/Wistaro/DspSynthesizer


Et ensuite...?
Dans les prochains épisodes, comme je l'ai déjà dit, nous améliorerons ce projet, notamment avec ceci:
  • Génération de signaux plus propre
  • Génération de différents types de signaux
  • Ajout d'effet et filtres
  • Lecture d'une musique
  • Affichage d'un vu-mètre
  • Transformateur de voix
  • Reconnaissance vocale

Et bien plus encore! N'hésitez pas à me donner vos avis!

A bientôt!


Épisode précédant - Épisode suivant
User avatar
WistaroModo.G
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Level up: 86.2%
 
Posts: 2813
Images: 37
Joined: 25 Feb 2013, 16:21
Location: Toulouse
Gender: Male
Calculator(s):
Class: Etudiant ingénieur (Ex TS - SI)
YouTube: Wistaro
Twitter: @Wistaro
GitHub: Wistaro

Re: Fabrique un synthé avec la carte DSP TI-C5535 - #Épisode

Unread postby Frano » 18 Jul 2018, 14:26

Bonjour ! Excellent article ! Je vois malheureusement que la suite de votre cours n'est pas publié, pourquoi donc ? C'est génial et exactement ce qu'il me faut :( !
User avatar
Frano
Niveau 0: MI (Membre Inactif)
Niveau 0: MI (Membre Inactif)
Level up: 0%
 
Posts: 2
Joined: 18 Jul 2018, 14:22
Gender: Not specified
Class: BAC+2 SN EC

Re: Fabrique un synthé avec la carte DSP TI-C5535 - #Épisode

Unread postby Wistaro » 18 Jul 2018, 16:29

Frano wrote:Bonjour ! Excellent article ! Je vois malheureusement que la suite de votre cours n'est pas publié, pourquoi donc ? C'est génial et exactement ce qu'il me faut :( !


Salut ! Merci de ton commentaire :)

La suite de cette série est en préparation et sortira prochainement.

Je suis en train de préparer un autre article sur une autre carte, ça me prend aussi pas mal de temps.

Mais ça sortira. J'espère avant la fin de l'été :p
User avatar
WistaroModo.G
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Level up: 86.2%
 
Posts: 2813
Images: 37
Joined: 25 Feb 2013, 16:21
Location: Toulouse
Gender: Male
Calculator(s):
Class: Etudiant ingénieur (Ex TS - SI)
YouTube: Wistaro
Twitter: @Wistaro
GitHub: Wistaro

Re: Fabrique un synthé avec la carte DSP TI-C5535 - #Épisode

Unread postby Frano » 18 Jul 2018, 18:20

D'accord pas de soucis ! Au moins c'est pas abandonné, je croyais vu que l'article datait de décembre 2017 !
User avatar
Frano
Niveau 0: MI (Membre Inactif)
Niveau 0: MI (Membre Inactif)
Level up: 0%
 
Posts: 2
Joined: 18 Jul 2018, 14:22
Gender: Not specified
Class: BAC+2 SN EC

Re: Fabrique un synthé avec la carte DSP TI-C5535 - #Épisode

Unread postby Wistaro » 18 Jul 2018, 19:36

Frano wrote:D'accord pas de soucis ! Au moins c'est pas abandonné, je croyais vu que l'article datait de décembre 2017 !


Non :)

Ça prend quand-même pas mal de temps, et je veux rédiger un article qui soit nickel, sans le bâcler :)
User avatar
WistaroModo.G
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Level up: 86.2%
 
Posts: 2813
Images: 37
Joined: 25 Feb 2013, 16:21
Location: Toulouse
Gender: Male
Calculator(s):
Class: Etudiant ingénieur (Ex TS - SI)
YouTube: Wistaro
Twitter: @Wistaro
GitHub: Wistaro


Return to News Divers

Who is online

Users browsing this forum: No registered users and 8 guests

-
Search
-
Featured topics
Offre TI-Planet/Jarrety pour avoir la TI-83 Premium CE avec son chargeur pour 79,79€ port inclus !
Offre TI-Planet/Jarrety pour avoir la TI-Nspire CX CAS à seulement 130€ TTC port inclus!
Jailbreake ta TI-Nspire avec Ndless et profite des meilleurs jeux et applications !
123
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...

Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety 
-
Stats.
391 utilisateurs:
>377 invités
>9 membres
>5 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)