(update property name) |
|||
(8 révisions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
− | {{ | + | {{Tuto Details |
− | + | |Main_Picture=Pavé_Numérique_MIDI_midikeypad_wiki.jpg | |
− | |||
− | |||
− | |Main_Picture= | ||
|Licences=Attribution (CC BY) | |Licences=Attribution (CC BY) | ||
− | |Description=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 ! | + | |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> |
|Area=Electronics, Music and Sound | |Area=Electronics, Music and Sound | ||
|Type=Technique | |Type=Technique | ||
Ligne 14 : | 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 | ||
}} | }} | ||
− | {{ | + | {{Introduction |
− | |Introduction=Afin d’apprendre à créer des instruments MIDI (c.a.d des instruments | + | |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 | + | <!--T:3--> |
+ | Puis je me suis dit que je pourrais aussi directement utiliser un pavé numérique (keypad). | ||
− | En | + | <!--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> | ||
}} | }} | ||
− | {{ | + | {{TutoVideo |
|VideoType=Youtube | |VideoType=Youtube | ||
|VideoURLYoutube=https://www.youtube.com/watch?v=Hx9eIiDx2Bc | |VideoURLYoutube=https://www.youtube.com/watch?v=Hx9eIiDx2Bc | ||
}} | }} | ||
− | {{ | + | {{Materials |
|Step_Picture_00=Pavé_Numérique_MIDI_bom.png | |Step_Picture_00=Pavé_Numérique_MIDI_bom.png | ||
− | |Material=* Arduino micro (n’importe | + | |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 | + | * Du câble 26 AWG |
− | * Des vis (facultatif) | + | * Des vis (facultatif)</translate> |
− | |Tools=* Un fer à souder / étain | + | |Tools=<translate><!--T:7--> |
− | + | *Un fer à souder / étain | |
− | * Cable 26 AWG Monobrin (j’aime bien ces câbles qui sont très | + | *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 | ||
+ | }} | ||
}} | }} | ||
− | {{ | + | {{Separator}} |
− | {{ | + | {{Tuto Step |
− | |Step_Title=Couper les headers femelles | + | |Step_Title=<translate><!--T:8--> Couper les headers femelles</translate> |
− | |Step_Content=Tout d’abord il nous faut couper deux headers femelles de 17 broches (pour l’arduino) et | + | |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 | ||
}} | }} | ||
− | {{ | + | {{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 | + | <!--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 | ||
}} | }} | ||
− | {{ | + | {{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 | ||
}} | }} | ||
− | {{ | + | {{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 | ||
}} | }} | ||
− | {{ | + | {{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, | + | |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 | + | <!--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 | ||
}} | }} | ||
− | {{ | + | {{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 : | + | <!--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 97 : | 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 | + | * Extracter l’archive '''Keypad-master.zip''' dans votre dossier libraries de votre sketchbook, vous devriez avoir un dossier '''Keypad-Master''' dans '''libraries'''</translate> |
}} | }} | ||
− | {{ | + | {{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. | ||
− | + | <!--T:36--> | |
− | + | '''Compromis sur la mémoire''' | |
− | + | <!--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 | + | <!--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> | ||
}} | }} | ||
− | {{ | + | {{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 | + | |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) | ||
+ | |||
+ | <!--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"}; | ||
− | + | <!--T:45--> | |
− | Les notes sont | + | '''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 | + | <!--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>] | ||
− | + | <!--T:60--> | |
− | + | '''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--> | ||
}; | }; | ||
− | + | <!--T:72--> | |
− | Prominy Metal-V permet de gérer si les cordes sur une guitare sont | + | '''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 | + | <!--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 | ||
}} | }} | ||
− | {{ | + | {{Tuto Step |
− | |Step_Title=Transformer le keypad en guitare électrique ! | + | |Step_Title=<translate><!--T:79--> Transformer le keypad en guitare électrique !</translate> |
− | |Step_Content=Cette partie nécessite des connaissances en MAO (musique assisté par ordinateur) | + | |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. | 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>]) | 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. | 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: | 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. | * 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. | ||
Ligne 210 : | Ligne 291 : | ||
J’ai combiné deux guitares afin d’avoir un son plus lourd. | 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) | 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é. | 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>]). | 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) | (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! | + | <!--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_00=Pavé_Numérique_MIDI_hot_solo.png | ||
|Step_Picture_01=Pavé_Numérique_MIDI_v_metal.png | |Step_Picture_01=Pavé_Numérique_MIDI_v_metal.png | ||
}} | }} | ||
− | {{ | + | {{Notes |
− | |Notes= | + | |Notes=<translate></translate> |
}} | }} | ||
− | {{ | + | {{Tuto Status |
− | |Complete= | + | |Complete=Published |
}} | }} |
Auteur Rémi Sarrailh (µsini) | Dernière modification 9/12/2019 par Clementflipo
Musique, Arduino, MIDI, Instrument de musique Pavé_Numérique_MIDI_midikeypad_wiki.jpg fr none Technique 0
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.
Youtube
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
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.
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.
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.
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.
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 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
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.
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};
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!
Published
Vous avez entré un nom de page invalide, avec un ou plusieurs caractères suivants :
< > @ ~ : * € £ ` + = / \ | [ ] { } ; ? #