Ceci est une ancienne révision du document !


Générateur de notes aléatoires MIDI

Bonjour!

Il s'agit ici de fabriquer un géné…oui, bon, tu as déjà lu le titre…

Ce projet est né suite au dépoussiérage d'un vieux sampler qui a une connectique MIDI complète.

Donc, à force de fouiller l'intermouette, on fini par tomber sur des projets déjà existant, qui ressemblent comme deux gouttes d'eau à ce qu'on avait en tête. Et pour nous cela donne ceci: Midi Random Sequence Generator

C'est basé sur un Arduino Nano. L'idée du projet est de générer des séquences de notes MIDI aléatoires. Plusieurs longueurs pour ces séquences sont disponibles: 4, 7, 8 et 16 pas. Il est possible de stopper la génération de séquence avec le premier des interrupteurs et de faire tourner en boucle infinie la séquence en cours avec le second interrupteur.

Après avoir testé le montage sur une plaque d'essais, il semble que les interrupteurs et le sélecteur de durée de séquence ne fonctionnent pas. Ce qui confirme le ressenti lors de l'écoute. Le reste roule parfaitement, donc on ne change rien de ce côté pour le moment…

Le matériel est donc testé physiquement en dehors du montage. Un simple test de continuité fera l'affaire dans ce cas et, effectivement, pas de pannes de ce côté-ci. Les interrupteurs ouvrent et ferment le circuit, le sélecteur rotatif de même.

Donc, allons voir du coté de la perspicacité du montage en lui-même, à savoir si les branchements entre les différents composants font ce qu'ils doivent faire en fonction du code.

La méthode qui suit a été gentillement soufflée à l'oreille par une porte logique à barbe…

Alors, pour cela nous allons garder le même montage mais changer le code dans le Nano. Nous allons

tester que tous les petits bidules d'interaction (boutons, pots, etc) fonctionnent correctement hors de la logique du code, il faudrait tester avec un code de ce type qui permettra de le vérifier :
#define redLed 13
#define pot A7
#define fourth 7
#define seventh 8
#define eighth 9
#define switchOne 11
#define switchTwo 10

int count; // compteur utile pour ne pas surcharger d'info le moniteur série

void setup() {
 
  pinMode(pot, INPUT);
  pinMode(fourth, INPUT);
  pinMode(seventh, INPUT);
  pinMode(eighth, INPUT);
  pinMode(switchOne, INPUT);
  pinMode(switchTwo, INPUT);

  Serial.begin(9600);
}

void loop() {
 
  // Tester les boutons un par un
  if (digitalRead(switchOne)) Serial.println("switch one on");
  if (digitalRead(switchTwo)) Serial.println("switch two on");
  if (digitalRead(fourth)) Serial.println("fourth on");
  if (digitalRead(seventh)) Serial.println("seventh on");
  if (digitalRead(eighth)) Serial.println("eighth on");
 
  // Envoyer la valeur du pot une fois sur 50 ( = 50 x delay(10) = 2 fois par secondes
  if (count%50 == 0) Serial.println(analogRead(pot));
 
  count ++;  // augmenter le compteur
  delay(10); // petite pause 10 millisecondes
 
}
  • openatelier/projet/generateur_de_notes_aleatoires_midi.1585242892.txt.gz
  • Dernière modification: 2020/03/26 18:14
  • par cyril