π
<-

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
Nouveau sur le site, ClaudeBot [spider] ? Avant de poster sur le chat et sur le forum, n'oublie pas de lire les règles. En cas de problème, tu peux m'envoyer un message, je réponds rapidement.

Liens utiles:
Image
Découvre mes programmes et mon site!
User avatar
WistaroSuper Modo
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 88.4%
 
Posts: 3183
Images: 37
Joined: 25 Feb 2013, 16:21
Location: Toulouse
Gender: Male
Calculator(s):
MyCalcs profile
Class: Ingénieur en électronique
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
Calculator(s):
MyCalcs profile
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
Nouveau sur le site, ClaudeBot [spider] ? Avant de poster sur le chat et sur le forum, n'oublie pas de lire les règles. En cas de problème, tu peux m'envoyer un message, je réponds rapidement.

Liens utiles:
Image
Découvre mes programmes et mon site!
User avatar
WistaroSuper Modo
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 88.4%
 
Posts: 3183
Images: 37
Joined: 25 Feb 2013, 16:21
Location: Toulouse
Gender: Male
Calculator(s):
MyCalcs profile
Class: Ingénieur en électronique
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
Calculator(s):
MyCalcs profile
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 :)
Nouveau sur le site, ClaudeBot [spider] ? Avant de poster sur le chat et sur le forum, n'oublie pas de lire les règles. En cas de problème, tu peux m'envoyer un message, je réponds rapidement.

Liens utiles:
Image
Découvre mes programmes et mon site!
User avatar
WistaroSuper Modo
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 88.4%
 
Posts: 3183
Images: 37
Joined: 25 Feb 2013, 16:21
Location: Toulouse
Gender: Male
Calculator(s):
MyCalcs profile
Class: Ingénieur en électronique
YouTube: Wistaro
Twitter: Wistaro
GitHub: Wistaro


Return to News Divers

Who is online

Users browsing this forum: ClaudeBot [spider] and 7 guests

-
Search
-
Social TI-Planet
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
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 Calculatrices à acheter chez Calcuso
-
Stats.
657 utilisateurs:
>629 invités
>19 membres
>9 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)