Pavé Numérique MIDI : Différence entre versions

(update property name)
 
(9 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
{{ {{tntn|Tuto Details}}
+
{{Tuto Details
|SourceLanguage=none
+
|Main_Picture=Pavé_Numérique_MIDI_midikeypad_wiki.jpg
|Language=fr
 
|IsTranslation=0
 
|Main_Picture=Pavé_Numérique_MIDI_keypadmidi.jpg
 
 
|Licences=Attribution (CC BY)
 
|Licences=Attribution (CC BY)
|Description=Nous allons voir comment utiliser un pavé numérique pour faire de la musique
+
|Description=<translate><!--T:1--> Nous allons voir comment utiliser un pavé numérique pour faire de la musique, avec les bons programmes on peut même en faire une guitare électrique !</translate>
Avec les bons programmes on peut même en faire une guitare électrique !
 
 
|Area=Electronics, Music and Sound
 
|Area=Electronics, Music and Sound
 
|Type=Technique
 
|Type=Technique
Ligne 15 : Ligne 11 :
 
|Currency=EUR (€)
 
|Currency=EUR (€)
 
|Tags=Musique, Arduino, MIDI, Instrument de musique
 
|Tags=Musique, Arduino, MIDI, Instrument de musique
 +
|SourceLanguage=none
 +
|Language=fr
 +
|IsTranslation=0
 
}}
 
}}
{{ {{tntn|Introduction}}
+
{{Introduction
|Introduction=Afin d’apprendre à créer des instruments MIDI (c.a.d des instruments utilisable dans des logiciels de musique), je me suis entraîné à l’aide de simples boutons.
+
|Introduction=<translate><!--T:2-->
 +
Afin d’apprendre à créer des instruments MIDI (c.a.d des instruments utilisables dans des logiciels de musique), je me suis entraîné à l’aide de simples boutons.
  
Puis je me suis dit que je pourrais aussi directement utilisé un pavé numérique (keypad).
+
<!--T:3-->
 +
Puis je me suis dit que je pourrais aussi directement utiliser un pavé numérique (keypad).
  
En soit ça m’a paru une bonne idée car cela permet d’avoir 16 boutons facilement.
+
<!--T:4-->
 +
En soi ça m’a paru une bonne idée, car cela permet d’avoir 16 boutons facilement.
  
Mais les pavés numériques '''ne sont pas pensés pour pouvoir être utilisés avec plusieurs boutons en même temps''' donc si cela est important pour vous, vous êtes prévenus.
+
<!--T:5-->
 +
Mais les pavés numériques '''ne sont pas pensés pour pouvoir être utilisés avec plusieurs boutons en même temps''' donc si cela est important pour vous, vous êtes prévenus.</translate>
 
}}
 
}}
{{ {{tntn|TutoVideo}}
+
{{TutoVideo
 
|VideoType=Youtube
 
|VideoType=Youtube
 
|VideoURLYoutube=https://www.youtube.com/watch?v=Hx9eIiDx2Bc
 
|VideoURLYoutube=https://www.youtube.com/watch?v=Hx9eIiDx2Bc
 
}}
 
}}
{{ {{tntn|Materials}}
+
{{Materials
 
|Step_Picture_00=Pavé_Numérique_MIDI_bom.png
 
|Step_Picture_00=Pavé_Numérique_MIDI_bom.png
|Material=* Arduino micro (n’importe quel carte avec un atmega32u4 peut être utilisés)
+
|Material=<translate><!--T:6-->
 +
* Arduino micro (n’importe quelle carte avec un atmega32u4 peut être utilisée)
 
* Afficheur OLED I2C 128x32
 
* Afficheur OLED I2C 128x32
 
* Pavé numérique (keypad) 16 Touches
 
* Pavé numérique (keypad) 16 Touches
 
* Une stripboard
 
* Une stripboard
 
* Des headers femelles
 
* Des headers femelles
* Du câbles 26 AWG Monobrin
+
* Du câble 26 AWG
* Des vis (facultatif)
+
* Des vis (facultatif)</translate>
|Tools=* Un fer à souder / étain
+
|Tools=<translate><!--T:7-->
* Pistolet à colle chaud (pour coller l’écran oled)
+
*Un fer à souder / étain
* Cable 26 AWG Monobrin (j’aime bien ces câbles qui sont très fin)
+
*Cable 26 AWG Monobrin (j’aime bien ces câbles qui sont très fins)
* Un dremel (pour couper la breadboard, fait un trou pour les vis)
+
*Un dremel (pour couper la breadboard, fait un trou pour les vis)
* Une pince coupante
+
*Une pince coupante</translate>
 +
|ExternalAttachmentsLinks={{ExternalAttachmentsLinks
 +
|ExternalAttachmentsLinks=https://github.com/maditnerd/keypad_midi
 
}}
 
}}
{{ {{tntn|Separator}}}}
+
}}
{{ {{tntn|Tuto Step}}
+
{{Separator}}
|Step_Title=Couper les headers femelles
+
{{Tuto Step
|Step_Content=Tout d’abord il nous faut couper deux headers femelles de 17 broches (pour l’arduino) et un de 4 broches (pour l’écran OLED)
+
|Step_Title=<translate><!--T:8--> Couper les headers femelles</translate>
 +
|Step_Content=<translate><!--T:9-->
 +
Tout d’abord il nous faut couper deux headers femelles de 17 broches (pour l’arduino) et une de 4 broches (pour l’écran OLED)
  
Voici une méthode pour le faire: [https://www.youtube.com/watch?v=qDG3VFSMSPQ <u>https://www.youtube.com/watch?v=qDG3VFSMSPQ</u>]
+
<!--T:10-->
 +
Voici une méthode pour le faire: [https://www.youtube.com/watch?v=qDG3VFSMSPQ <u>https://www.youtube.com/watch?v=qDG3VFSMSPQ</u>]</translate>
 
|Step_Picture_00=Pavé_Numérique_MIDI_headers.png
 
|Step_Picture_00=Pavé_Numérique_MIDI_headers.png
 
}}
 
}}
{{ {{tntn|Tuto Step}}
+
{{Tuto Step
|Step_Title=Soudure des headers
+
|Step_Title=<translate><!--T:11--> Soudure des headers</translate>
|Step_Content=Souder les headers sur la stripboard, vous pouvez vous aider de l’arduino micro pour ne pas vous tromper sur l’espacement (de 5 cases entre les deux)
+
|Step_Content=<translate><!--T:12-->
 +
Souder les headers sur la stripboard, vous pouvez vous aider de l’arduino micro pour ne pas vous tromper sur l’espacement (de 5 cases entre les deux)
  
''Personnellement, je n’ai pas utilisé de headers pour l’afficheur OLED, car j’avais retirer les broches.''
+
<!--T:13-->
 +
''Personnellement, je n’ai pas utilisé de headers pour l’afficheur OLED, car j’avais retiré les broches.''</translate>
 
|Step_Picture_00=Pavé_Numérique_MIDI_headers_solder.png
 
|Step_Picture_00=Pavé_Numérique_MIDI_headers_solder.png
 
}}
 
}}
{{ {{tntn|Tuto Step}}
+
{{Tuto Step
|Step_Title=Placement des composants
+
|Step_Title=<translate><!--T:14--> Placement des composants</translate>
|Step_Content=Vous pouvez soit coller le keypad (avec un pistolet à colle à chaud) où soit le visser en faisant des trous sur la stripboard.
+
|Step_Content=<translate><!--T:15-->
 +
Vous pouvez soit coller le keypad (avec un pistolet à colle à chaud) où soit le visser en faisant des trous sur la stripboard.
  
Il vaut mieux fixer le keypad avant de souder les câbles pour pouvoir plus facilement vérifier la longueur des câbles.
+
<!--T:16-->
 +
Il vaut mieux fixer le keypad avant de souder les câbles pour pouvoir plus facilement vérifier la longueur des câbles.</translate>
 
|Step_Picture_00=Pavé_Numérique_MIDI_components_placement.png
 
|Step_Picture_00=Pavé_Numérique_MIDI_components_placement.png
 
}}
 
}}
{{ {{tntn|Tuto Step}}
+
{{Tuto Step
|Step_Title=Soudure du Keypad
+
|Step_Title=<translate><!--T:17--> Soudure du Keypad</translate>
|Step_Content=Bon passons au vif du sujet, voilà comment souder le keypad.
+
|Step_Content=<translate><!--T:18-->
 +
Bon passons au vif du sujet, voilà comment souder le keypad.
  
 +
<!--T:19-->
 
Faites très attention à ne pas vous tromper en regarder votre arduino, tout est inversé.
 
Faites très attention à ne pas vous tromper en regarder votre arduino, tout est inversé.
  
Je vous conseille de partir de la broche 11, et de faire les suivantes.
+
<!--T:20-->
 +
Je vous conseille de partir de la broche 11, et de faire les suivantes.</translate>
 
|Step_Picture_00=Pavé_Numérique_MIDI_solder_keypad.png
 
|Step_Picture_00=Pavé_Numérique_MIDI_solder_keypad.png
 
}}
 
}}
{{ {{tntn|Tuto Step}}
+
{{Tuto Step
|Step_Title=Soudure de l'afficheur OLED
+
|Step_Title=<translate><!--T:21--> Soudure de l'afficheur OLED</translate>
|Step_Content=Voici comment relier notre écran OLED, cette écran est relié en I2C (un protocole de communication) et utilise donc les broches 3 et 2 (c’est toujours le cas sur les cartes qui utilise un atmega32u4)
+
|Step_Content=<translate><!--T:22-->
 +
Voici comment relier notre écran OLED, cet écran est relié en I2C (un protocole de communication) et utilise donc les broches 3 et 2 (c’est toujours le cas sur les cartes qui utilise un atmega32u4)
  
Noter que le GND (la terre) et le 5v est sur la même colonne.
+
<!--T:23-->
 +
Noter que le GND (la terre) et le 5v sont sur la même colonne.</translate>
 
|Step_Picture_00=Pavé_Numérique_MIDI_solder_oled.png
 
|Step_Picture_00=Pavé_Numérique_MIDI_solder_oled.png
 
}}
 
}}
{{ {{tntn|Tuto Step}}
+
{{Tuto Step
|Step_Title=Ajout des bibliothèques
+
|Step_Title=<translate><!--T:24--> Ajout des bibliothèques</translate>
|Step_Content=Maintenant que notre keypad midi est prêt, il nous reste à programmer notre arduino micro, mon code a été fait d’une traite donc je ne garantis pas que tout marche correctement.
+
|Step_Content=<translate><!--T:25-->
 +
Maintenant que notre keypad midi est prêt, il nous reste à programmer notre arduino micro, mon code a été fait d’une traite donc je ne garantis pas que tout marche correctement.
  
Le code est disponible ici : [https://github.com/usini/keypad_midi <u>https://github.com/usini/keypad_midi</u>]
+
<!--T:26-->
 +
Le code est disponible ici : https://github.com/maditnerd/keypad_midi
  
 +
<!--T:27-->
 
Le code utilise 3 bibliothèques qu’ils nous faut installer.
 
Le code utilise 3 bibliothèques qu’ils nous faut installer.
  
 +
<!--T:28-->
 
Voici un petit rappel de comment gérer les bibliothèques.
 
Voici un petit rappel de comment gérer les bibliothèques.
  
 +
<!--T:29-->
 
[https://www.arduino.cc/en/Guide/Libraries <u>https://www.arduino.cc/en/Guide/Libraries</u>]
 
[https://www.arduino.cc/en/Guide/Libraries <u>https://www.arduino.cc/en/Guide/Libraries</u>]
 
* '''MidiUSB''' de Gary Grewal (Pour que l’arduino soit reconnu comme un instrument midi)
 
* '''MidiUSB''' de Gary Grewal (Pour que l’arduino soit reconnu comme un instrument midi)
Ligne 98 : Ligne 121 :
 
MidiUSB et U8g2 s’installe depuis le gestionnaire de bibliothèque d’Arduino.
 
MidiUSB et U8g2 s’installe depuis le gestionnaire de bibliothèque d’Arduino.
  
 +
<!--T:30-->
 
Pour '''Keypad c’est plus complexe''', il s’agit d’une version modifié de la bibliothèque Keypad de Mark Stanley, Alexander Brevig.
 
Pour '''Keypad c’est plus complexe''', il s’agit d’une version modifié de la bibliothèque Keypad de Mark Stanley, Alexander Brevig.
  
 +
<!--T:31-->
 
C’est la seul qui est capable de gérer l’appui de 4 touches en simultanée.
 
C’est la seul qui est capable de gérer l’appui de 4 touches en simultanée.
  
 +
<!--T:32-->
 
L’appui simultanée marche plus où moins, vu que mon objectif est surtout de faire un instrument monophonique (c.a.d une note à la fois) ça suffit mais si vous voulez jouer des accords, il y a aura un léger décalage dans le son.
 
L’appui simultanée marche plus où moins, vu que mon objectif est surtout de faire un instrument monophonique (c.a.d une note à la fois) ça suffit mais si vous voulez jouer des accords, il y a aura un léger décalage dans le son.
  
 +
<!--T:33-->
 
Pour installer Keypad, il faut
 
Pour installer Keypad, il faut
 
* Aller sur le github : [https://github.com/Nullkraft/Keypad <u>https://github.com/Nullkraft/Keypad</u>]
 
* Aller sur le github : [https://github.com/Nullkraft/Keypad <u>https://github.com/Nullkraft/Keypad</u>]
 
* Cliquer sur le bouton vert '''Clone/Download'''
 
* Cliquer sur le bouton vert '''Clone/Download'''
* Extracter l’archive '''Keypad-master.zip''' dans votre dossier libraries de votre sketchbook, vous devriez avoir un dossier '''Keypad-Master''' dans par '''sketchbook/libraries'''
+
* Extracter l’archive '''Keypad-master.zip''' dans votre dossier libraries de votre sketchbook, vous devriez avoir un dossier '''Keypad-Master''' dans '''libraries'''</translate>
 
}}
 
}}
{{ {{tntn|Tuto Step}}
+
{{Tuto Step
|Step_Title=Informations sur le programme
+
|Step_Title=<translate><!--T:34--> Informations sur le programme</translate>
|Step_Content=J’ai essayé de commenter au mieux le code, donc je ne vais pas trop rentrer dans les détails, n’hésitez pas à me demander si vous voulez plus d’informations sur une partie en particulier.
+
|Step_Content=<translate><!--T:35-->
 +
J’ai essayé de commenter au mieux le code, donc je ne vais pas trop rentrer dans les détails, n’hésitez pas à me demander si vous voulez plus d’informations sur une partie en particulier.
  
=== Compromis sur la mémoire ===
+
<!--T:36-->
J’ai du faire des compromis dans le programme, principalement faute de l’écran.
+
'''Compromis sur la mémoire'''
  
En effet la bibliothèque U8g2 consomme beaucoup de mémoire dynamique (utiliser par les variables), j’aurais pu utilisé U8x8 ou la bibliothèque d’Adafruit mais malheureusement les lettres sur l’écran sont soit trop gros soit trop petit.
+
<!--T:37-->
 +
J’ai dû faire des compromis dans le programme, principalement faute de l’écran.
  
J’ai donc dû limiter le nombre de preset à 8, il est surement possible d’augmenter le nombre de preset en ne personnalisant pas la velocité par ex.
+
<!--T:38-->
 +
En effet la bibliothèque U8g2 consomme beaucoup de mémoire dynamique (utiliser par les variables), j’aurais pu utiliser U8x8 ou la bibliothèque d’Adafruit mais malheureusement les lettres sur l’écran sont soit trop grosses soit trop petites.
 +
 
 +
<!--T:39-->
 +
J’ai donc dû limiter le nombre de preset à 8, il est surement possible d’augmenter le nombre de preset en ne personnalisant pas la vélocité par ex.</translate>
 
}}
 
}}
{{ {{tntn|Tuto Step}}
+
{{Tuto Step
|Step_Title=Modifier les presets (notes/velocité)
+
|Step_Title=<translate><!--T:40--> Modifier les presets (notes/velocité)</translate>
|Step_Content=Le plus important est le début du programme, c’est ici que l’on va définir nos notes et la velocité de celle-ci (velocité est le volume des notes)
+
|Step_Content=<translate><!--T:41-->
 +
Le plus important est le début du programme, c’est ici que l’on va définir nos notes et la vélocité de celle-ci (vélocité est le volume des notes)
  
=== Nom des preset ===
+
<!--T:42-->
 +
'''Nom des preset'''
 +
 
 +
<!--T:43-->
 
Le nom des preset est stocké dans un tableau
 
Le nom des preset est stocké dans un tableau
  
 +
<!--T:44-->
 
String preset_name[PRESET] = {"Du Riechst So Gut", "FF - Replica", "DrumKit", "A", "4", "5", "6", "B"};
 
String preset_name[PRESET] = {"Du Riechst So Gut", "FF - Replica", "DrumKit", "A", "4", "5", "6", "B"};
  
=== Notes ===
+
<!--T:45-->
Les notes sont stockés dans un tableau à deux dimensions, les notes sont dans l’ordre des boutons (la première est le 1 , la deuxième le 2 etc…)
+
'''Notes'''
  
 +
<!--T:46-->
 +
Les notes sont stockées dans un tableau à deux dimensions, les notes sont dans l’ordre des boutons (la première est le 1 , la deuxième le 2, etc.)
 +
 +
<!--T:47-->
 
int notes[PRESET][NB_BUTTONS] = {
 
int notes[PRESET][NB_BUTTONS] = {
  
 +
<!--T:48-->
 
{38, 38, 39, 39, 43, 46, 38, 38, 48, 46, 45, 45, 57, 60, 60, 57}, //Preset 1
 
{38, 38, 39, 39, 43, 46, 38, 38, 48, 46, 45, 45, 57, 60, 60, 57}, //Preset 1
  
 +
<!--T:49-->
 
{37, 40, 42, 39, 40, 38, 41, 40, 48, 46, 45, 45, 57, 60, 60, 57}, // Preset 2
 
{37, 40, 42, 39, 40, 38, 41, 40, 48, 46, 45, 45, 57, 60, 60, 57}, // Preset 2
  
 +
<!--T:50-->
 
{35, 35, 38, 42, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 55, 57}, // Preset 3
 
{35, 35, 38, 42, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 55, 57}, // Preset 3
  
 +
<!--T:51-->
 
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},  //Preset A
 
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},  //Preset A
  
 +
<!--T:52-->
 
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},  //Preset 4
 
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},  //Preset 4
  
 +
<!--T:53-->
 
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},  //Preset 5
 
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},  //Preset 5
  
 +
<!--T:54-->
 
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},  //Preset 6
 
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},  //Preset 6
  
 +
<!--T:55-->
 
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}  //Preset B
 
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}  //Preset B
  
 +
<!--T:56-->
 
};
 
};
  
Les notes sont stockés en tant que notes midi (elles vont de 0 à 127)  voici un tableau de correspondances avec la notation anglaise.
+
<!--T:57-->
 +
Les notes sont stockées en tant que notes midi (elles vont de 0 à 127)  voici un tableau de correspondances avec la notation anglaise.
  
 +
<!--T:58-->
 
Si vous êtes plus habitués au DO,RE,MI … voici la correspondance des notes
 
Si vous êtes plus habitués au DO,RE,MI … voici la correspondance des notes
  
 +
<!--T:59-->
 
[https://bassandbeatbox.com/lire-la-musique-avec-la-notation-americaine/ <u>https://bassandbeatbox.com/lire-la-musique-avec-la-notation-americaine/</u>]
 
[https://bassandbeatbox.com/lire-la-musique-avec-la-notation-americaine/ <u>https://bassandbeatbox.com/lire-la-musique-avec-la-notation-americaine/</u>]
  
=== Velocité ===
+
<!--T:60-->
Même chose pour la velocité (pareil de 0 à 127) (
+
'''Vélocité'''
 +
 
 +
<!--T:61-->
 +
Même chose pour la vélocité (pareil de 0 à 127) (
  
 +
<!--T:62-->
 
int velocity[PRESET][NB_BUTTONS] = {
 
int velocity[PRESET][NB_BUTTONS] = {
  
 +
<!--T:63-->
 
{70, 70, 70, 70, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100}, //Preset 1
 
{70, 70, 70, 70, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100}, //Preset 1
  
 +
<!--T:64-->
 
{70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70}, //Preset 2
 
{70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70}, //Preset 2
  
 +
<!--T:65-->
 
{100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100}, //Preset 3
 
{100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100}, //Preset 3
  
 +
<!--T:66-->
 
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //Preset A
 
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //Preset A
  
 +
<!--T:67-->
 
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //Preset 4
 
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //Preset 4
  
 +
<!--T:68-->
 
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //Preset 5
 
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //Preset 5
  
 +
<!--T:69-->
 
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //Preset 6
 
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //Preset 6
  
 +
<!--T:70-->
 
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //Preset B
 
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //Preset B
  
 +
<!--T:71-->
 
};
 
};
  
=== Changeur de velocité ===
+
<!--T:72-->
Prominy Metal-V permet de gérer si les cordes sur une guitare sont étouffés ou pas selon que la vélocité soit inférieur à 70 ou supérieur à 100.
+
'''Changeur de vélocité'''
 +
 
 +
<!--T:73-->
 +
Prominy Metal-V permet de gérer si les cordes sur une guitare sont étouffées ou pas selon que la vélocité soit inférieure à 70 ou supérieure à 100.
  
J’ai donc crée un système pour que quand D est appuyé la velocité monte à 100.
+
<!--T:74-->
 +
J’ai donc créé un système pour que quand D est appuyé la vélocité monte à 100.
  
 +
<!--T:75-->
 
Un tableau de booléen permet d’activer ou non cette fonctionnalité.
 
Un tableau de booléen permet d’activer ou non cette fonctionnalité.
  
 +
<!--T:76-->
 
const int velocity_button = 15; // The D key is used to change velocity if velocity changer is true
 
const int velocity_button = 15; // The D key is used to change velocity if velocity changer is true
  
 +
<!--T:77-->
 
const int VELOCITY_CHANGE = 100; //Velocity when D is pressed (should probably be changeable)
 
const int VELOCITY_CHANGE = 100; //Velocity when D is pressed (should probably be changeable)
  
bool velocity_changer[PRESET] = {false, true, false, false, false, false, false, false};
+
<!--T:78-->
 +
bool velocity_changer[PRESET] = {false, true, false, false, false, false, false, false};</translate>
 
|Step_Picture_00=Pavé_Numérique_MIDI_midi_note.png
 
|Step_Picture_00=Pavé_Numérique_MIDI_midi_note.png
 
}}
 
}}
{{ {{tntn|Notes}}
+
{{Tuto Step
|Notes=
+
|Step_Title=<translate><!--T:79--> Transformer le keypad en guitare électrique !</translate>
 +
|Step_Content=<translate><!--T:80-->
 +
Cette partie nécessite des connaissances en MAO (musique assisté par ordinateur)
 +
 
 +
<!--T:81-->
 +
Alors évidemment pas de miracle, afin d’obtenir un son convaincant de guitare, j’ai utilisé des plugins payants.
 +
 
 +
<!--T:82-->
 +
Pour “hoster” les plugins VST (des plugins pour générer/modifier) du son, j’ai utilisé Reason ([https://www.propellerheads.com/fr/reason <u>https://www.propellerheads.com/fr/reason</u>])
 +
 
 +
<!--T:83-->
 +
Vous pouvez évidemment utiliser n’importe quel logiciel capable de gérer des plugins VST.
 +
 
 +
<!--T:84-->
 +
Voici les plugins que j’ai utilisé pour la guitare:
 +
* Native Instrument Kontakt : [https://www.native-instruments.com/fr/products/komplete/samplers/kontakt-6/ <u>https://www.native-instruments.com/fr/products/komplete/samplers/kontakt-6/</u>]  Ce programme permet d’utiliser notre plugin guitare.
 +
* Prominy V-Metal [http://prominy.com/V_METAL.htm <u>http://prominy.com/V_METAL.htm</u>]  Le plugin de la guitare
 +
* Guitar Rig 5 [https://www.native-instruments.com/fr/products/komplete/guitar/guitar-rig-5-pro/ <u>https://www.native-instruments.com/fr/products/komplete/guitar/guitar-rig-5-pro/</u>]  Le plugin pour les effets de guitare
 +
J’ai combiné deux guitares afin d’avoir un son plus lourd.
 +
 
 +
<!--T:85-->
 +
Une qui joue note par note (no legato) et une qui joue des accords (power chords)
 +
 
 +
<!--T:86-->
 +
Pour les effets j’ai utilisé le preset '''Sheder Solo''' que j’ai un peu modifié.
 +
 
 +
<!--T:87-->
 +
Je réfléchis à faire une version light qui pourrait fonctionner avec LMMS [https://lmms.io/ <u>https://lmms.io/</u>] ou samplerbox [http://www.samplerbox.org/ <u>http://www.samplerbox.org/</u>] en utilisant des samples, si ça vous intéresse, parlez m’en en MP sur twitter ([https://twitter.com/m4dnerd <u>https://twitter.com/m4dnerd</u>]).
 +
 
 +
<!--T:88-->
 +
(Ca sera probablement pas aussi bien par contre, réver pas)
 +
 
 +
<!--T:89-->
 +
Voilà pour un rapide tour de mon rig, si vous avez jeter un coup d’oeil au prix des plugins, ça vous a probablement refroidi un peu!</translate>
 +
|Step_Picture_00=Pavé_Numérique_MIDI_hot_solo.png
 +
|Step_Picture_01=Pavé_Numérique_MIDI_v_metal.png
 +
}}
 +
{{Notes
 +
|Notes=<translate></translate>
 
}}
 
}}
{{ {{tntn|Tuto Status}}
+
{{Tuto Status
|Complete=Draft
+
|Complete=Published
 
}}
 
}}

Version actuelle datée du 9 décembre 2019 à 12:48

Auteur avatarRémi Sarrailh (µsini) | Dernière modification 9/12/2019 par Clementflipo

Pavé Numérique MIDI midikeypad wiki.jpg
Nous allons voir comment utiliser un pavé numérique pour faire de la musique, avec les bons programmes on peut même en faire une guitare électrique !

Introduction

Afin d’apprendre à créer des instruments MIDI (c.a.d des instruments utilisables dans des logiciels de musique), je me suis entraîné à l’aide de simples boutons.

Puis je me suis dit que je pourrais aussi directement utiliser un pavé numérique (keypad).

En soi ça m’a paru une bonne idée, car cela permet d’avoir 16 boutons facilement.

Mais les pavés numériques ne sont pas pensés pour pouvoir être utilisés avec plusieurs boutons en même temps donc si cela est important pour vous, vous êtes prévenus.

Video d'introduction

Matériaux

  • Arduino micro (n’importe quelle carte avec un atmega32u4 peut être utilisée)
  • Afficheur OLED I2C 128x32
  • Pavé numérique (keypad) 16 Touches
  • Une stripboard
  • Des headers femelles
  • Du câble 26 AWG
  • Des vis (facultatif)

Outils

  • Un fer à souder / étain
  • Cable 26 AWG Monobrin (j’aime bien ces câbles qui sont très fins)
  • Un dremel (pour couper la breadboard, fait un trou pour les vis)
  • Une pince coupante

Étape 1 - Couper les headers femelles

Tout d’abord il nous faut couper deux headers femelles de 17 broches (pour l’arduino) et une de 4 broches (pour l’écran OLED)

Voici une méthode pour le faire: https://www.youtube.com/watch?v=qDG3VFSMSPQ




Étape 2 - Soudure des headers

Souder les headers sur la stripboard, vous pouvez vous aider de l’arduino micro pour ne pas vous tromper sur l’espacement (de 5 cases entre les deux)

Personnellement, je n’ai pas utilisé de headers pour l’afficheur OLED, car j’avais retiré les broches.




Étape 3 - Placement des composants

Vous pouvez soit coller le keypad (avec un pistolet à colle à chaud) où soit le visser en faisant des trous sur la stripboard.

Il vaut mieux fixer le keypad avant de souder les câbles pour pouvoir plus facilement vérifier la longueur des câbles.




Étape 4 - Soudure du Keypad

Bon passons au vif du sujet, voilà comment souder le keypad.

Faites très attention à ne pas vous tromper en regarder votre arduino, tout est inversé.

Je vous conseille de partir de la broche 11, et de faire les suivantes.




Étape 5 - Soudure de l'afficheur OLED

Voici comment relier notre écran OLED, cet écran est relié en I2C (un protocole de communication) et utilise donc les broches 3 et 2 (c’est toujours le cas sur les cartes qui utilise un atmega32u4)

Noter que le GND (la terre) et le 5v sont sur la même colonne.




Étape 6 - Ajout des bibliothèques

Maintenant que notre keypad midi est prêt, il nous reste à programmer notre arduino micro, mon code a été fait d’une traite donc je ne garantis pas que tout marche correctement.

Le code est disponible ici : https://github.com/maditnerd/keypad_midi

Le code utilise 3 bibliothèques qu’ils nous faut installer.

Voici un petit rappel de comment gérer les bibliothèques.

https://www.arduino.cc/en/Guide/Libraries

  • MidiUSB de Gary Grewal (Pour que l’arduino soit reconnu comme un instrument midi)
  • U8g2 de olikraus (Pour l’écran Oled)
  • Keypad de NullKraft (Pour le keypad)

MidiUSB et U8g2 s’installe depuis le gestionnaire de bibliothèque d’Arduino.

Pour Keypad c’est plus complexe, il s’agit d’une version modifié de la bibliothèque Keypad de Mark Stanley, Alexander Brevig.

C’est la seul qui est capable de gérer l’appui de 4 touches en simultanée.

L’appui simultanée marche plus où moins, vu que mon objectif est surtout de faire un instrument monophonique (c.a.d une note à la fois) ça suffit mais si vous voulez jouer des accords, il y a aura un léger décalage dans le son.

Pour installer Keypad, il faut

  • Aller sur le github : https://github.com/Nullkraft/Keypad
  • Cliquer sur le bouton vert Clone/Download
  • Extracter l’archive Keypad-master.zip dans votre dossier libraries de votre sketchbook, vous devriez avoir un dossier Keypad-Master dans libraries

Étape 7 - Informations sur le programme

J’ai essayé de commenter au mieux le code, donc je ne vais pas trop rentrer dans les détails, n’hésitez pas à me demander si vous voulez plus d’informations sur une partie en particulier.

Compromis sur la mémoire

J’ai dû faire des compromis dans le programme, principalement faute de l’écran.

En effet la bibliothèque U8g2 consomme beaucoup de mémoire dynamique (utiliser par les variables), j’aurais pu utiliser U8x8 ou la bibliothèque d’Adafruit mais malheureusement les lettres sur l’écran sont soit trop grosses soit trop petites.

J’ai donc dû limiter le nombre de preset à 8, il est surement possible d’augmenter le nombre de preset en ne personnalisant pas la vélocité par ex.

Étape 8 - Modifier les presets (notes/velocité)

Le plus important est le début du programme, c’est ici que l’on va définir nos notes et la vélocité de celle-ci (vélocité est le volume des notes)

Nom des preset

Le nom des preset est stocké dans un tableau

String preset_name[PRESET] = {"Du Riechst So Gut", "FF - Replica", "DrumKit", "A", "4", "5", "6", "B"};

Notes

Les notes sont stockées dans un tableau à deux dimensions, les notes sont dans l’ordre des boutons (la première est le 1 , la deuxième le 2, etc.)

int notes[PRESET][NB_BUTTONS] = {

{38, 38, 39, 39, 43, 46, 38, 38, 48, 46, 45, 45, 57, 60, 60, 57}, //Preset 1

{37, 40, 42, 39, 40, 38, 41, 40, 48, 46, 45, 45, 57, 60, 60, 57}, // Preset 2

{35, 35, 38, 42, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 55, 57}, // Preset 3

{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},  //Preset A

{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},  //Preset 4

{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},  //Preset 5

{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},  //Preset 6

{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}  //Preset B

};

Les notes sont stockées en tant que notes midi (elles vont de 0 à 127)  voici un tableau de correspondances avec la notation anglaise.

Si vous êtes plus habitués au DO,RE,MI … voici la correspondance des notes

https://bassandbeatbox.com/lire-la-musique-avec-la-notation-americaine/

Vélocité

Même chose pour la vélocité (pareil de 0 à 127) (

int velocity[PRESET][NB_BUTTONS] = {

{70, 70, 70, 70, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100}, //Preset 1

{70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70}, //Preset 2

{100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100}, //Preset 3

{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //Preset A

{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //Preset 4

{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //Preset 5

{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //Preset 6

{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //Preset B

};

Changeur de vélocité

Prominy Metal-V permet de gérer si les cordes sur une guitare sont étouffées ou pas selon que la vélocité soit inférieure à 70 ou supérieure à 100.

J’ai donc créé un système pour que quand D est appuyé la vélocité monte à 100.

Un tableau de booléen permet d’activer ou non cette fonctionnalité.

const int velocity_button = 15; // The D key is used to change velocity if velocity changer is true

const int VELOCITY_CHANGE = 100; //Velocity when D is pressed (should probably be changeable)

bool velocity_changer[PRESET] = {false, true, false, false, false, false, false, false};




Étape 9 - Transformer le keypad en guitare électrique !

Cette partie nécessite des connaissances en MAO (musique assisté par ordinateur)

Alors évidemment pas de miracle, afin d’obtenir un son convaincant de guitare, j’ai utilisé des plugins payants.

Pour “hoster” les plugins VST (des plugins pour générer/modifier) du son, j’ai utilisé Reason (https://www.propellerheads.com/fr/reason)

Vous pouvez évidemment utiliser n’importe quel logiciel capable de gérer des plugins VST.

Voici les plugins que j’ai utilisé pour la guitare:

J’ai combiné deux guitares afin d’avoir un son plus lourd.

Une qui joue note par note (no legato) et une qui joue des accords (power chords)

Pour les effets j’ai utilisé le preset Sheder Solo que j’ai un peu modifié.

Je réfléchis à faire une version light qui pourrait fonctionner avec LMMS https://lmms.io/ ou samplerbox http://www.samplerbox.org/ en utilisant des samples, si ça vous intéresse, parlez m’en en MP sur twitter (https://twitter.com/m4dnerd).

(Ca sera probablement pas aussi bien par contre, réver pas)

Voilà pour un rapide tour de mon rig, si vous avez jeter un coup d’oeil au prix des plugins, ça vous a probablement refroidi un peu!



Commentaires

Published