Midi drum kit

;D bonjour à toutes et tous,
j'essaie de réaliser le montage midi drum kit pour lire des sons à partir d'un piezo utilisé en capteur.
j'ai des signaux qui arrivent du piezo sous forme de lettres, de signes et de point d'interrogation (monitor) mais pas de knock...
de plus je n'arrive à lire aucun son à partir de ces signaux.

j'utilise une interface midi/usb...mais cela necessite t il d'avoir un soft pour gérer les sons ou les sons sont ils compris dans la syntaxe Arduino?

merci

Salut !
Les signaux c'est du numérique ou de l'analogique ?
Pour jouer des sons à partir d'Arduino, utlises Processing :wink:

:)merci vincent,
les signaux qui arrivent par le piezo sont analogiques, piezo raccordé sur le Anal 0
voici le lien ou il y a le schéma de montage
http://todbot.com/blog/2006/10/29/spooky-arduino-projects-4-and-musical-arduino/
je trouve pas dans les librairie de processing ce que je veux faire...
en fait il s'agit de lancer la lecture d'un enregistrement sonore de ma voix quand le piezo capte des valeurs...
si tu as une idée ::slight_smile:
merci pour ta réponse

Pour processing, as tu regardé dans les librairies supplémentaires dispo sur le site de Processing ?
Peux tu montrer ton code pour voir d'où pourrais venir le probléme ?

pour le moment j'essaie de faire tourner le montage avec la syntaxe du Midi drumKit dans sa version initiale. je n'utilise pas les boutons j'utilise seulement un piezo.
mon montage Piezo(zener et Resistance) dans entrée anal 0 et un femelle midi(resistance) sur numérique 1 en sortie reliée à mon mac via une interface Midi/usb.
je n'utilise pas de module, ni de soft de zick...

/*

  • MIDI Drum Kit

  • Convert Arduino to a MIDI controller using various inputs and
  • the serial port as a MIDI output.
  • This sketch is set up to send General MIDI (GM) drum notes
  • on MIDI channel 1, but it can be easily reconfigured for other
  • notes and channels
  • It uses switch inputs to send MIDI notes of a fixed velocity with
  • note on time determined by duration of keypress and it uses
  • piezo buzzer elements as inputs to send MIDI notes of a varying velocity
  • & duration, depending on forced of impulse imparted to piezo sensor.
  • To send MIDI, attach a MIDI out jack (female DIN-5) to Arduino.
  • DIN-5 pinout is: _____
  • pin 2 - Gnd / \
  • pin 4 - 220 ohm resistor to +5V | 3 1 | MIDI jack
  • pin 5 - Arduino D1 (TX) | 5 4 |
  • all other pins - unconnected _2_/
  • On my midi jack, the color of the wires for the pins are:
  • 3 = n/c
  • 5 = black (blue)
  • 2 = red (red)
  • 4 = orange (yellow)
  • 1 = brown
  • Based off of Tom Igoe's work at:
  • http://itp.nyu.edu/physcomp/Labs/MIDIOutput
  • Created 25 October 2006
  • copyleft 2006 Tod E. Kurt <tod@todbot.com
  • http://todbot.com/
    */

// what midi channel we're sending on
#define drumchan 1

// general midi drum notes
#define note_bassdrum 35
#define note_snaredrum 38
#define note_hihatclosed 42
#define note_hihatopen 44
#define note_crash 49

// define the pins we use
#define switchAPin 7
#define switchBPin 6
#define switchCPin 5
#define piezoAPin 0
#define piezoBPin 1
#define ledPin 13 // for midi out status

// analog threshold for piezo sensing
#define PIEZOTHRESHOLD 100

int switchAState = LOW;
int switchBState = LOW;
int switchCState = LOW;
int currentSwitchState = LOW;

int val,t;

void setup() {
pinMode(switchAPin, INPUT);
pinMode(switchBPin, INPUT);
pinMode(switchCPin, INPUT);
digitalWrite(switchAPin, HIGH); // turn on internal pullup
digitalWrite(switchBPin, HIGH); // turn on internal pullup
digitalWrite(switchCPin, HIGH); // turn on internal pullup

pinMode(ledPin, OUTPUT);
Serial.begin(31250); // set MIDI baud rate
}

void loop() {
// deal with switchA
currentSwitchState = digitalRead(switchAPin);
if( currentSwitchState == LOW && switchAState == HIGH ) // push
noteOn(drumchan, note_bassdrum, 100);
if( currentSwitchState == HIGH && switchAState == LOW ) // release
noteOff(drumchan, note_bassdrum, 0);
switchAState = currentSwitchState;

// deal with switchB
currentSwitchState = digitalRead(switchBPin);
if( currentSwitchState == LOW && switchBState == HIGH ) // push
noteOn(drumchan, note_snaredrum, 100);
if( currentSwitchState == HIGH && switchBState == LOW ) // release
noteOff(drumchan, note_snaredrum, 0);
switchBState = currentSwitchState;

// deal with switchC
currentSwitchState = digitalRead(switchCPin);
if( currentSwitchState == LOW && switchCState == HIGH ) // push
noteOn(drumchan, note_hihatclosed, 100);
if( currentSwitchState == HIGH && switchCState == LOW ) // release
noteOff(drumchan, note_hihatclosed, 0);
switchCState = currentSwitchState;

// deal with first piezo, this is kind of a hack
val = analogRead(piezoAPin);
if( val >= PIEZOTHRESHOLD ) {
t=0;
while(analogRead(piezoAPin) >= PIEZOTHRESHOLD/2) {
t++;
}
noteOn(1,note_hihatopen, t*2);
delay(t);
noteOff(1,note_hihatopen,0);
}

// deal with second piezos, this is kind of a hack
val = analogRead(piezoBPin);
if( val >= PIEZOTHRESHOLD ) {
t=0;
while(analogRead(piezoBPin) >= PIEZOTHRESHOLD/2) {
t++;
}
noteOn(1,note_crash, t*2);
delay(t);
noteOff(1,note_crash,0);
}
}

// Send a MIDI note-on message. Like pressing a piano key
void noteOn(byte channel, byte note, byte velocity) {
midiMsg( (0x80 | (channel<<4)), note, velocity);
}

// Send a MIDI note-off message. Like releasing a piano key
void noteOff(byte channel, byte note, byte velocity) {
midiMsg( (0x80 | (channel<<4)), note, velocity);
}

// Send a general MIDI message
void midiMsg(byte cmd, byte data1, byte data2) {
digitalWrite(ledPin,HIGH); // indicate we're sending MIDI data
Serial.print(cmd, BYTE);
Serial.print(data1, BYTE);
Serial.print(data2, BYTE);
digitalWrite(ledPin,LOW);
}

dans la syntaxe

// what midi channel we're sending on
#define drumchan 1

// general midi drum notes
#define note_bassdrum 35
#define note_snaredrum 38
#define note_hihatclosed 42
#define note_hihatopen 44
#define note_crash 49

je ne sais pas si la definition des notes correspond à celle de son module drum ou que cela correspond à une note que peut générer arduino (fréquence ou quelque chose comme ça)

En fait, je pense que ce que tu as dans le monitor c'est les valeurs analogique (peut être en hexa si y'a des lettres). Avec Processing tu doit pouvoir récupérer la valeurs et en fonction de celle si, jouer tel ou tel son.
Pour Processing, va voir Libraries / Processing.org dans les librairies Sound. :wink:

Et, à propos ... j'essaye de faire un truc similaire avec Pure Data pour les sons, avec le modèle

capteurs (piezos, bouttons, etc.) -----> Arduino ---(série)---> PC \ Pure Data ----> readsf~ "..."

J'ai trouvé des fichiers son ici:

(librairie impressionnante)
... que j'ai téléchargé en masse via un script php de ma confection

Par contre, ça nécessite d'apprendre à se servir de Pure Data, ce qui ne me semble pas fortuit quand on veut faire des choses sympa en musique électronique !

Pour plus de détails, je peux fournir ma configuration, mais elle n'a rien de standart (n'ayant pas réussi à installer les librairies de communication avec arduino pour Pd, par exemple)

j'utilise une interface midi/usb...mais cela necessite t il d'avoir un soft pour gérer les sons ou les sons sont ils compris dans la syntaxe Arduino?

Je ne me suis pas penché sur le code en détail mais d'après ce que j'ai vu sur le site:
Le piezo, c'est juste une sorte "d'interrupteur" un peu mieux, ensuite ça envoie des commandes midi. Les commandes midi, ce ne sont que des commandes, il n'y a pas de son dans un signal midi. Il te faut donc quelque chose qui associe telle note midi à tel son.
Cette association peut-être faite par un appareil genre un synthétiseur, une batterie électronique etc. ou un ordinateur sur lequel il te faut un logiciel de musique en effet.
J'ai déjà fait ça avec le logiciel Ableton LIVE mais c'est un peu une usine à gaz si tu veux juste envoyer quuleques sons.
Je sais que QuickTime sais faire cette association quand il lit des fichiers .mid, par contre je ne sais pas si tu peux lui faire faire pour un signal midi en entrée de ta carte midi...
Le plus simple doit être d'utiliser GarageBand, il me semble que tu peux faire l'association (ou qu'elle est faite automatiquement lorsque t'enregistre en midi).

Je compte réaliser ce Midi drum kit quand j'aurai un peu de temps. Je vous tiendrai au courant. :slight_smile:

Je suis en train de fabriquer ce drum kit .
Mais alors quelqu'un à réussit à le faire ici ou non?
En fait je voudrais savoir si il n'y a pas moyen de récupéré le midi qui vient de l'arduino via midi yoke et de le choper après en In dans Ableton Live ?
Mais je ne sais pas si c'est plus simple que de brancher en midi physiquement.
C'est juste que sa éviterait l'achat de matériels inutile. Ou pas .

Fru .
Vive Arduino ! ;D

where does the midi data go??
to midi controller?or what?

Whaou, ça c'est du déterrage de post (presque 2 ans). Et "in english" en plus :slight_smile:

1 Like