Go Down

Topic: [projet] MIDIfication d'un orgue analogique (Read 12402 times) previous topic - next topic

Nodel

Salut,
Si tu n'as pas la vélocité à gérer ça me parait pas trop compliqué.
Ce qui demande un peu de réflexion c'est la partie multiplexage des touches. C'est exactement ce sur quoi je réfléchi pour mon projet en ce moment, et j'ai trouvé une superbe documentation ici : http://www.openmusiclabs.com/learning/digital/input-matrix-scanning/. Il y a plein de méthode pour multeplixer des bouttons (switch). Ici il y a même un exemple avec un clavier : http://www.openmusiclabs.com/learning/digital/input-matrix-scanning/xmem/.
En utilisant ces méthode un arduino uno sera suffisant pour le nombre de touches. Après je pense qu'en terme de latence ça devrait aller aussi.
Et pour ce qui est de 3 canaux sur une seule sortie midi c'est tout à fait possible. Si je me trompe pas quand tu envoie un message midi tu spécifie un canal.

vohu

J'ai commandé un uno32 : http://www.lextronic.fr/P22485-module-chipkit-uno32.html

Niveau rapidité 80Mhz, je pense que ça va le faire :)
Pour 22€, c'est pas cher, et j'aurai la possibilité d'ajouter plein de commandes par la suite vu le nombre d'entrées/sorties

En espérant que la lib MIDI est bien compatible :$

Nodel

Oui enfin envoyer un message midi, même sans la lib c'est pas très compliqué.
Des infos sur le midi : http://www.tigoe.net/pcomp/code/communication/midi http://itp.nyu.edu/physcomp/Labs/MIDIOutput

bouault

Hello!
Pour le multiplexage des touche tu peu aussi jeter un œil à ce lien :
http://www.dribin.org/dave/keyboard/one_html/
C'est très bien expliqué. Je réfléchi moi aussi à ce type de solution dans le but de modifier une vielle console lumière pour l'interfacer avec White cat ( http://www.le-chat-noir-numerique.fr/ )
Jacques
arpschuino.fr

vohu

Bon, j'ai bidouillé un fichier pour le schémas.

est ce qu'avec ce câblage, différencier la même note du clavier I ou II ?
http://vohu.free.fr/matriceorgue.jpg
Par contre, je n'arrive pas à comprendre ce qui est en entrée ou sortie sur ce 4051 :$
(source : http://www.arduino.cc/playground/Learning/4051)



ou alors faire 3 fois ça :
http://tomscarff.110mb.com/midi_8x9_keys/keys_8x9_switches.gif

PapyDuino

Hello
Quote
ou alors faire 3 fois ça :
http://tomscarff.110mb.com/midi_8x9_keys/keys_8x9_switches.gif

Tiens, finalement, je vois que tu reconsidères ma suggestion? donc, ce n'était pas aussi "live" que çà.
Pour 64 notes, il te faut 16 entrées ( 8x8) donc, pas besoin de multiplexage, une matrice à diodes suffit.
Tu en fais 3 et c'est joué; pour le pédalier, c'est plus simple.
Papyduino

vohu

ben disons que je sais que je vais pouvoir le déplacer demain, donc oui, j'ai l'esprit plus libre pour voir comment câbler.


J'ai des multiplexeurs, et 200 diodes 4051. je peux faire les 2 systèmes.

A la différence que pour les multiplexeurs, il faudra que je fasse un circuit imprimé, alors que les diodes, je devrais pouvoir les ajouter à la matrice existante.

Je cherche la solution la plus propre, et qui pourrait me permettre plus de flexibilité par la suite.

J'essaye de comprendre les 2 fonctionnements, c'est vachement interessant :p

bouault

Très intéressant en effet!
j'ai essayé hier soir d'écrire un sketch pour lire une matrice à diodes, mais pour l'instant ça ne fonctionne pas. Je pense que mon erreur vient de l'initialisation des I/O. Qu'en pensez-vous ?
Code: [Select]
//matrice de nXn interupteurs = nXn valeurs écrites sur le port série
//n+n pins utilisé ;)

//collones :
const int premiereColonne = 2;   
const int derniereColonne = 9;

//rangées :
const int premiereRangee =  10;
const int derniereRangee =  17;


byte range[derniereRangee-premiereRangee+1]; // le nombre de rangées


/////////////////initialisation/////////////////////////////

void setup() {
 
  Serial.begin(9600);
   // initialisation des collones en output:
  for (int i=premiereColonne;i<derniereColonne+1;i++){
  pinMode(i, OUTPUT);
  }
 
  // initialisation des rangées en entrées:
  for(int i=premiereRangee; i<derniereRangee+1; i++){
  pinMode(i,INPUT);
  digitalWrite(i, HIGH); //turn on internal pullup
  }
////signature
Serial.println();
Serial.print("test_matrix_nXn");
Serial.println();
}

/////////////boucle principale///////////////////////////////

void loop(){
 
  for (int i=premiereColonne;i<derniereColonne+1;i++){
collone(i);
  }
 

  Serial.println();
 
}

//////////fonction de lecture d'une collone////////////

int collone(int pin)  {
 
  digitalWrite(pin, HIGH);
for(int i=premiereRangee;i<derniereRangee+1;i++)
{
    range[i]= digitalRead(i);

 
if (range[i]== HIGH)
{
  Serial.print("0,");
}
 
else
{
  Serial.print("1,");
}
  digitalWrite(pin, LOW);
}
}
Jacques
arpschuino.fr

PapyDuino

Re
Il y a çà pour clavier matriciel 4x3
http://www.arduino.cc/playground/Main/KeypadTutorial
A adapter pour 8x8 et Midi
On avance...
Ici un lien sur quelqu'un qui a le même problème que toi, mais inactif depuis un moment, je ne sais pas s'il a avancé.
http://electroniqueamateur.blogspot.com/2011/07/clavier-dorgue-electronique-et-sa.html
Papyduino

vohu

Ce We je vais souder les diodes sur le pédalier (ca sera plus simple pour commencer, plutot que les claviers)

histoire que je puisse voir le code plus concrêtement.

vohu

j'ai réussi à faire quelque chose sur les 8 premières notes du pédalier... sauf que tout est à l'envers...

c'est à dire que j'ai un 1 quand je fais rien, et un 0 quand j'appuye sur la touche...

J'aime pas trop ça

Super_Cinci

J'arrive un peu tard, mais c'est une jolie bêbête que tu as là!

J'en avais récupéré un de chez Yamaha, mais la grosse diff, c'est que le mien est à clavier matricé, le tien, on dirait qu'il y a un oscillateur par touche, donc ça va être plus dur à modifier ou midifier... Tu vas avoir tu pain sur la planche!

Pourquoi ne pas acheter un clavier maître? on en trouve des vraiment pas chers aujourd'hui... (désolé pour l'idée inutile)

vohu

Bonjour,
tu as raison.
Midifier ces claviers était trop lourd... sans compter l'encombrement du meuble....
Il aurai fallu que je vire le circuit des claviers pour en faire un autre et c'est pas possible pour mes finances.

Sur le pédalier, j'ai déjà du grater le cuivre commun pour découper en sections de 8 touches, je n'aurai pas pu faire parreil sur les claviers, puisque le contact commun passait par la barre qui axe les touches :D

Donc, j'ai commandé 2 claviers 61 touches MIDI.

Le pédalier fonctionne, j'ai quelques "cornements" il faut que je trouve comment envoyer le signal "stop all" parce que ma fonction panic()que j'execute des qu'aucune touche n'est enfoncée ne semble pas fonctionner

Code: [Select]

void noteOn(int cmd, int pitch, int velocity) {
  Serial.write(cmd);
  Serial.write(pitch);
  Serial.write(velocity);
}
void panic()
{
  noteOn(123,0,0);
}



Super_Cinci

La commande "note off all" n'est peut-être pas reconnue par tout le monde derrière, et ça ne risque pas de couper les notes des autres claviers? Une boucle for qui envoie un OFF sur chaque note de ton pédalier serait peut-être plus sûre et plus simple?

vohu

C'est ce que j'avais fait au départ, mais ça provoquait des trucs bizarres que je n'ai pas trop compris

Go Up