Se connecter
Se connecter

ou
Créer un compte

ou
Agrandir
Les Mains dans le Cambouis
Bidouille & Développement Informatique

Sujet Synthétiseur type onde martenot

  • 12 réponses
  • 6 participants
  • 3 825 vues
  • 7 followers
Sujet de la discussion Synthétiseur type onde martenot
Bonjour à tous,
C'est mon premier sujet sur le forum, donc pour faire bref, j'habite Besançon, 25 ans est a comme projet annexe de réaliser une espèce d'onde de Martenot.
En gros j'ai comme entrées :
- un clavier a effets hall, qui récupérer sur un pic me générère un signal numérique
- un fil relier à un potentiomètre qui permets de faire varier la fréquence du son
- un rack avec des sélecteurs de formes d'ondes et de diffuseurs relier sur un pic

Toutes ces entrées sont regrouper sur une carte d'interface, qui a pour rôle de redistribuer sur une carte "primaire l'ensemble des entrées" analogique et digitale.

En fin les sorties de cette carte primaire sont 4 voies mono (amplifiées avec un ampli à lampes) qui sont ensuite distribuées sur 4 diffuseurs sonores.

J'en suis à la réalisation de la carte primaire qui s'occupe du traitement du signal, ainsi en fonction des entrées, elle doit être capable de générer le sorties avec les formes d'ondes voulues.

Je pensais partir sur un dsPic + codec audio, cependant avec l'ensemble de mes recherches, je tombe sur du arduino avec des truc sympa sur ATMega (shruthi...), mais je vois que certains dspic sont bien équipé avecdes DAC et autres interfaces codec.
De plus on peut trouver un peu de tout : de l'arm et des fpga avec système embarqué (freeRtos) mais aussi des truc vraiment compliqué comme la famille ADSP sharc d'Analog Device

En espérant que vous saurez me guider dans ce projet.
Christophe
2
Salut,

Un beau projet niveau boulot.

Au niveau du microprocesseur, j'ai l'habitude de travailler sur des ATMega car j'ai étudié dessus et je les aime bien. J'ai travaillé une fois sur DSpic et j'ai été un peu trop dérouté. Donc je ne saurais te conseillé objectivement.

Par rapport à l'Arduino et au Mutable instrument Shruthi, le son est créé à partir de la PWM (corrigez moi si je dis des conneries) sûr pour l'Arduino car pas de DAC.

Après si tu veux plus d'info sur les Pic, je crois que Chimimic utilise que ça. (créateur du site web Sonelec et membre d'audiofanzine) Lui saurai parfaitement te conseillé pour ton projet.

Jazz'on

[ Dernière édition du message le 26/04/2012 à 15:21:23 ]

3
Bonjour,

ATMega, dsPIC... encore inconnus de moi. Je ne saurais guère vous apporter mon aide pour cette partie-là.

Formateur en techniques sonores ; électronicien ; auteur @ sonelec-musique.com

4
En tout cas merci de ces quelques précisions.
A part ces 2 orientations possible dsPic/AtMega, avez vous dejà utilisé d'autres solutions comparable pour ce type de projets? (Arm, FPGA et/ou système embarqué?)
5
Non je n'ai utilisé que ça.
Je te conseillerai quand même de partir sur une base d'Arduino car il y a une grosse communauté derrière qui pourront t'aider.

Oups pour Chimimic, je pensais, à tort.
6
On ne peut pas tout savoir, tout de même :bravo:

Formateur en techniques sonores ; électronicien ; auteur @ sonelec-musique.com

7
Bonjour,
Concernant l'arduino et ses dérivés c'est tentant, cependant j'ai peur que je soit limité, surtout dans le nombres de sorties hp à gérer. J'ai 4 sorties différentes à gérer.
Ainsi; lorsque'une touche du clavier est appuyée, je dois générer 4 types de formes d'ondes différentes, et les envoyer sur 4 diffuseurs séparément.
A part en passant par un codec audio; j'ai du mal à voir les autres solutions potentielles.
Sinon, les STM32 F4 de chez STMicroelectronics m'ont l'air d'être intéressants aussi.
8
Les STM32F4 sont des monstres, avec unité de calcul dsp qui va bien (pas non plus un gros bloc dsp, mais suffisant pour faire déjà pas mal de choses), la STM32F4 discovery est pas mal et vraiment pas chère pour attaquer le projet, par contre niveau prise en main c'est chaud si on veut pas utiliser de version limité pour le compilateur etc...
9
Quelques points :

1. Sur l'Arduino.

Je déconseille personnellement l'Arduino pour des projets synth sauf dans les deux cas suivants : débutants et/ou personnes qui veulent arriver à un résultat rapidement sans aucune envie d'apprendre quoi que ce soit (prototypage, électronique embarqué dans un projet artistique). Trois raisons principales :
- les ATMega peuvent tourner à 20 MHz mais les platines arduino (et tout le code qui va avec) est à 16 MHz (il y a une raison historique pour ça). On est donc bridé de 25% de performance par rapport à un projet à base d'ATmega tournant à plein pot (20 MHz). C'est la différence entre un taux d'échantillonnage de 32kHz et de 40kHz. Très important si on veut générer des sons brillants.
- les librairies Arduino simplifient pas mal le travail, mais elles sont d'aucun secours lorsqu'il s'agit d'écrire du code performant, comme c'est le cas pour de l'audio. Un certain nombre de fonctionalités de l'ATMega très utiles (notament la possibilité d'utiliser l'UART comme un module SPI rapide avec un buffer de 4 octets - plus puissant que le module SPI dédié !) ne sont pas exposés dans les bibliothèques arduino. Au final, il y a de fortes chances que sur un projet demandant un peu de puissance et de fonctionalités avancées les outils bien pratiques des libs arduino soient inutiles.
- à mon sens, la pratique de l'Arduino n'enseigne pas de bonnes bases en matières de système embarqué. Je me suis initié à l'électronique embarqué avec un Arduino et j'ai du "désapprendre" pas mal de choses - vocabulaire, style de programmation, etc. - après quelques mois.

2. Sur le dsPIC vs ATMega

Les dsPIC sont très puissants et bien plus appropriés pour ton application. Dès qu'on veut une qualité au delà de 8-bit sur un ATMega, on se retrouve limité par le jeu d'instruction (multiplications et additions 8-bit seulement), du coup un MAC 16-bits/16-bits prend une vingtaine de cycles sur un ATMega, contre 1 sur un dsPIC !!! Pour te donner un ordre d'idées, sur le Shruthi j'ai 450 cycles CPU par échantillon (39kHz), et il faut 120 cycles CPU pour calculer un oscillateur carré ou dent de scie pas trop dégueu (avec band-limiting) mais en 8-bits... ; 240 cycles pour un algo de synthèse de formes d'ondes type VA comme minBLEP. Le Shruthi utilise du PWM mais tu peux écrire sur un DAC sans beaucoup de coût, en particulier si tu le fais via l'UART en mode SPI (grosse astuce!). Il n'y a pas de DMA, et seule l'UART a un buffer (de 4 octets). Bref, c'est étriqué par rapport un dsPIC (DMA, DAC intégré, MAC 16-bits en 1 cycle). L'avantage d'Atmel est dans les outils de développement, il y a une toolchain GNU standard et à jour, et un outil open-source de flashing très au point (avrdude). Chez MCP c'est un peu plus roots, ils diffusent sous le manteau une édition de gcc obsolète :/ - c'est pas du gâteau si on veut utilise autre chose que leur horrible IDE. Pour les partisans du vim+makefile, on arrive bien plus vite à quelque chose avec les outils Atmel...

Je me permets de parler aussi de la voie du milieu - AVR XMega. Il y a des boards de dev à 15€ chez Boston Android + un programmeur Atmel à 25€ et le tour est joué. Les chips étaient un peu immatures et/ou difficiles à se procurer jusqu'à décembre dernier mais c'est enfin réglé. C'est le même jeu d'instructions que l'ATmega, mais plus rapide (32 MHz), avec un DAC intégré (pas flamboyant), du DMA (pratique pour piloter un DAC externe sans surcoût), et côté périphériques c'est du tonnerre, c'est hyper bien foutu.

3. STM32F

C'est une toute autre paire de manches... À partir d'une board de dev vierge (type Olimex), j'ai passé une bonne semaine à me conconcter un "projet minimal" - pas facile de trouver des makefile + linker scripts + code de boot minimal ! Ça se programme soit avec un dongle JTAG (cher) ou avec un dongle USB>série en utilisant le bootloader intégré (mais c'est horriblement moins pratique qu'avec un vrai programmeur JTAG). Côté performances c'est un autre monde, on peut faire tourner 8 oscillateurs minBLEP à 48kHz sans écrire une ligne d'assembleur. Sur un STM32F de base à 72 MHz sans extensions DSP. Le seul hic est le temps de latence de la flash...

À noter qu'une voie moins douloureuse vers le STM32F pourrait être la Maple board. Avec exactement les mêmes réserves dessus que l'arduino : ça n'apprend pas grand chose, et toutes les jolies librairies / abstractions fournies par les développeurs du truc ont un gros impact sur les performances.

Je n'ai pas fait d'essais avec le mbed de NXP.

Mais il faudrait peut être en dire plus sur ce que tu veux faire comme génération sonore... Quel type d'oscillateurs ou quel algo de synthèse ? Combien en même temps (4 oscillateurs) ? À quelle fréquence d'échantillonnage et quelle résolution de convertisseurs (hint: 8-bit c'est suffisant si tu es à pleine amplitude tout le temps et si ça passe ensuite dans un filtre analo) ? Et si finalement ça serait pas plus intéressant d'utiliser la carte juste pour contrôler des oscillateurs analogiques ou des DCOs. Si tu privilégies la voie des DCO, le killer absolu est dans ce cas l'XMega - il a 2 timer 16-bits avec génération de forme d'onde (PWM) par bloc de 8 pins, tu peux donc lui faire générer des carrés ou des impulsions (pour déclencher la décharge de la capa d'un VCO) sans aucun coût processeur !

FPGA, sharc... si tu veux te faire plaisir avec des belles technos, mais c'est overkill pour 4 oscillateurs.

[ Dernière édition du message le 05/05/2012 à 14:10:14 ]

10
Si c'est le mec qui à conçu le Shruthi qui conseil, je m'incline.
Au moins c'est clair !!!

x
Hors sujet :
@Pichenettes : Tu es autodidacte ?

x
Hors sujet :
L'avantage de l'arduino est d'avoir une platine d'expérimentation prémonté avec processeur et quartz. Très pratique pour faire des controleurs MIDI.
J'ai jamais regarder les biblios disponibles, j'ai appris le C à l'école