IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

matser

un générateur de lignes d'accords en notation abc

Noter ce billet
par , 23/08/2022 à 11h00 (1273 Affichages)
Générateur de ligne d'accords pour le reggae

introduction
selon le cycle des quintes, les accdord voisin du do majeur sont les accords suivants:
fa majeur,sol majeur,ré mineur,la mineur,mi minieur.
il parait que si on choisi quatre accords voisins du do dans le cycle des quintes, do y compris, on obtient quelque chose de potable.

le programme
chaque mesure sera joué en contre-temps avec le même accord. Chacune de ces mesures n'est donc constituée que d'un seul accord. On implémente ces mesures dans le tableau "accord":
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
  std::string accord[6]={
    "z [CEG] z [CEG]|",//do majeur (do mi sol)
    "z [DFA] z [DFA]|",//ré mineur (ré fa la)
    "z [EGB] z [EGB]|",//mi mineur (mi sol si)
    "z [FAc] z [FAc]|",//fa majeur (fa la do)
    "z [GBd] z [GBd]|",//sol majeur (sol si ré)
    "z [Ace] z [Ace]|"//la mineur (la do mi)
  };
Pour faire une ligne, le programme en choisira 4 accords aléatoirement, un accord pouvant se répéter (il y a donc 6^4=1296 lignes possibles).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
  std::string utilise[4];
  for(int i=0;i<4;i++)
    utilise[i]=accord[distr(eng)];
Pour l'entête, un std::cout sera utilisé ainsi:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
std::cout<<"X: 1\nK: C\nM: 4/4\nL: 1/4"<<std::endl;
La ligne se constitue de quatre accord et est répété à quatre reprises. Le programme écrit quatre mesures sur quatre portées.la dernière portée (i=3) se termine par "|]" qui est la barre verticale de premier trait fin (écrit grâce à la barre verticale des strings du tableau accords) et de deuxième trait épais indiqué par ']'.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
  for(int i=0;i<4;i++){
    for(int j=0;j<4;j++)
      std::cout<<utilise[j];
    if(i<3)
      std::cout<<std::endl;
    else
      std::cout<<']'<<std::endl;
  }
voici le programme complet:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <random>
#include <string>

int main(){
  std::random_device rd;
  std::mt19937 eng(rd());
  std::uniform_int_distribution<int> distr(0,5);
  std::string accord[6]={
    "z [CEG] z [CEG]|",
    "z [DFA] z [DFA]|",
    "z [EGB] z [EGB]|",
    "z [FAc] z [FAc]|",
    "z [GBd] z [GBd]|",
    "z [Ace] z [Ace]|"
  };
  std::string utilise[4];
  for(int i=0;i<4;i++)
    utilise[i]=accord[distr(eng)];
  std::cout<<"X: 1\nK: C\nM: 4/4\nL: 1/4"<<std::endl;
  for(int i=0;i<4;i++){//nombre de portées
    for(int j=0;j<4;j++)
      std::cout<<utilise[j];
    if(i<3)
      std::cout<<std::endl;
    else
      std::cout<<']'<<std::endl;
  }
}
cela pourrait donner ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
X: 1
K: C
M: 4/4
L: 1/4
z [FAc] z [FAc]|z [Ace] z [Ace]|z [GBd] z [GBd]|z [GBd] z [GBd]|
z [FAc] z [FAc]|z [Ace] z [Ace]|z [GBd] z [GBd]|z [GBd] z [GBd]|
z [FAc] z [FAc]|z [Ace] z [Ace]|z [GBd] z [GBd]|z [GBd] z [GBd]|
z [FAc] z [FAc]|z [Ace] z [Ace]|z [GBd] z [GBd]|z [GBd] z [GBd]|]
utilisation
il faudra installer abcmidi, timidity:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
$  sudo apt install abcmidi timidity
supposons que l’exécutable se nome genR, ce programme s'utilise ainsi:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
$  genR | tee nomfichier.abc
$  abc2midi nomfichier.abc
$  timidity nomfichier1.mid (le 1 est ajouté par abc2midi)
on peut aussi convertir en wav, puis en mp3:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
$  sudo apt install lame
$  timidity -Ow nomfichier1.mid (pour convertir en wav)
$  lame nomfichier1.wav (pour convertir en mp3)
pour voir la partition écrite:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
$  sudo apt install abc2ps ps2pdf
$  genR > nomfichier.abc
$  abcm2ps -O nomfichier.ps nomfichier.abc
evince saura afficher ce fichier:
pour le convertir en pdf:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
$  ps2pdf nomfichier.ps
$  evince nomfichier.pdf

Envoyer le billet « un générateur de lignes d'accords en notation abc » dans le blog Viadeo Envoyer le billet « un générateur de lignes d'accords en notation abc » dans le blog Twitter Envoyer le billet « un générateur de lignes d'accords en notation abc » dans le blog Google Envoyer le billet « un générateur de lignes d'accords en notation abc » dans le blog Facebook Envoyer le billet « un générateur de lignes d'accords en notation abc » dans le blog Digg Envoyer le billet « un générateur de lignes d'accords en notation abc » dans le blog Delicious Envoyer le billet « un générateur de lignes d'accords en notation abc » dans le blog MySpace Envoyer le billet « un générateur de lignes d'accords en notation abc » dans le blog Yahoo

Mis à jour 06/12/2022 à 05h43 par matser

Catégories
Sans catégorie

Commentaires