Utilisateur anonyme
-
20 déc. 2007 à 13:20
Marcus2508
Messages postés2Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention 8 août 2008
-
8 août 2008 à 00:21
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Marcus2508
Messages postés2Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention 8 août 2008 8 août 2008 à 00:21
Très intéressant comme composant, va falloir que je m'y colle à en coder un...
Au niveau code, c'est rudimentaire et efficace mais il y a pas mal d'hérésies dans le nom des accords!
Je ne sais pas où tu as trouvé ces définitions !
"A/B" se lit "A majeur avec un B à la basse" qui est grosso modo un B13 sans tierce ni quinte ou encore "B13(omit3)", une superstructure comme on dit dans le jargon.Or la tablature que tu donnes (0,0,2,4,2,0) n'est ni plus ni moins qu'un "A add 9/E" ( et non "A9" ou "AM9" car absence de 7e). Loin de moi l'envie de vous chercher des poux dans la tête, mais il fallait le signaler :)
Francky23012301
Messages postés400Date d'inscriptionsamedi 6 août 2005StatutMembreDernière intervention11 février 20161 22 déc. 2007 à 15:44
Tu as raison : apres mur reflexion ca ne sert à rien. C'est juste l'habitude et la peur de ne pas libérer les objets. je m'étais jamais posée la question lors de la création d'un composant. En meme temps faut mieux en faire trop que pas assez ^^ : en définif ca ne change rien sauf quelques lignes de codes en moins.
Bon je vais te faire plaisir t'inquete pas : ben dis donc ce petit compo, il déchaine les passions lol.
Quand tu donnes un composant au Constructeur en paramètre :
Panel := TPanel.Create(Form1)
C'est Form1 qui se charge de la destruction du Panel
Si tu fait :
Panel := TPanel.Create(Nil)
Où
Bitmap := TBitmap.Create // qui n'accepte pas de paramètre
C'est toi qui doit les liberer :
Panel.Free et Bitmap.Free
Et donc si tu n'as rien à mettre dans ton Destructeur à part :
Inherited Destroy;
c'est pas la peine de l'implémenter ;)
Pour l'implémentation du Parent dans le Constructeur je n'en ai jamais eu l'utilité !!!
Francky23012301
Messages postés400Date d'inscriptionsamedi 6 août 2005StatutMembreDernière intervention11 février 20161 22 déc. 2007 à 13:25
Je captes plus rien lol : au secours lol. Dans quel cas on doit implanter le Destroy et définir le parent dans le constructeur dans un composant. Car là je suis paumé ^^.
"Cirec : si dans le OnPaint tu vires le Inherited, il y a un soucis avec les propriétés BevelInner et BevelOuter. Fais le test tu véras mieux ^^."
Oui je sais mais personnellement je préfère comme ça ...
mais par dessus tout le composant est moins long à l'affichage puisque tu ne fais plus appel à la méthode héritée de Paint
"Pour les libérations : je suis d'accord avec toi. Mais par habitude et par précaution, je préfère écrire la libération de tous les objects."
ça ne sert ABSOLUMENT à rien ;-)
Si tu tiens absolument à le libérer toi même dans ce ça met Nil dans le OnCreate mais c'est c'est du temps et du code de perdu :)
Sinon pour le problème cité par Nicolas__
Moi je serais d'avis de supprimer ceci Dans le Constructeur:
Parent := TWinControl(AOwner);
Surprenant que F0xi ait laissé cette ligne !!!!!!
Le parent est mis automatiquement lors drop sur la fiche
et si il est créé dynamiquement dans ce cas c'est à l'utilisateur de le spécifier
à mon avis le problème viens de cette ligne ... en tous cas elle na rien à faire là.
Francky23012301
Messages postés400Date d'inscriptionsamedi 6 août 2005StatutMembreDernière intervention11 février 20161 22 déc. 2007 à 09:36
Je précise : j'ai refais les modifs que vous avez proposé : j'ai remplacé la tlistbox par la combobox et j'ai pris en comptes vos dernières remarques.
Francky23012301
Messages postés400Date d'inscriptionsamedi 6 août 2005StatutMembreDernière intervention11 février 20161 22 déc. 2007 à 09:35
Salut,
Oui je viens de voir ca : elle était pas présente avec l'ancienne version.
Je suis donc revenu à la version précédente mais t'inquète f0xi, je me penche sur tes modifs : je veux savoir ou ca beugue.
Cirec : si dans le OnPaint tu vires le Inherited, il y a un soucis avec les propriétés BevelInner et BevelOuter. Fais le test tu véras mieux ^^.
Pour les libérations : je suis d'accord avec toi. Mais par habitude et par précaution, je préfère écrire la libération de tous les objects.
Nicolas___
Messages postés992Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention24 avril 20131 22 déc. 2007 à 01:54
Par contre c'est bizarre
qd je place le composant sur une fenetre j'ai toujours
8 fois ceci :
---------------------------
Erreur
---------------------------
Violation d'accès à l'adresse 510056A2 dans le module 'dclusr70.bpl'. Lecture de l'adresse 00000000.
---------------------------
OK
---------------------------
Mais le compo se place correctement et fonctionne aussi tres bien , je sauvegarde et je reouvre , tt marche !
J'utilise D7 ...
Enfin vu l'heure j'ai peut etre mal installé le compo ( m'enfin ... )
Ciao
Nicolas___
Messages postés992Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention24 avril 20131 22 déc. 2007 à 01:47
Excellent Fracky , vraiment :)
Je viens seulement de découvrir ta source , et waw , t'as du t'amuser comme un fou avec tes records !
Et moi je vais pouvoir les réviser très facilement maintenant !
Bon maintenant tu peux t'amuser à le faire avec les differents accordages, EADGBE c'est le standard ... hé c'est pour rire te suicide pas !
Ciao , Joyeuses Fêtes
Francky23012301
Messages postés400Date d'inscriptionsamedi 6 août 2005StatutMembreDernière intervention11 février 20161 21 déc. 2007 à 18:42
J'ai vu vos commentaires : je ferai tout ca demain promis.
Arffff si je voulais pas vous réserver la surprise d'un pseudo cubase, je vous lacherai mon TPianoGrid pour vous faire plaisir tiens :p.
Dans le OnPaint vire le :
//Inherited;
ça ne sert pas à grand chose puisque tu le redessine complètement
juste après
En plus je trouve l'affichage plus claire ... plus propre
Tu peux éventuellement faire :
With Inherited Canvas Do
Mais c'est pas utile ... enfin fait les testes ;-)
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 21 déc. 2007 à 12:56
C'est maintenant quasiment parfait au niveau du fonctionnement.
Moi j'aime bien qu'un accord s'affiche au démarrage, il suffit d'ajouter
fAgreeLsBx.ItemIndex := 0;
DoAgreeLstBxChange(nil);
dans TAgreements.Add_Name_Agreements_In_LsBx
Ça serait bien aussi si, quand on clique dessus, les différentes possibilités pour un accord donné défilaient en boucle plutôt que de s'arrêter sur le dernier.
...
public
fAgreementSelected:Integer;
constructor Create(AOwner:TComponent); override;
//destructor Destroy; override; // complètement inutile
published
...
Implementation
constructor TAgreements.Create(AOwner:TComponent);
begin
inherited Create(AOwner);
...
...
Add_Name_Agreements_In_LsBx;
fAgreeLsBx.ItemIndex := 0; // évite d'avoir le ComboBox vide
fAgreementSelected := 0; // après sa création
end;
{destructor TAgreements.Destroy;
begin
fAgreeLsBx.Free; //Ceci n'est vraiment pas utile
inherited; // et du coup c'est tout le Destructeur qui devient inutile
end; } // C'est TAgreements qui se charge de libérer FAgreeLsBx.
Eh Francky Oublies les CheckBoxs
il faut les cocher que si tu supprimes (le Zip ou la capture) pas si tu les remplaces !
"Pour la notation francaise des accords : je suis pas sur qu'elle existe."
Do Ré Mi Fa Sol La Si c'est ça la notation française ;-)
Francky23012301
Messages postés400Date d'inscriptionsamedi 6 août 2005StatutMembreDernière intervention11 février 20161 21 déc. 2007 à 09:51
Bon je t'envois le screenshot f0xi car je sens que je vais passer la matinée à la modifier sur le site. Il y a un sérieux soucis : les checkbox dans la partie modification d'un source font des leurs.
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 21 déc. 2007 à 09:37
Même avis que japee, la Combobox est plus appropriée pour ça surtout pour la recherche automatique lors de la saisie et pour l'evenement OnChange.
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 21 déc. 2007 à 09:27
La TComboBox est plus agréable à mon avis.
En même temps, c'est pas un vrai problème : il suffit de remplacer TListBox par TComboBox à 2 endroits...
Francky23012301
Messages postés400Date d'inscriptionsamedi 6 août 2005StatutMembreDernière intervention11 février 20161 21 déc. 2007 à 09:00
Bon il serait peut etre temps de vous accorder les mecs lol : combobox ou tlistbox ? vous voulez lequel ?
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 21 déc. 2007 à 02:12
Ok, après avoir mieux regardé, il s'agit de plusieurs manières de faire le même accord.
Bon, puisque je vous dis qu'il y en a 2 ou 3 que je connais pas... ^^
@Cirec : Moi aussi j'aurais préféré une ComboBox, mais on peut quand même accéder assez rapidement à l'accord voulu en saisissant la lettre correspondant dans la ListBox. Si tu saisis G, tu tombes sur le 1er des accords de sol, cad le sol majeur.
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 21 déc. 2007 à 01:53
destructor TAgreements.Destroy;
begin
fAgreeLsBx.Free;
inherited;
end;
Procedure TAgreements.SetColorLsBx(Value: TColor);
begin
if fColorLsBx <> Value then
begin
fColorLsBx := Value;
fAgreeLsBx.Color := fColorLsBx;
end;
End;
Procedure TAgreements.Add_Name_Agreements_In_LsBx;
var
Index : integer;
begin
for Index := Low(ListAgreement) to High(ListAgreement) do
if fAgreeLsBx.Items.IndexOf(ListAgreement[Index].Name) = -1 then
fAgreeLsBx.Items.Add(ListAgreement[Index].Name);
end;
Procedure TAgreements.DoAgreeLstBxChange(Sender: TObject);
var
Index: integer;
begin
if fAgreeLsBx.Items.Count < 0 then
Exit;
for Index := Low(ListAgreement) to high(ListAgreement) Do
if ListAgreement[Index].Name = fAgreeLsBx.Items.Strings[fAgreeLsBx.ItemIndex] then
begin
fAgreementSelected := Index;
Invalidate;
Break;
end;
end;
Function TAgreements.SubtractorKey: Integer;
var
IndexRope, SubtractorKeyValue: Integer;
begin
SubtractorKeyValue := 0;
for IndexRope := 1 to 6 do
if SubtractorKeyValue < ListAgreement[fAgreementSelected].Param[IndexRope-1] then
SubtractorKeyValue := ListAgreement[fAgreementSelected].Param[IndexRope-1];
Result := SubtractorKeyValue-5;
end;
Procedure TAgreements.Paint;
Var
ColumnDim: Single;
Rect: TRect;
IndexLine, IndexRope,
Border,
LeftText, TopText, WidthText, HeightText,
Subtractor, KeysSubstracted: Integer;
Str: String;
Begin
Inherited;
if fAgreementSelected = -1 then
Exit;
Border := Height-Width;
with Canvas do
begin
Brush.Color := clBlack;
Brush.Style := bsSolid;
Pen.Color := clBlack;
Pen.Width := 3;
ColumnDim := Self.Width/7;
for IndexLine := 1 to 6 do
begin
MoveTo( Round(ColumnDim), Round(ColumnDim*IndexLine+Border) );
LineTo( Round(Self.Width-ColumnDim), Round(ColumnDim*IndexLine+Border) );
MoveTo( Round(ColumnDim*IndexLine), Round(ColumnDim+Border) );
LineTo( Round(ColumnDim*IndexLine), Round(Self.Height-ColumnDim) );
end;
for IndexRope := 1 to 6 do
If ListAgreement[fAgreementSelected].Param[IndexRope-1] > 0 Then
begin
Rect.Left := Round( ColumnDim*IndexRope )-5;
Rect.Right := Round( ColumnDim*IndexRope )+5;
if Subtractor > 0 then
KeysSubstracted := ListAgreement[fAgreementSelected].Param[IndexRope-1]-Subtractor
else
KeysSubstracted := ListAgreement[fAgreementSelected].Param[IndexRope-1];
"Après avoir cliqué dans la TListBox pour faire apparaître les accords, si on clique sur le panel, les accords sont modifiés plusieurs fois, le premier étant le seul correct." ??
Moi il me semble avoir reconnu d'autres manières d'arriver à la même note !
Je ne les connais pas toutes mais j'en ai reconnu quelques-une ... Le Ré en particulier mais certaines d'entre elles je les connaissaient comme notes augmentées. D'ailleurs en parlant de cela il en manque encore des notes ...
puisque tu les retrouves tout le long du manche.
L'ajout du nom des cordes (Mi, La, Ré, Sol, Si, Mi) et les numéros des doigts
dans les cercle de positions serait un plus pour les débutants.
Ainsi que, j'y reviens, le nom des notes ;-)
Ah aussi je me demandais si un ComboBox ne serait pas mieux qu'une ListBox ...
Cela permettrait d'utiliser le clavier pour accéder au différentes notes. Exemple : pour acceder au Ré tu appuies juste sur "D"
Pour le reste il y a la DropDownList pour un accès rapide avec la souris ou les flèches du clavier sans pour autant afficher chaque note au passage !!!
Ce qui par la même règlerait le "problème" du clique obligatoire pour afficher la tablature.
Parce que là c'est même contraignant, pour une note en plein milieu il faut faire défiler au risque de passer à côté dans un premier temps.
Ok pour le bœuf ! ;-)
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 21 déc. 2007 à 00:05
Salut Francky,
Ouais, y'a quelques accords que je connaissais pas... ;-)
J'ai noté un comportement trrrèèès bizarre :
Après avoir cliqué dans la TListBox pour faire apparaître les accords, si on clique sur le panel, les accords sont modifiés plusieurs fois, le premier étant le seul correct.
Sinon, c'est pratique, en saisissant directement l'accord concerné dans la ListBox, on accède rapidement aux derniers de la liste (heureusement pour le sol).
Bon, c'est pas tout ça, quand est-ce qu'on se le tape, ce boeuf ?
C'est bien ... et très intéressant (pour ceux qui gratouille )
Mais ... il y a un mais ;)
Remplace Les :
Self.Repaint;
Self.Refresh;
Par :
Invalidate;
Il y a encore d'autres petites choses mais le plus important est :
quand on clique sur les flèches rien ne change il faut cliquer sur le texte de la ListBox pour que le changement soit visible ...
Et la notation international c'est bien mais les deux serait mieux
A --> La
etc
Belle initiative ... j'y avais pensé il y a longtemps déjà mais je ne l'ai jamais fait.
Bravo
8 août 2008 à 00:21
Au niveau code, c'est rudimentaire et efficace mais il y a pas mal d'hérésies dans le nom des accords!
Je ne sais pas où tu as trouvé ces définitions !
"A/B" se lit "A majeur avec un B à la basse" qui est grosso modo un B13 sans tierce ni quinte ou encore "B13(omit3)", une superstructure comme on dit dans le jargon.Or la tablature que tu donnes (0,0,2,4,2,0) n'est ni plus ni moins qu'un "A add 9/E" ( et non "A9" ou "AM9" car absence de 7e). Loin de moi l'envie de vous chercher des poux dans la tête, mais il fallait le signaler :)
22 déc. 2007 à 15:44
Bon je vais te faire plaisir t'inquete pas : ben dis donc ce petit compo, il déchaine les passions lol.
22 déc. 2007 à 14:05
Quand tu donnes un composant au Constructeur en paramètre :
Panel := TPanel.Create(Form1)
C'est Form1 qui se charge de la destruction du Panel
Si tu fait :
Panel := TPanel.Create(Nil)
Où
Bitmap := TBitmap.Create // qui n'accepte pas de paramètre
C'est toi qui doit les liberer :
Panel.Free et Bitmap.Free
Et donc si tu n'as rien à mettre dans ton Destructeur à part :
Inherited Destroy;
c'est pas la peine de l'implémenter ;)
Pour l'implémentation du Parent dans le Constructeur je n'en ai jamais eu l'utilité !!!
22 déc. 2007 à 13:25
22 déc. 2007 à 12:26
Oui je sais mais personnellement je préfère comme ça ...
mais par dessus tout le composant est moins long à l'affichage puisque tu ne fais plus appel à la méthode héritée de Paint
"Pour les libérations : je suis d'accord avec toi. Mais par habitude et par précaution, je préfère écrire la libération de tous les objects."
ça ne sert ABSOLUMENT à rien ;-)
Si tu tiens absolument à le libérer toi même dans ce ça met Nil dans le OnCreate mais c'est c'est du temps et du code de perdu :)
Sinon pour le problème cité par Nicolas__
Moi je serais d'avis de supprimer ceci Dans le Constructeur:
Parent := TWinControl(AOwner);
Surprenant que F0xi ait laissé cette ligne !!!!!!
Le parent est mis automatiquement lors drop sur la fiche
et si il est créé dynamiquement dans ce cas c'est à l'utilisateur de le spécifier
à mon avis le problème viens de cette ligne ... en tous cas elle na rien à faire là.
22 déc. 2007 à 09:36
22 déc. 2007 à 09:35
Oui je viens de voir ca : elle était pas présente avec l'ancienne version.
Je suis donc revenu à la version précédente mais t'inquète f0xi, je me penche sur tes modifs : je veux savoir ou ca beugue.
Cirec : si dans le OnPaint tu vires le Inherited, il y a un soucis avec les propriétés BevelInner et BevelOuter. Fais le test tu véras mieux ^^.
Pour les libérations : je suis d'accord avec toi. Mais par habitude et par précaution, je préfère écrire la libération de tous les objects.
22 déc. 2007 à 01:54
qd je place le composant sur une fenetre j'ai toujours
8 fois ceci :
---------------------------
Erreur
---------------------------
Violation d'accès à l'adresse 510056A2 dans le module 'dclusr70.bpl'. Lecture de l'adresse 00000000.
---------------------------
OK
---------------------------
Mais le compo se place correctement et fonctionne aussi tres bien , je sauvegarde et je reouvre , tt marche !
J'utilise D7 ...
Enfin vu l'heure j'ai peut etre mal installé le compo ( m'enfin ... )
Ciao
22 déc. 2007 à 01:47
Je viens seulement de découvrir ta source , et waw , t'as du t'amuser comme un fou avec tes records !
Et moi je vais pouvoir les réviser très facilement maintenant !
Bon maintenant tu peux t'amuser à le faire avec les differents accordages, EADGBE c'est le standard ... hé c'est pour rire te suicide pas !
Ciao , Joyeuses Fêtes
21 déc. 2007 à 18:42
Arffff si je voulais pas vous réserver la surprise d'un pseudo cubase, je vous lacherai mon TPianoGrid pour vous faire plaisir tiens :p.
21 déc. 2007 à 13:14
afin ne pas pouvoir écrire dans le ComboBox mais quand même
pouvoir se servir de la recherche automatique lors de la saisie
Dans le Constructeur :
Add_Name_Agreements_In_LsBx;
fAgreeLsBx.Style := csDropDownList; // <------------ Ajoute ceci
fAgreeLsBx.ItemIndex := 0;
fAgreementSelected := 0;
21 déc. 2007 à 13:04
//Inherited;
ça ne sert pas à grand chose puisque tu le redessine complètement
juste après
En plus je trouve l'affichage plus claire ... plus propre
Tu peux éventuellement faire :
With Inherited Canvas Do
Mais c'est pas utile ... enfin fait les testes ;-)
21 déc. 2007 à 12:56
Moi j'aime bien qu'un accord s'affiche au démarrage, il suffit d'ajouter
fAgreeLsBx.ItemIndex := 0;
DoAgreeLstBxChange(nil);
dans TAgreements.Add_Name_Agreements_In_LsBx
Ça serait bien aussi si, quand on clique dessus, les différentes possibilités pour un accord donné défilaient en boucle plutôt que de s'arrêter sur le dernier.
Mais bon, les goûts et les couleurs...
21 déc. 2007 à 12:47
...
public
fAgreementSelected:Integer;
constructor Create(AOwner:TComponent); override;
//destructor Destroy; override; // complètement inutile
published
...
Implementation
constructor TAgreements.Create(AOwner:TComponent);
begin
inherited Create(AOwner);
...
...
Add_Name_Agreements_In_LsBx;
fAgreeLsBx.ItemIndex := 0; // évite d'avoir le ComboBox vide
fAgreementSelected := 0; // après sa création
end;
{destructor TAgreements.Destroy;
begin
fAgreeLsBx.Free; //Ceci n'est vraiment pas utile
inherited; // et du coup c'est tout le Destructeur qui devient inutile
end; } // C'est TAgreements qui se charge de libérer FAgreeLsBx.
21 déc. 2007 à 11:57
il faut les cocher que si tu supprimes (le Zip ou la capture) pas si tu les remplaces !
"Pour la notation francaise des accords : je suis pas sur qu'elle existe."
Do Ré Mi Fa Sol La Si c'est ça la notation française ;-)
21 déc. 2007 à 09:51
21 déc. 2007 à 09:37
21 déc. 2007 à 09:27
En même temps, c'est pas un vrai problème : il suffit de remplacer TListBox par TComboBox à 2 endroits...
21 déc. 2007 à 09:00
21 déc. 2007 à 02:12
Bon, puisque je vous dis qu'il y en a 2 ou 3 que je connais pas... ^^
@Cirec : Moi aussi j'aurais préféré une ComboBox, mais on peut quand même accéder assez rapidement à l'accord voulu en saisissant la lettre correspondant dans la ListBox. Si tu saisis G, tu tombes sur le 1er des accords de sol, cad le sol majeur.
21 déc. 2007 à 01:53
interface
uses
Windows, Messages, SysUtils, Classes, Controls, ExtCtrls, StdCtrls, Graphics, dialogs;
Type
TAgreement = record
Name : string;
Param : Array[0..5] of shortint;
end;
Const
ListAgreement: Array [0..902] Of TAgreement=(
(Name :'AMaj'; Param:(0,0,2,2,2,0)),
(Name :'AMaj'; Param:(0,4,-1,2,5,0)),
(Name :'AMaj'; Param:(5,7,7,6,5,5)),
(Name :'AMaj'; Param:(-1,0,2,2,2,0)),
(Name :'AMaj'; Param:(-1,4,7,-1,-1,5)),
(Name :'A#5'; Param:(-1,0,3,2,2,1)),
(Name :'A#5'; Param:(-1,0,-1,2,2,1)),
(Name :'A/Ab'; Param:(-1,0,2,1,2,0)),
(Name :'A/B'; Param:(0,0,2,4,2,0)),
(Name :'A/B'; Param:(-1,0,7,6,0,0)),
(Name :'A/D'; Param:(-1,0,0,2,2,0)),
(Name :'A/D'; Param:(-1,-1,0,2,2,0)),
(Name :'A/D'; Param:(-1,-1,0,6,5,5)),
(Name :'A/D'; Param:(-1,-1,0,9,10,9)),
(Name :'A/G'; Param:(3,-1,2,2,2,0)),
(Name :'A/G'; Param:(-1,0,2,0,2,0)),
(Name :'A/G'; Param:(-1,0,2,2,2,3)),
(Name :'A/Gb'; Param:(0,0,2,2,2,2)),
(Name :'A/Gb'; Param:(0,-1,4,2,2,0)),
(Name :'A/Gb'; Param:(2,-1,2,2,2,0)),
(Name :'A/Gb'; Param:(-1,0,4,2,2,0)),
(Name :'A/Gb'; Param:(-1,-1,2,2,2,2)),
(Name :'A5'; Param:(5,7,7,-1,-1,5)),
(Name :'A5'; Param:(-1,0,2,2,-1,0)),
(Name :'A5'; Param:(5,7,7,-1,-1,0)),
(Name :'A6'; Param:(0,0,2,2,2,2)),
(Name :'A6'; Param:(0,-1,4,2,2,0)),
(Name :'A6'; Param:(2,-1,2,2,2,0)),
(Name :'A6'; Param:(-1,0,4,2,2,0)),
(Name :'A6'; Param:(-1,-1,2,2,2,2)),
(Name :'A6/7'; Param:(0,0,2,0,2,2)),
(Name :'A6/7sus4'; Param:(5,5,4,0,3,0)),
(Name :'A6/7sus4'; Param:(-1,0,2,0,3,2)),
(Name :'A7'; Param:(3,-1,2,2,2,0)),
(Name :'A7'; Param:(-1,0,2,0,2,0)),
(Name :'A7'; Param:(-1,0,2,2,2,3)),
(Name :'A7(#5)'; Param:(1,0,3,0,2,1)),
(Name :'A7/add11'; Param:(-1,0,0,0,2,0)),
(Name :'A7sus4'; Param:(-1,0,2,0,3,0)),
(Name :'A7sus4'; Param:(-1,0,2,0,3,3)),
(Name :'A7sus4'; Param:(-1,0,2,2,3,3)),
(Name :'A7sus4'; Param:(5,-1,0,0,3,0)),
(Name :'A7sus4'; Param:(-1,0,0,0,-1,0)),
(Name :'Aadd9'; Param:(0,0,2,4,2,0)),
(Name :'Aadd9'; Param:(-1,0,7,6,0,0)),
(Name :'Aaug/D'; Param:(-1,-1,0,2,2,1)),
(Name :'Aaug/G'; Param:(1,0,3,0,2,1)),
(Name :'Ab'; Param:(4,6,6,5,4,4)),
(Name :'Ab#5'; Param:(-1,3,2,1,1,0)),
(Name :'Ab/A'; Param:(-1,-1,1,2,1,4)),
(Name :'Ab/F'; Param:(-1,8,10,8,9,8)),
(Name :'Ab/F'; Param:(-1,-1,1,1,1,1)),
(Name :'Ab/Gb'; Param:(-1,-1,1,1,1,2)),
(Name :'Ab/Gb'; Param:(-1,-1,4,5,4,4)),
(Name :'Ab5'; Param:(4,6,6,-1,-1,4)),
(Name :'Ab6'; Param:(-1,8,10,8,9,8)),
(Name :'Ab6'; Param:(-1,-1,1,1,1,1)),
(Name :'Ab7'; Param:(-1,-1,1,1,1,2)),
(Name :'Ab7'; Param:(-1,-1,4,5,4,4)),
(Name :'Abdim/E'; Param:(0,2,0,1,0,0)),
(Name :'Abdim/E'; Param:(0,2,2,1,3,0)),
(Name :'Abdim/E'; Param:(-1,2,0,1,3,0)),
(Name :'Abdim/E'; Param:(-1,-1,0,1,0,0)),
(Name :'Abdim/Eb'; Param:(-1,-1,0,4,4,4)),
(Name :'Abdim/F'; Param:(-1,2,0,1,0,1)),
(Name :'Abdim/F'; Param:(-1,-1,0,1,0,1)),
(Name :'Abdim/F'; Param:(-1,-1,3,4,3,4)),
(Name :'Abdim7'; Param:(-1,2,0,1,0,1)),
(Name :'Abdim7'; Param:(-1,-1,0,1,0,1)),
(Name :'Abdim7'; Param:(-1,-1,3,4,3,4)),
(Name :'Abm'; Param:(-1,-1,6,4,4,4)),
(Name :'Abm/D'; Param:(-1,-1,0,4,4,4)),
(Name :'Abm/E'; Param:(0,2,1,1,0,0)),
(Name :'Abm/E'; Param:(0,-1,6,4,4,0)),
(Name :'Abm/E'; Param:(-1,-1,1,1,0,0)),
(Name :'Abm/Gb'; Param:(-1,-1,4,4,4,4)),
(Name :'Abm7'; Param:(-1,-1,4,4,4,4)),
(Name :'Absus4'; Param:(-1,-1,6,6,4,4)),
(Name :'Absus2/F'; Param:(-1,1,3,1,4,1)),
(Name :'Adim/Ab'; Param:(-1,-1,1,2,1,4)),
(Name :'Adim/E'; Param:(0,3,-1,2,4,0)),
(Name :'Adim/F'; Param:(-1,-1,1,2,1,1)),
(Name :'Adim/F'; Param:(-1,-1,3,5,4,5)),
(Name :'Adim/G'; Param:(-1,-1,1,2,1,3)),
(Name :'Adim/Gb'; Param:(-1,-1,1,2,1,2)),
(Name :'Adim7'; Param:(-1,-1,1,2,1,2)),
(Name :'Am'; Param:(-1,0,2,2,1,0)),
(Name :'Am'; Param:(-1,0,7,5,5,5)),
(Name :'Am'; Param:(-1,3,2,2,1,0)),
(Name :'Am'; Param:(8,12,-1,-1,-1,0)),
(Name :'Am/B'; Param:(0,0,7,5,0,0)),
(Name :'Am/B'; Param:(-1,3,2,2,0,0)),
(Name :'Am/D'; Param:(-1,-1,0,2,1,0)),
(Name :'Am/D'; Param:(-1,-1,0,5,5,5)),
(Name :'Am/Eb'; Param:(0,3,-1,2,4,0)),
(Name :'Am/F'; Param:(0,0,3,2,1,0)),
(Name :'Am/F'; Param:(1,3,3,2,1,0)),
(Name :'Am/F'; Param:(1,-1,2,2,1,0)),
(Name :'Am/F'; Param:(-1,-1,2,2,1,1)),
(Name :'Am/F'; Param:(-1,-1,3,2,1,0)),
(Name :'Am/G'; Param:(0,0,2,0,1,3)),
(Name :'Am/G'; Param:(-1,0,2,0,1,0)),
(Name :'Am/G'; Param:(-1,0,2,2,1,3)),
(Name :'Am/G'; Param:(-1,0,5,5,5,8)),
(Name :'Am/Gb'; Param:(-1,0,2,2,1,2)),
(Name :'Am/Gb'; Param:(-1,-1,2,2,1,2)),
(Name :'Am6'; Param:(-1,0,2,2,1,2)),
(Name :'Am6'; Param:(-1,-1,2,2,1,2)),
(Name :'Am7'; Param:(0,0,2,0,1,3)),
(Name :'Am7'; Param:(-1,0,2,0,1,0)),
(Name :'Am7'; Param:(-1,0,2,2,1,3)),
(Name :'Am7'; Param:(-1,0,5,5,5,8)),
(Name :'Am7(b5)'; Param:(-1,-1,1,2,1,3)),
(Name :'Am7/add11'; Param:(-1,5,7,5,8,0)),
(Name :'Amaj7'; Param:(-1,0,2,1,2,0)),
(Name :'Amin/maj9'; Param:(-1,0,6,5,5,7)),
(Name :'Asus4'; Param:(0,0,2,2,3,0)),
(Name :'Asus4'; Param:(-1,0,2,2,3,0)),
(Name :'Asus4'; Param:(5,5,7,7,-1,0)),
(Name :'Asus4'; Param:(-1,0,0,2,3,0)),
(Name :'Asus2'; Param:(0,0,2,2,0,0)),
(Name :'Asus2'; Param:(0,0,2,4,0,0)),
(Name :'Asus2'; Param:(0,2,2,2,0,0)),
(Name :'Asus2'; Param:(-1,0,2,2,0,0)),
(Name :'Asus2'; Param:(-1,-1,2,2,0,0)),
(Name :'Asus2/Ab'; Param:(-1,0,2,1,0,0)),
(Name :'Asus2/C'; Param:(0,0,7,5,0,0)),
(Name :'Asus2/C'; Param:(-1,3,2,2,0,0)),
(Name :'Asus2/D'; Param:(0,2,0,2,0,0)),
(Name :'Asus2/D'; Param:(-1,2,0,2,3,0)),
(Name :'Asus2/Db'; Param:(0,0,2,4,2,0)),
(Name :'Asus2/Db'; Param:(-1,0,7,6,0,0)),
(Name :'Asus2/Eb'; Param:(-1,2,1,2,0,0)),
(Name :'Asus2/F'; Param:(0,0,3,2,0,0)),
(Name :'Asus2/G'; Param:(3,-1,2,2,0,0)),
(Name :'Asus2/G'; Param:(-1,0,2,0,0,0)),
(Name :'Asus2/G'; Param:(-1,0,5,4,5,0)),
(Name :'Asus2/Gb'; Param:(-1,0,4,4,0,0)),
(Name :'Asus2/Gb'; Param:(-1,2,4,2,5,2)),
(Name :'Asus4/Ab'; Param:(4,-1,0,2,3,0)),
(Name :'Asus4/B'; Param:(0,2,0,2,0,0)),
(Name :'Asus4/Bb'; Param:(0,1,-1,2,3,0)),
(Name :'Asus4/C'; Param:(-1,-1,0,2,1,0)),
(Name :'Asus4/C'; Param:(-1,-1,0,5,5,5)),
(Name :'Asus4/Db'; Param:(-1,0,0,2,2,0)),
(Name :'Asus4/Db'; Param:(-1,-1,0,2,2,0)),
(Name :'Asus4/Db'; Param:(-1,-1,0,6,5,5)),
(Name :'Asus4/Db'; Param:(-1,-1,0,9,10,9)),
(Name :'Asus4/F'; Param:(-1,-1,7,7,6,0)),
(Name :'Asus4/G'; Param:(-1,0,2,0,3,0)),
(Name :'Asus4/G'; Param:(-1,0,2,0,3,3)),
(Name :'Asus4/G'; Param:(-1,0,2,2,3,3)),
(Name :'Asus4/G'; Param:(-1,0,0,0,-1,0)),
(Name :'Asus4/Gb'; Param:(0,0,0,2,3,2)),
(Name :'Asus4/Gb'; Param:(0,0,4,2,3,0)),
(Name :'Asus4/Gb'; Param:(2,-1,0,2,3,0)),
(Name :'Asus4/Gb'; Param:(-1,0,2,2,3,2)),
(Name :'Asus4/Gb'; Param:(-1,-1,2,2,3,2)),
(Name :'Asus4/Gb'; Param:(-1,5,4,2,3,0)),
(Name :'Asus4/Gb'; Param:(-1,9,7,7,-1,0)),
(Name :'B'; Param:(-1,2,4,4,4,2)),
(Name :'B#5'; Param:(3,2,1,0,0,3)),
(Name :'B#5'; Param:(3,-1,1,0,0,3)),
(Name :'B/A'; Param:(2,-1,1,2,0,2)),
(Name :'B/A'; Param:(-1,0,1,2,0,2)),
(Name :'B/A'; Param:(-1,2,1,2,0,2)),
(Name :'B/A'; Param:(-1,2,4,2,4,2)),
(Name :'B/Ab'; Param:(-1,-1,4,4,4,4)),
(Name :'B/E'; Param:(-1,2,2,4,4,2)),
(Name :'B/E'; Param:(-1,-1,4,4,4,0)),
(Name :'B5'; Param:(7,9,9,-1,-1,2)),
(Name :'B5'; Param:(-1,2,4,4,-1,2)),
(Name :'B6'; Param:(-1,-1,4,4,4,4)),
(Name :'B7'; Param:(2,-1,1,2,0,2)),
(Name :'B7'; Param:(-1,0,1,2,0,2)),
(Name :'B7'; Param:(-1,2,1,2,0,2)),
(Name :'B7'; Param:(-1,2,4,2,4,2)),
(Name :'B7/add11'; Param:(0,0,4,4,4,0)),
(Name :'B7/add11'; Param:(0,2,1,2,0,2)),
(Name :'B7sus4'; Param:(-1,0,4,4,0,0)),
(Name :'B7sus4'; Param:(-1,2,4,2,5,2)),
(Name :'Baug/E'; Param:(3,-1,1,0,0,0)),
(Name :'Baug/E'; Param:(-1,-1,1,0,0,0)),
(Name :'Bb'; Param:(1,1,3,3,3,1)),
(Name :'Bb'; Param:(-1,1,3,3,3,1)),
(Name :'Bb'; Param:(-1,-1,0,3,3,1)),
(Name :'Bb#5'; Param:(-1,-1,0,3,3,2)),
(Name :'Bbb5'; Param:(-1,-1,0,3,-1,0)),
(Name :'Bb/A'; Param:(1,1,3,2,3,1)),
(Name :'Bb/Ab'; Param:(-1,1,3,1,3,1)),
(Name :'Bb/Ab'; Param:(-1,-1,3,3,3,4)),
(Name :'Bb/Db'; Param:(-1,-1,0,6,6,6)),
(Name :'Bb/E'; Param:(-1,1,3,3,3,0)),
(Name :'Bb/G'; Param:(3,5,3,3,3,3)),
(Name :'Bb/G'; Param:(-1,-1,3,3,3,3)),
(Name :'Bb5'; Param:(6,8,8,-1,-1,6)),
(Name :'Bb5'; Param:(-1,1,3,3,-1,6)),
(Name :'Bb6'; Param:(3,5,3,3,3,3)),
(Name :'Bb6'; Param:(-1,-1,3,3,3,3)),
(Name :'Bb6/add9'; Param:(-1,3,3,3,3,3)),
(Name :'Bb7'; Param:(-1,1,3,1,3,1)),
(Name :'Bb7'; Param:(-1,-1,3,3,3,4)),
(Name :'Bb7sus4'; Param:(-1,1,3,1,4,1)),
(Name :'Bbadd#11'; Param:(-1,1,3,3,3,0)),
(Name :'Bbaug/E'; Param:(2,-1,4,3,3,0)),
(Name :'Bbdim/C'; Param:(-1,3,-1,3,2,0)),
(Name :'Bbdim/D'; Param:(-1,-1,0,3,2,0)),
(Name :'Bbdim/G'; Param:(-1,1,2,0,2,0)),
(Name :'Bbdim/G'; Param:(-1,-1,2,3,2,3)),
(Name :'Bbdim/Gb'; Param:(2,4,2,3,2,2)),
(Name :'Bbdim/Gb'; Param:(-1,-1,4,3,2,0)),
(Name :'Bbdim7'; Param:(-1,1,2,0,2,0)),
(Name :'Bbdim7'; Param:(-1,-1,2,3,2,3)),
(Name :'Bbm'; Param:(1,1,3,3,2,1)),
(Name :'Bbm/Ab'; Param:(-1,1,3,1,2,1)),
(Name :'Bbm/D'; Param:(-1,-1,0,6,6,6)),
(Name :'Bbm/Gb'; Param:(-1,-1,3,3,2,2)),
(Name :'Bbm7'; Param:(-1,1,3,1,2,1)),
(Name :'Bbmaj7'; Param:(1,1,3,2,3,1)),
(Name :'Bbmaj9'; Param:(-1,3,3,3,3,5)),
(Name :'Bbsus2'; Param:(-1,-1,3,3,1,1)),
(Name :'Bbsus2/G'; Param:(-1,3,5,3,6,3)),
(Name :'Bbsus4/Ab'; Param:(-1,1,3,1,4,1)),
(Name :'Bdim/A'; Param:(1,2,3,2,3,1)),
(Name :'Bdim/A'; Param:(-1,2,0,2,0,1)),
(Name :'Bdim/A'; Param:(-1,-1,0,2,0,1)),
(Name :'Bdim/Ab'; Param:(-1,2,0,1,0,1)),
(Name :'Bdim/Ab'; Param:(-1,-1,0,1,0,1)),
(Name :'Bdim/Ab'; Param:(-1,-1,3,4,3,4)),
(Name :'Bdim/G'; Param:(1,-1,0,0,0,3)),
(Name :'Bdim/G'; Param:(3,2,0,0,0,1)),
(Name :'Bdim/G'; Param:(-1,-1,0,0,0,1)),
(Name :'Bdim7'; Param:(-1,2,0,1,0,1)),
(Name :'Bdim7'; Param:(-1,-1,0,1,0,1)),
(Name :'Bdim7'; Param:(-1,-1,3,4,3,4)),
(Name :'Bm'; Param:(2,2,4,4,3,2)),
(Name :'Bm'; Param:(-1,2,4,4,3,2)),
(Name :'Bm'; Param:(-1,-1,0,4,3,2)),
(Name :'Bm/A'; Param:(-1,0,4,4,3,2)),
(Name :'Bm/A'; Param:(-1,2,0,2,0,2)),
(Name :'Bm/A'; Param:(-1,2,0,2,3,2)),
(Name :'Bm/A'; Param:(-1,2,4,2,3,2)),
(Name :'Bm/A'; Param:(-1,-1,0,2,0,2)),
(Name :'Bm/G'; Param:(2,2,0,0,0,3)),
(Name :'Bm/G'; Param:(2,2,0,0,3,3)),
(Name :'Bm/G'; Param:(3,2,0,0,0,2)),
(Name :'Bm/G'; Param:(-1,-1,4,4,3,3)),
(Name :'Bm7'; Param:(-1,0,4,4,3,2)),
(Name :'Bm7'; Param:(-1,2,0,2,0,2)),
(Name :'Bm7'; Param:(-1,2,0,2,3,2)),
(Name :'Bm7'; Param:(-1,2,4,2,3,2)),
(Name :'Bm7'; Param:(-1,-1,0,2,0,2)),
(Name :'Bm7(b5)'; Param:(1,2,3,2,3,1)),
(Name :'Bm7(b5)'; Param:(-1,2,0,2,0,1)),
(Name :'Bm7(b5)'; Param:(-1,-1,0,2,0,1)),
(Name :'Bm7/add11'; Param:(0,0,2,4,3,2)),
(Name :'Bm7/add11'; Param:(0,2,0,2,0,2)),
(Name :'Bmaj7/#11'; Param:(-1,2,3,3,4,2)),
(Name :'Bsus'; Param:(7,9,9,-1,-1,0)),
(Name :'Bsus'; Param:(-1,2,4,4,-1,0)),
(Name :'Bsus2'; Param:(-1,4,4,4,-1,2)),
(Name :'Bsus2'; Param:(-1,-1,4,4,2,2)),
(Name :'Bsus2/E'; Param:(-1,4,4,4,-1,0)),
(Name :'Bsus4/A'; Param:(-1,0,4,4,0,0)),
(Name :'Bsus4/A'; Param:(-1,2,4,2,5,2)),
(Name :'Bsus4/Ab'; Param:(0,2,2,1,0,2)),
(Name :'Bsus4/Ab'; Param:(0,-1,4,1,0,0)),
(Name :'Bsus4/Ab'; Param:(2,2,2,1,0,0)),
(Name :'Bsus4/Db'; Param:(-1,4,4,4,-1,0)),
(Name :'Bsus4/Eb'; Param:(-1,2,2,4,4,2)),
(Name :'Bsus4/Eb'; Param:(-1,-1,4,4,4,0)),
(Name :'Bsus4/G'; Param:(0,2,2,0,0,2)),
(Name :'Bsus4/G'; Param:(0,2,4,0,0,0)),
(Name :'Bsus4/G'; Param:(0,-1,4,0,0,0)),
(Name :'Bsus4/G'; Param:(2,2,2,0,0,0)),
(Name :'C'; Param:(0,3,2,0,1,0)),
(Name :'C'; Param:(0,3,5,5,5,3)),
(Name :'C'; Param:(3,3,2,0,1,0)),
(Name :'C'; Param:(3,-1,2,0,1,0)),
(Name :'C'; Param:(-1,3,2,0,1,0)),
(Name :'C'; Param:(-1,3,5,5,5,0)),
(Name :'C#5'; Param:(-1,3,2,1,1,0)),
(Name :'Cb5'; Param:(-1,-1,4,5,-1,0)),
(Name :'C/A'; Param:(0,0,2,0,1,3)),
(Name :'C/A'; Param:(-1,0,2,0,1,0)),
(Name :'C/A'; Param:(-1,0,2,2,1,3)),
(Name :'C/A'; Param:(-1,0,5,5,5,8)),
(Name :'C/B'; Param:(0,3,2,0,0,0)),
(Name :'C/B'; Param:(-1,2,2,0,1,0)),
(Name :'C/B'; Param:(-1,3,5,4,5,3)),
(Name :'C/Bb'; Param:(-1,3,5,3,5,3)),
(Name :'C/D'; Param:(3,-1,0,0,1,0)),
(Name :'C/D'; Param:(-1,3,0,0,1,0)),
(Name :'C/D'; Param:(-1,3,2,0,3,0)),
(Name :'C/D'; Param:(-1,3,2,0,3,3)),
(Name :'C/D'; Param:(-1,-1,0,0,1,0)),
(Name :'C/D'; Param:(-1,-1,0,5,5,3)),
(Name :'C/D'; Param:(-1,10,12,12,13,0)),
(Name :'C/D'; Param:(-1,5,5,5,-1,0)),
(Name :'C/F'; Param:(-1,3,3,0,1,0)),
(Name :'C/F'; Param:(-1,-1,3,0,1,0)),
(Name :'C5'; Param:(-1,3,5,5,-1,3)),
(Name :'C6'; Param:(0,0,2,0,1,3)),
(Name :'C6'; Param:(-1,0,2,0,1,0)),
(Name :'C6'; Param:(-1,0,2,2,1,3)),
(Name :'C6'; Param:(-1,0,5,5,5,8)),
(Name :'C6/add9'; Param:(-1,5,7,5,8,0)),
(Name :'C7'; Param:(-1,3,5,3,5,3)),
(Name :'C7sus4'; Param:(-1,3,5,3,6,3)),
(Name :'C9(b5)'; Param:(0,3,-1,3,3,2)),
(Name :'Cadd9'; Param:(3,-1,0,0,1,0)),
(Name :'Cadd9'; Param:(-1,3,0,0,1,0)),
(Name :'Cadd9'; Param:(-1,3,2,0,3,0)),
(Name :'Cadd9'; Param:(-1,3,2,0,3,3)),
(Name :'Cadd9'; Param:(-1,-1,0,0,1,0)),
(Name :'Cadd9'; Param:(-1,-1,0,5,5,3)),
(Name :'Cadd9'; Param:(-1,10,12,12,13,0)),
(Name :'Cadd9'; Param:(-1,3,2,0,3,0)),
(Name :'Cadd9'; Param:(-1,5,5,5,-1,0)),
(Name :'Cdim/A'; Param:(-1,-1,1,2,1,2)),
(Name :'Cdim/Ab'; Param:(-1,-1,1,1,1,2)),
(Name :'Cdim/Ab'; Param:(-1,-1,4,5,4,4)),
(Name :'Cdim/D'; Param:(-1,5,4,5,4,2)),
(Name :'Cdim7'; Param:(-1,-1,1,2,1,2)),
(Name :'Cm'; Param:(-1,3,5,5,4,3)),
(Name :'Cm'; Param:(-1,-1,5,5,4,3)),
(Name :'Cm/A'; Param:(-1,-1,1,2,1,3)),
(Name :'Cm/Bb'; Param:(-1,3,5,3,4,3)),
(Name :'Cm6'; Param:(-1,-1,1,2,1,3)),
(Name :'Cm7'; Param:(-1,3,5,3,4,3)),
(Name :'Cmaj7'; Param:(0,3,2,0,0,0)),
(Name :'Cmaj7'; Param:(-1,2,2,0,1,0)),
(Name :'Cmaj7'; Param:(-1,3,5,4,5,3)),
(Name :'Cmaj9'; Param:(-1,3,0,0,0,0)),
(Name :'Csus'; Param:(-1,3,3,0,1,1)),
(Name :'Csus'; Param:(-1,-1,3,0,1,1)),
(Name :'Csus2'; Param:(-1,10,12,12,13,3)),
(Name :'Csus2'; Param:(-1,5,5,5,-1,3)),
(Name :'Csus2'; Param:(-1,3,0,0,3,3)),
(Name :'Csus2'; Param:(-1,3,5,5,3,3)),
(Name :'Csus2/A'; Param:(-1,5,7,5,8,3)),
(Name :'Csus2/A'; Param:(-1,-1,0,2,1,3)),
(Name :'Csus2/B'; Param:(3,3,0,0,0,3)),
(Name :'Csus2/B'; Param:(-1,3,0,0,0,3)),
(Name :'Csus2/E'; Param:(3,-1,0,0,1,0)),
(Name :'Csus2/E'; Param:(-1,3,0,0,1,0)),
(Name :'Csus2/E'; Param:(-1,3,2,0,3,0)),
(Name :'Csus2/E'; Param:(-1,3,2,0,3,3)),
(Name :'Csus2/E'; Param:(-1,-1,0,0,1,0)),
(Name :'Csus2/E'; Param:(-1,-1,0,5,5,3)),
(Name :'Csus2/E'; Param:(-1,10,12,12,13,0)),
(Name :'Csus2/E'; Param:(-1,5,5,5,-1,0)),
(Name :'Csus2/F'; Param:(3,3,0,0,1,1)),
(Name :'Csus4/A'; Param:(3,-1,3,2,1,1)),
(Name :'Csus4/A'; Param:(-1,-1,3,2,1,3)),
(Name :'Csus4/B'; Param:(-1,3,3,0,0,3)),
(Name :'Csus4/Bb'; Param:(-1,3,5,3,6,3)),
(Name :'Csus4/D'; Param:(3,3,0,0,1,1)),
(Name :'Csus4/E'; Param:(-1,3,3,0,1,0)),
(Name :'Csus4/E'; Param:(-1,-1,3,0,1,0)),
(Name :'D'; Param:(-1,5,4,2,3,2)),
(Name :'D'; Param:(-1,9,7,7,-1,2)),
(Name :'D'; Param:(2,0,0,2,3,2)),
(Name :'D'; Param:(-1,0,0,2,3,2)),
(Name :'D'; Param:(-1,0,4,2,3,2)),
(Name :'D'; Param:(-1,-1,0,2,3,2)),
(Name :'D'; Param:(-1,-1,0,7,7,5)),
(Name :'D#5'; Param:(-1,-1,0,3,3,2)),
(Name :'D/B'; Param:(-1,0,4,4,3,2)),
(Name :'D/B'; Param:(-1,2,0,2,0,2)),
(Name :'D/B'; Param:(-1,2,0,2,3,2)),
(Name :'D/B'; Param:(-1,2,4,2,3,2)),
(Name :'D/B'; Param:(-1,-1,0,2,0,2)),
(Name :'D/C'; Param:(-1,5,7,5,7,2)),
(Name :'D/C'; Param:(-1,0,0,2,1,2)),
(Name :'D/C'; Param:(-1,3,-1,2,3,2)),
(Name :'D/C'; Param:(-1,5,7,5,7,5)),
(Name :'D/Db'; Param:(-1,-1,0,14,14,14)),
(Name :'D/Db'; Param:(-1,-1,0,2,2,2)),
(Name :'D/E'; Param:(0,0,0,2,3,2)),
(Name :'D/E'; Param:(0,0,4,2,3,0)),
(Name :'D/E'; Param:(2,-1,0,2,3,0)),
(Name :'D/E'; Param:(-1,0,2,2,3,2)),
(Name :'D/E'; Param:(-1,-1,2,2,3,2)),
(Name :'D/E'; Param:(-1,5,4,2,3,0)),
(Name :'D/E'; Param:(-1,9,7,7,-1,0)),
(Name :'D/G'; Param:(5,-1,4,0,3,5)),
(Name :'D/G'; Param:(3,-1,0,2,3,2)),
(Name :'D5'; Param:(5,5,7,7,-1,5)),
(Name :'D5'; Param:(-1,0,0,2,3,5)),
(Name :'D6'; Param:(-1,0,4,4,3,2)),
(Name :'D6'; Param:(-1,2,0,2,0,2)),
(Name :'D6'; Param:(-1,2,0,2,3,2)),
(Name :'D6'; Param:(-1,2,4,2,3,2)),
(Name :'D6'; Param:(-1,-1,0,2,0,2)),
(Name :'D6/add9'; Param:(0,0,2,4,3,2)),
(Name :'D6/add9'; Param:(0,2,0,2,0,2)),
(Name :'D7'; Param:(-1,5,7,5,7,2)),
(Name :'D7'; Param:(-1,0,0,2,1,2)),
(Name :'D7'; Param:(-1,3,-1,2,3,2)),
(Name :'D7'; Param:(-1,5,7,5,7,5)),
(Name :'D7sus4'; Param:(-1,5,7,5,8,3)),
(Name :'D7sus4'; Param:(-1,-1,0,2,1,3)),
(Name :'D9'; Param:(0,0,0,2,1,2)),
(Name :'D9'; Param:(2,-1,0,2,1,0)),
(Name :'D9'; Param:(-1,5,7,5,7,0)),
(Name :'D9(#5)'; Param:(0,3,-1,3,3,2)),
(Name :'Dadd9'; Param:(0,0,0,2,3,2)),
(Name :'Dadd9'; Param:(0,0,4,2,3,0)),
(Name :'Dadd9'; Param:(2,-1,0,2,3,0)),
(Name :'Dadd9'; Param:(-1,0,2,2,3,2)),
(Name :'Dadd9'; Param:(-1,-1,2,2,3,2)),
(Name :'Dadd9'; Param:(-1,5,4,2,3,0)),
(Name :'Dadd9'; Param:(-1,9,7,7,-1,0)),
(Name :'Daug/E'; Param:(2,-1,4,3,3,0)),
(Name :'Db'; Param:(4,4,6,6,6,4)),
(Name :'Db'; Param:(-1,4,3,1,2,1)),
(Name :'Db'; Param:(-1,4,6,6,6,4)),
(Name :'Db'; Param:(-1,-1,3,1,2,1)),
(Name :'Db'; Param:(-1,-1,6,6,6,4)),
(Name :'Db#5'; Param:(-1,0,3,2,2,1)),
(Name :'Db#5'; Param:(-1,0,-1,2,2,1)),
(Name :'Dbb5'; Param:(-1,-1,3,0,2,1)),
(Name :'Db/B'; Param:(-1,4,3,4,0,4)),
(Name :'Db/Bb'; Param:(-1,1,3,1,2,1)),
(Name :'Db/C'; Param:(-1,3,3,1,2,1)),
(Name :'Db/C'; Param:(-1,4,6,5,6,4)),
(Name :'Db5'; Param:(-1,4,6,6,-1,4)),
(Name :'Db6'; Param:(-1,1,3,1,2,1)),
(Name :'Db7'; Param:(-1,4,3,4,0,4)),
(Name :'Dbaug/D'; Param:(-1,-1,0,2,2,1)),
(Name :'Dbaug/G'; Param:(1,0,3,0,2,1)),
(Name :'Dbdim/A'; Param:(3,-1,2,2,2,0)),
(Name :'Dbdim/A'; Param:(-1,0,2,0,2,0)),
(Name :'Dbdim/A'; Param:(-1,0,2,2,2,3)),
(Name :'Dbdim/B'; Param:(0,2,2,0,2,0)),
(Name :'Dbdim/Bb'; Param:(-1,1,2,0,2,0)),
(Name :'Dbdim/Bb'; Param:(-1,-1,2,3,2,3)),
(Name :'Dbdim/D'; Param:(3,-1,0,0,2,0)),
(Name :'Dbdim/D'; Param:(-1,-1,0,0,2,0)),
(Name :'Dbdim7'; Param:(-1,1,2,0,2,0)),
(Name :'Dbdim7'; Param:(-1,-1,2,3,2,3)),
(Name :'Dbm'; Param:(-1,4,6,6,5,4)),
(Name :'Dbm'; Param:(-1,-1,2,1,2,0)),
(Name :'Dbm'; Param:(-1,4,6,6,-1,0)),
(Name :'Dbm/A'; Param:(-1,0,2,1,2,0)),
(Name :'Dbm/B'; Param:(0,2,2,1,2,0)),
(Name :'Dbm/B'; Param:(-1,4,6,4,5,4)),
(Name :'Dbm7'; Param:(0,2,2,1,2,0)),
(Name :'Dbm7'; Param:(-1,4,6,4,5,4)),
(Name :'Dbm7(b5)'; Param:(0,2,2,0,2,0)),
(Name :'Dbmaj7'; Param:(-1,3,3,1,2,1)),
(Name :'Dbmaj7'; Param:(-1,4,6,5,6,4)),
(Name :'Dbsus2'; Param:(-1,-1,6,6,4,4)),
(Name :'Dbsus4/Bb'; Param:(-1,-1,4,3,2,4)),
(Name :'Ddim/B'; Param:(-1,2,0,1,0,1)),
(Name :'Ddim/B'; Param:(-1,-1,0,1,0,1)),
(Name :'Ddim/B'; Param:(-1,-1,3,4,3,4)),
(Name :'Ddim/Bb'; Param:(-1,1,3,1,3,1)),
(Name :'Ddim/Bb'; Param:(-1,-1,3,3,3,4)),
(Name :'Ddim/C'; Param:(-1,-1,0,1,1,1)),
(Name :'Ddim7'; Param:(-1,2,0,1,0,1)),
(Name :'Ddim7'; Param:(-1,-1,0,1,0,1)),
(Name :'Ddim7'; Param:(-1,-1,3,4,3,4)),
(Name :'Dm'; Param:(-1,0,0,2,3,1)),
(Name :'Dm/B'; Param:(1,2,3,2,3,1)),
(Name :'Dm/B'; Param:(-1,2,0,2,0,1)),
(Name :'Dm/B'; Param:(-1,-1,0,2,0,1)),
(Name :'Dm/Bb'; Param:(1,1,3,2,3,1)),
(Name :'Dm/C'; Param:(-1,5,7,5,6,5)),
(Name :'Dm/C'; Param:(-1,-1,0,2,1,1)),
(Name :'Dm/C'; Param:(-1,-1,0,5,6,5)),
(Name :'Dm/Db'; Param:(-1,-1,0,2,2,1)),
(Name :'Dm/E'; Param:(-1,-1,7,7,6,0)),
(Name :'Dm6'; Param:(1,2,3,2,3,1)),
(Name :'Dm6'; Param:(-1,2,0,2,0,1)),
(Name :'Dm6'; Param:(-1,-1,0,2,0,1)),
(Name :'Dm7'; Param:(-1,5,7,5,6,5)),
(Name :'Dm7'; Param:(-1,-1,0,2,1,1)),
(Name :'Dm7'; Param:(-1,-1,0,5,6,5)),
(Name :'Dm7(b5)'; Param:(-1,-1,0,1,1,1)),
(Name :'Dm7/add11'; Param:(3,-1,0,2,1,1)),
(Name :'Dmaj7'; Param:(-1,-1,0,14,14,14)),
(Name :'Dmaj7'; Param:(-1,-1,0,2,2,2)),
(Name :'Dmin/maj7'; Param:(-1,-1,0,2,2,1)),
(Name :'Dsus'; Param:(5,-1,0,0,3,5)),
(Name :'Dsus'; Param:(3,0,0,0,3,3)),
(Name :'Dsus'; Param:(-1,0,0,0,3,3)),
(Name :'Dsus'; Param:(-1,-1,0,2,3,3)),
(Name :'Dsus2'; Param:(5,5,7,7,-1,0)),
(Name :'Dsus2'; Param:(-1,0,0,2,3,0)),
(Name :'Dsus2'; Param:(0,0,2,2,3,0)),
(Name :'Dsus2'; Param:(-1,0,2,2,3,0)),
(Name :'Dsus2'; Param:(-1,-1,0,2,3,0)),
(Name :'Dsus2/Ab'; Param:(4,-1,0,2,3,0)),
(Name :'Dsus2/B'; Param:(0,2,0,2,0,0)),
(Name :'Dsus2/B'; Param:(-1,2,0,2,3,0)),
(Name :'Dsus2/Bb'; Param:(0,1,-1,2,3,0)),
(Name :'Dsus2/C'; Param:(-1,-1,0,2,1,0)),
(Name :'Dsus2/C'; Param:(-1,-1,0,5,5,5)),
(Name :'Dsus2/Db'; Param:(-1,0,0,2,2,0)),
(Name :'Dsus2/Db'; Param:(-1,-1,0,2,2,0)),
(Name :'Dsus2/Db'; Param:(-1,-1,0,6,5,5)),
(Name :'Dsus2/Db'; Param:(-1,-1,0,9,10,9)),
(Name :'Dsus2/F'; Param:(-1,-1,7,7,6,0)),
(Name :'Dsus2/G'; Param:(-1,0,2,0,3,0)),
(Name :'Dsus2/G'; Param:(-1,0,2,0,3,3)),
(Name :'Dsus2/G'; Param:(-1,0,2,2,3,3)),
(Name :'Dsus2/G'; Param:(5,-1,0,0,3,0)),
(Name :'Dsus2/G'; Param:(-1,0,0,0,-1,0)),
(Name :'Dsus2/Gb'; Param:(0,0,0,2,3,2)),
(Name :'Dsus2/Gb'; Param:(0,0,4,2,3,0)),
(Name :'Dsus2/Gb'; Param:(2,-1,0,2,3,0)),
(Name :'Dsus2/Gb'; Param:(-1,0,2,2,3,2)),
(Name :'Dsus2/Gb'; Param:(-1,-1,2,2,3,2)),
(Name :'Dsus2/Gb'; Param:(-1,5,4,2,3,0)),
(Name :'Dsus2/Gb'; Param:(-1,9,7,7,-1,0)),
(Name :'Dsus4/B'; Param:(3,0,0,0,0,3)),
(Name :'Dsus4/B'; Param:(3,2,0,2,0,3)),
(Name :'Dsus4/C'; Param:(-1,5,7,5,8,3)),
(Name :'Dsus4/C'; Param:(-1,-1,0,2,1,3)),
(Name :'Dsus4/E'; Param:(-1,0,2,0,3,0)),
(Name :'Dsus4/E'; Param:(-1,0,2,0,3,3)),
(Name :'Dsus4/E'; Param:(-1,0,2,2,3,3)),
(Name :'Dsus4/E'; Param:(5,-1,0,0,3,0)),
(Name :'Dsus4/E'; Param:(-1,0,0,0,-1,0)),
(Name :'Dsus4/Gb'; Param:(5,-1,4,0,3,5)),
(Name :'Dsus4/Gb'; Param:(3,-1,0,2,3,2)),
(Name :'E';Param:(0,2,2,1,0,0)),
(Name :'E';Param:(-1,7,6,4,5,0)),
(Name :'E#5';Param:(-1,3,2,1,1,0)),
(Name :'E/A';Param:(-1,0,2,1,0,0)),
(Name :'E/D';Param:(0,2,0,1,0,0)),
(Name :'E/D';Param:(0,2,2,1,3,0)),
(Name :'E/D';Param:(-1,2,0,1,3,0)),
(Name :'E/D';Param:(-1,-1,0,1,0,0)),
(Name :'E/Db';Param:(0,2,2,1,2,0)),
(Name :'E/Db';Param:(-1,4,6,4,5,4)),
(Name :'E/Eb';Param:(0,2,1,1,0,0)),
(Name :'E/Eb';Param:(0,-1,6,4,4,0)),
(Name :'E/Eb';Param:(-1,-1,1,1,0,0)),
(Name :'E/Gb';Param:(0,2,2,1,0,2)),
(Name :'E/Gb';Param:(0,-1,4,1,0,0)),
(Name :'E/Gb';Param:(2,2,2,1,0,0)),
(Name :'E11/b9';Param:(0,0,3,4,3,4)),
(Name :'E5';Param:(0,2,-1,-1,-1,0)),
(Name :'E5';Param:(-1,7,9,9,-1,0)),
(Name :'E6';Param:(0,2,2,1,2,0)),
(Name :'E6';Param:(-1,4,6,4,5,4)),
(Name :'E7';Param:(0,2,0,1,0,0)),
(Name :'E7';Param:(0,2,2,1,3,0)),
(Name :'E7';Param:(-1,2,0,1,3,0)),
(Name :'E7';Param:(-1,-1,0,1,0,0)),
(Name :'E7/add11';Param:(-1,0,0,1,0,0)),
(Name :'E7/b9(b5)';Param:(0,1,3,1,3,1)),
(Name :'E7sus4';Param:(0,2,0,2,0,0)),
(Name :'E9';Param:(0,2,0,1,0,2)),
(Name :'E9';Param:(2,2,0,1,0,0)),
(Name :'Eadd9';Param:(0,2,2,1,0,2)),
(Name :'Eadd9';Param:(0,-1,4,1,0,0)),
(Name :'Eadd9';Param:(2,2,2,1,0,0)),
(Name :'Eb';Param:(-1,1,1,3,4,3)),
(Name :'Eb';Param:(-1,-1,1,3,4,3)),
(Name :'Eb';Param:(-1,-1,5,3,4,3)),
(Name :'Eb#5';Param:(3,2,1,0,0,3)),
(Name :'Eb#5';Param:(3,-1,1,0,0,3)),
(Name :'Eb/C';Param:(-1,3,5,3,4,3)),
(Name :'Eb/D';Param:(-1,6,8,7,8,6)),
(Name :'Eb/Db';Param:(-1,1,1,3,2,3)),
(Name :'Eb/Db';Param:(-1,6,8,6,8,6)),
(Name :'Eb/Db';Param:(-1,-1,1,3,2,3)),
(Name :'Eb/E';Param:(-1,-1,5,3,4,0)),
(Name :'Eb5';Param:(-1,6,8,8,-1,6)),
(Name :'Eb6';Param:(-1,3,5,3,4,3)),
(Name :'Eb7';Param:(-1,1,1,3,2,3)),
(Name :'Eb7';Param:(-1,6,8,6,8,6)),
(Name :'Eb7';Param:(-1,-1,1,3,2,3)),
(Name :'Ebaug/E';Param:(3,-1,1,0,0,0)),
(Name :'Ebaug/E';Param:(-1,-1,1,0,0,0)),
(Name :'Ebdim/B';Param:(2,-1,1,2,0,2)),
(Name :'Ebdim/B';Param:(-1,0,1,2,0,2)),
(Name :'Ebdim/B';Param:(-1,2,1,2,0,2)),
(Name :'Ebdim/B';Param:(-1,2,4,2,4,2)),
(Name :'Ebdim/C';Param:(-1,-1,1,2,1,2)),
(Name :'Ebdim7';Param:(-1,-1,1,2,1,2)),
(Name :'Ebm';Param:(-1,-1,4,3,4,2)),
(Name :'Ebm/Db';Param:(-1,-1,1,3,2,2)),
(Name :'Ebm7';Param:(-1,-1,1,3,2,2)),
(Name :'Ebmaj7';Param:(-1,6,8,7,8,6)),
(Name :'Ebsus2/Ab';Param:(-1,1,3,1,4,1)),
(Name :'Ebsus4/F';Param:(-1,1,3,1,4,1)),
(Name :'Edim/C';Param:(-1,3,5,3,5,3)),
(Name :'Edim/D';Param:(3,-1,0,3,3,0)),
(Name :'Edim/Db';Param:(-1,1,2,0,2,0)),
(Name :'Edim/Db';Param:(-1,-1,2,3,2,3)),
(Name :'Edim/Eb';Param:(-1,-1,5,3,4,0)),
(Name :'Edim7';Param:(-1,1,2,0,2,0)),
(Name :'Edim7';Param:(-1,-1,2,3,2,3)),
(Name :'Em';Param:(0,2,2,0,0,0)),
(Name :'Em';Param:(3,-1,2,0,0,0)),
(Name :'Em';Param:(-1,2,5,-1,-1,0)),
(Name :'Em/A';Param:(3,-1,2,2,0,0)),
(Name :'Em/A';Param:(-1,0,2,0,0,0)),
(Name :'Em/A';Param:(-1,0,5,4,5,0)),
(Name :'Em/C';Param:(0,3,2,0,0,0)),
(Name :'Em/C';Param:(-1,2,2,0,1,0)),
(Name :'Em/C';Param:(-1,3,5,4,5,3)),
(Name :'Em/D';Param:(0,2,0,0,0,0)),
(Name :'Em/D';Param:(0,2,0,0,3,0)),
(Name :'Em/D';Param:(0,2,2,0,3,0)),
(Name :'Em/D';Param:(0,2,2,0,3,3)),
(Name :'Em/D';Param:(-1,-1,0,12,12,12)),
(Name :'Em/D';Param:(-1,-1,0,9,8,7)),
(Name :'Em/D';Param:(-1,-1,2,4,3,3)),
(Name :'Em/D';Param:(0,-1,0,0,0,0)),
(Name :'Em/D';Param:(-1,10,12,12,12,0)),
(Name :'Em/Db';Param:(0,2,2,0,2,0)),
(Name :'Em/Eb';Param:(3,-1,1,0,0,0)),
(Name :'Em/Eb';Param:(-1,-1,1,0,0,0)),
(Name :'Em/Gb';Param:(0,2,2,0,0,2)),
(Name :'Em/Gb';Param:(0,2,4,0,0,0)),
(Name :'Em/Gb';Param:(0,-1,4,0,0,0)),
(Name :'Em/Gb';Param:(2,2,2,0,0,0)),
(Name :'Em6';Param:(0,2,2,0,2,0)),
(Name :'Em7';Param:(0,2,0,0,0,0)),
(Name :'Em7';Param:(0,2,0,0,3,0)),
(Name :'Em7';Param:(0,2,2,0,3,0)),
(Name :'Em7';Param:(0,2,2,0,3,3)),
(Name :'Em7';Param:(-1,-1,0,0,0,0)),
(Name :'Em7';Param:(-1,-1,0,12,12,12)),
(Name :'Em7';Param:(-1,-1,0,9,8,7)),
(Name :'Em7';Param:(-1,-1,2,4,3,3)),
(Name :'Em7';Param:(0,-1,0,0,0,0)),
(Name :'Em7';Param:(-1,10,12,12,12,0)),
(Name :'Em7(b5)';Param:(3,-1,0,3,3,0)),
(Name :'Em7/add11';Param:(0,0,0,0,0,0)),
(Name :'Em7/add11';Param:(0,0,0,0,0,3)),
(Name :'Em7/add11';Param:(3,-1,0,2,0,0)),
(Name :'Em9';Param:(0,2,0,0,0,2)),
(Name :'Em9';Param:(0,2,0,0,3,2)),
(Name :'Em9';Param:(2,2,0,0,0,0)),
(Name :'Emaj7';Param:(0,2,1,1,0,0)),
(Name :'Emaj7';Param:(0,-1,6,4,4,0)),
(Name :'Emaj7';Param:(-1,-1,1,1,0,0)),
(Name :'Emaj9';Param:(0,2,1,1,0,2)),
(Name :'Emaj9';Param:(4,-1,4,4,4,0)),
(Name :'Emin/maj7';Param:(3,-1,1,0,0,0)),
(Name :'Emin/maj7';Param:(-1,-1,1,0,0,0)),
(Name :'Emin/maj9';Param:(0,6,4,0,0,0)),
(Name :'Esus';Param:(0,0,2,2,0,0)),
(Name :'Esus';Param:(0,0,2,4,0,0)),
(Name :'Esus';Param:(0,2,2,2,0,0)),
(Name :'Esus';Param:(-1,0,2,2,0,0)),
(Name :'Esus';Param:(-1,-1,2,2,0,0)),
(Name :'Esus2';Param:(7,9,9,-1,-1,0)),
(Name :'Esus2';Param:(-1,2,4,4,-1,0)),
(Name :'Esus2/A';Param:(-1,0,4,4,0,0)),
(Name :'Esus2/A';Param:(-1,2,4,2,5,2)),
(Name :'Esus2/Ab';Param:(0,2,2,1,0,2)),
(Name :'Esus2/Ab';Param:(0,-1,4,1,0,0)),
(Name :'Esus2/Ab';Param:(2,2,2,1,0,0)),
(Name :'Esus2/Db';Param:(-1,4,4,4,-1,0)),
(Name :'Esus2/Eb';Param:(-1,2,2,4,4,2)),
(Name :'Esus2/Eb';Param:(-1,-1,4,4,4,0)),
(Name :'Esus2/G';Param:(0,2,2,0,0,2)),
(Name :'Esus2/G';Param:(0,2,4,0,0,0)),
(Name :'Esus2/G';Param:(0,-1,4,0,0,0)),
(Name :'Esus2/G';Param:(2,2,2,0,0,0)),
(Name :'Esus4/Ab';Param:(-1,0,2,1,0,0)),
(Name :'Esus4/C';Param:(0,0,7,5,0,0)),
(Name :'Esus4/C';Param:(-1,3,2,2,0,0)),
(Name :'Esus4/D';Param:(0,2,0,2,0,0)),
(Name :'Esus4/D';Param:(-1,2,0,2,3,0)),
(Name :'Esus4/Db';Param:(0,0,2,4,2,0)),
(Name :'Esus4/Db';Param:(-1,0,7,6,0,0)),
(Name :'Esus4/Eb';Param:(-1,2,1,2,0,0)),
(Name :'Esus4/F';Param:(0,0,3,2,0,0)),
(Name :'Esus4/G';Param:(-1,0,2,0,0,0)),
(Name :'Esus4/G';Param:(-1,0,5,4,5,0)),
(Name :'Esus4/Gb';Param:(-1,0,4,4,0,0)),
(Name :'Esus4/Gb';Param:(-1,2,4,2,5,2)),
(Name :'F';Param:(1,3,3,2,1,1)),
(Name :'F';Param:(-1,0,3,2,1,1)),
(Name :'F';Param:(-1,3,3,2,1,1)),
(Name :'F';Param:(-1,-1,3,2,1,1)),
(Name :'F#5';Param:(-1,0,3,2,2,1)),
(Name :'F#5';Param:(-1,0,-1,2,2,1)),
(Name :'F/D';Param:(-1,5,7,5,6,5)),
(Name :'F/D';Param:(-1,-1,0,2,1,1)),
(Name :'F/D';Param:(-1,-1,0,5,6,5)),
(Name :'F/E';Param:(0,0,3,2,1,0)),
(Name :'F/E';Param:(1,3,3,2,1,0)),
(Name :'F/E';Param:(1,-1,2,2,1,0)),
(Name :'F/E';Param:(-1,-1,2,2,1,1)),
(Name :'F/E';Param:(-1,-1,3,2,1,0)),
(Name :'F/Eb';Param:(-1,-1,1,2,1,1)),
(Name :'F/Eb';Param:(-1,-1,3,5,4,5)),
(Name :'F/G';Param:(3,-1,3,2,1,1)),
(Name :'F/G';Param:(-1,-1,3,2,1,3)),
(Name :'F5';Param:(1,3,3,-1,-1,1)),
(Name :'F5';Param:(-1,8,10,-1,-1,1)),
(Name :'F6';Param:(-1,5,7,5,6,5)),
(Name :'F6';Param:(-1,-1,0,2,1,1)),
(Name :'F6';Param:(-1,-1,0,5,6,5)),
(Name :'F6/add9';Param:(3,-1,0,2,1,1)),
(Name :'F7';Param:(-1,-1,1,2,1,1)),
(Name :'F7';Param:(-1,-1,3,5,4,5)),
(Name :'Fadd9';Param:(3,-1,3,2,1,1)),
(Name :'Fadd9';Param:(-1,-1,3,2,1,3)),
(Name :'Faug/D';Param:(-1,-1,0,2,2,1)),
(Name :'Faug/G';Param:(1,0,3,0,2,1)),
(Name :'Fdim/D';Param:(-1,2,0,1,0,1)),
(Name :'Fdim/D';Param:(-1,-1,0,1,0,1)),
(Name :'Fdim/D';Param:(-1,-1,3,4,3,4)),
(Name :'Fdim/Db';Param:(-1,4,3,4,0,4)),
(Name :'Fdim7';Param:(-1,2,0,1,0,1)),
(Name :'Fdim7';Param:(-1,-1,0,1,0,1)),
(Name :'Fdim7';Param:(-1,-1,3,4,3,4)),
(Name :'Fm';Param:(-1,3,3,1,1,1)),
(Name :'Fm';Param:(-1,-1,3,1,1,1)),
(Name :'Fm/D';Param:(-1,-1,0,1,1,1)),
(Name :'Fm/Db';Param:(-1,3,3,1,2,1)),
(Name :'Fm/Db';Param:(-1,4,6,5,6,4)),
(Name :'Fm/Eb';Param:(-1,8,10,8,9,8)),
(Name :'Fm/Eb';Param:(-1,-1,1,1,1,1)),
(Name :'Fm6';Param:(-1,-1,0,1,1,1)),
(Name :'Fm7';Param:(-1,8,10,8,9,8)),
(Name :'Fm7';Param:(-1,-1,1,1,1,1)),
(Name :'Fmaj7';Param:(0,0,3,2,1,0)),
(Name :'Fmaj7';Param:(1,3,3,2,1,0)),
(Name :'Fmaj7';Param:(1,-1,2,2,1,0)),
(Name :'Fmaj7';Param:(-1,-1,2,2,1,1)),
(Name :'Fmaj7';Param:(-1,-1,3,2,1,0)),
(Name :'Fmaj7/#11';Param:(0,2,3,2,1,0)),
(Name :'Fmaj7/#11';Param:(1,3,3,2,0,0)),
(Name :'Fmaj9';Param:(0,0,3,0,1,3)),
(Name :'Fsus';Param:(-1,-1,3,3,1,1)),
(Name :'Fsus2';Param:(-1,3,3,0,1,1)),
(Name :'Fsus2';Param:(-1,-1,3,0,1,1)),
(Name :'Fsus2/A';Param:(3,-1,3,2,1,1)),
(Name :'Fsus2/A';Param:(-1,-1,3,2,1,3)),
(Name :'Fsus2/B';Param:(-1,3,3,0,0,3)),
(Name :'Fsus2/Bb';Param:(-1,3,5,3,6,3)),
(Name :'Fsus2/D';Param:(3,3,0,0,1,1)),
(Name :'Fsus2/E';Param:(-1,3,3,0,1,0)),
(Name :'Fsus2/E';Param:(-1,-1,3,0,1,0)),
(Name :'Fsus4/G';Param:(-1,3,5,3,6,3)),
(Name :'G';Param:(-1,10,12,12,12,10)),
(Name :'G';Param:(3,2,0,0,0,3)),
(Name :'G';Param:(3,2,0,0,3,3)),
(Name :'G';Param:(3,5,5,4,3,3)),
(Name :'G';Param:(3,-1,0,0,0,3)),
(Name :'G';Param:(-1,5,5,4,3,3)),
(Name :'G';Param:(-1,-1,0,4,3,3)),
(Name :'G';Param:(-1,-1,0,7,8,7)),
(Name :'G#5';Param:(3,2,1,0,0,3)),
(Name :'G#5';Param:(3,-1,1,0,0,3)),
(Name :'G/A';Param:(3,0,0,0,0,3)),
(Name :'G/A';Param:(3,2,0,2,0,3)),
(Name :'G/C';Param:(3,3,0,0,0,3)),
(Name :'G/C';Param:(-1,3,0,0,0,3)),
(Name :'G/E';Param:(0,2,0,0,0,0)),
(Name :'G/E';Param:(0,2,0,0,3,0)),
(Name :'G/E';Param:(0,2,2,0,3,0)),
(Name :'G/E';Param:(0,2,2,0,3,3)),
(Name :'G/E';Param:(-1,-1,0,12,12,12)),
(Name :'G/E';Param:(-1,-1,0,9,8,7)),
(Name :'G/E';Param:(-1,-1,2,4,3,3)),
(Name :'G/E';Param:(0,-1,0,0,0,0)),
(Name :'G/E';Param:(-1,10,12,12,12,0)),
(Name :'G/F';Param:(1,-1,0,0,0,3)),
(Name :'G/F';Param:(3,2,0,0,0,1)),
(Name :'G/F';Param:(-1,-1,0,0,0,1)),
(Name :'G/Gb';Param:(2,2,0,0,0,3)),
(Name :'G/Gb';Param:(2,2,0,0,3,3)),
(Name :'G/Gb';Param:(3,2,0,0,0,2)),
(Name :'G/Gb';Param:(-1,-1,4,4,3,3)),
(Name :'G5';Param:(3,5,5,-1,-1,3)),
(Name :'G5';Param:(3,-1,0,0,3,3)),
(Name :'G6';Param:(0,2,0,0,0,0)),
(Name :'G6';Param:(0,2,0,0,3,0)),
(Name :'G6';Param:(0,2,2,0,3,0)),
(Name :'G6';Param:(0,2,2,0,3,3)),
(Name :'G6';Param:(-1,-1,0,12,12,12)),
(Name :'G6';Param:(-1,-1,0,9,8,7)),
(Name :'G6';Param:(-1,-1,2,4,3,3)),
(Name :'G6';Param:(0,-1,0,0,0,0)),
(Name :'G6';Param:(-1,10,12,12,12,0)),
(Name :'G6/add9';Param:(0,0,0,0,0,0)),
(Name :'G6/add9';Param:(0,0,0,0,0,3)),
(Name :'G6/add9';Param:(3,-1,0,2,0,0)),
(Name :'G7';Param:(1,-1,0,0,0,3)),
(Name :'G7';Param:(3,2,0,0,0,1)),
(Name :'G7';Param:(-1,-1,0,0,0,1)),
(Name :'G7/add11';Param:(-1,3,0,0,0,1)),
(Name :'G7sus4';Param:(3,3,0,0,1,1)),
(Name :'G9';Param:(-1,0,0,0,0,1)),
(Name :'G9';Param:(-1,2,3,2,3,3)),
(Name :'Gadd9';Param:(3,0,0,0,0,3)),
(Name :'Gadd9';Param:(3,2,0,2,0,3)),
(Name :'Gaug/E';Param:(3,-1,1,0,0,0)),
(Name :'Gaug/E';Param:(-1,-1,1,0,0,0)),
(Name :'Gb';Param:(2,4,4,3,2,2)),
(Name :'Gb';Param:(-1,4,4,3,2,2)),
(Name :'Gb';Param:(-1,-1,4,3,2,2)),
(Name :'Gb#5';Param:(-1,-1,0,3,3,2)),
(Name :'Gb/Ab';Param:(-1,-1,4,3,2,4)),
(Name :'Gb/E';Param:(2,4,2,3,2,2)),
(Name :'Gb/E';Param:(-1,-1,4,3,2,0)),
(Name :'Gb/Eb';Param:(-1,-1,1,3,2,2)),
(Name :'Gb/F';Param:(-1,-1,3,3,2,2)),
(Name :'Gb6';Param:(-1,-1,1,3,2,2)),
(Name :'Gb7';Param:(2,4,2,3,2,2)),
(Name :'Gb7';Param:(-1,-1,4,3,2,0)),
(Name :'Gb7(#5)';Param:(2,-1,4,3,3,0)),
(Name :'Gb7/#9';Param:(-1,0,4,3,2,0)),
(Name :'Gb7sus4';Param:(-1,4,4,4,-1,0)),
(Name :'Gbadd9';Param:(-1,-1,4,3,2,4)),
(Name :'Gbaug/E';Param:(2,-1,4,3,3,0)),
(Name :'Gbdim/D';Param:(-1,5,7,5,7,2)),
(Name :'Gbdim/D';Param:(-1,0,0,2,1,2)),
(Name :'Gbdim/D';Param:(-1,3,-1,2,3,2)),
(Name :'Gbdim/D';Param:(-1,5,7,5,7,5)),
(Name :'Gbdim/E';Param:(-1,0,2,2,1,2)),
(Name :'Gbdim/E';Param:(-1,-1,2,2,1,2)),
(Name :'Gbdim/Eb';Param:(-1,-1,1,2,1,2)),
(Name :'Gbdim7';Param:(-1,-1,1,2,1,2)),
(Name :'Gbm';Param:(2,4,4,2,2,2)),
(Name :'Gbm';Param:(-1,4,4,2,2,2)),
(Name :'Gbm';Param:(-1,-1,4,2,2,2)),
(Name :'Gbm/D';Param:(-1,-1,0,14,14,14)),
(Name :'Gbm/D';Param:(-1,-1,0,2,2,2)),
(Name :'Gbm/E';Param:(0,0,2,2,2,2)),
(Name :'Gbm/E';Param:(0,-1,4,2,2,0)),
(Name :'Gbm/E';Param:(2,-1,2,2,2,0)),
(Name :'Gbm/E';Param:(-1,0,4,2,2,0)),
(Name :'Gbm/E';Param:(-1,-1,2,2,2,2)),
(Name :'Gbm7';Param:(0,0,2,2,2,2)),
(Name :'Gbm7';Param:(0,-1,4,2,2,0)),
(Name :'Gbm7';Param:(2,-1,2,2,2,0)),
(Name :'Gbm7';Param:(-1,0,4,2,2,0)),
(Name :'Gbm7';Param:(-1,-1,2,2,2,2)),
(Name :'Gbm7(b5)';Param:(-1,0,2,2,1,2)),
(Name :'Gbm7(b5)';Param:(-1,-1,2,2,1,2)),
(Name :'Gbm7/b9';Param:(0,0,2,0,2,2)),
(Name :'Gbmaj7';Param:(-1,-1,3,3,2,2)),
(Name :'Gbsus';Param:(-1,4,4,4,2,2)),
(Name :'Gbsus2/Bb';Param:(-1,-1,4,3,2,4)),
(Name :'Gbsus4/E';Param:(-1,4,4,4,-1,0)),
(Name :'Gdim/E';Param:(-1,1,2,0,2,0)),
(Name :'Gdim/E';Param:(-1,-1,2,3,2,3)),
(Name :'Gdim/Eb';Param:(-1,1,1,3,2,3)),
(Name :'Gdim/Eb';Param:(-1,6,8,6,8,6)),
(Name :'Gdim/Eb';Param:(-1,-1,1,3,2,3)),
(Name :'Gdim7';Param:(-1,1,2,0,2,0)),
(Name :'Gdim7';Param:(-1,-1,2,3,2,3)),
(Name :'Gm';Param:(3,5,5,3,3,3)),
(Name :'Gm';Param:(-1,-1,0,3,3,3)),
(Name :'Gm/E';Param:(3,-1,0,3,3,0)),
(Name :'Gm/Eb';Param:(-1,6,8,7,8,6)),
(Name :'Gm/F';Param:(3,5,3,3,3,3)),
(Name :'Gm/F';Param:(-1,-1,3,3,3,3)),
(Name :'Gm13';Param:(0,0,3,3,3,3)),
(Name :'Gm6';Param:(3,-1,0,3,3,0)),
(Name :'Gm7';Param:(3,5,3,3,3,3)),
(Name :'Gm7';Param:(-1,-1,3,3,3,3)),
(Name :'Gm7/add11';Param:(-1,3,3,3,3,3)),
(Name :'Gm9';Param:(3,5,3,3,3,5)),
(Name :'Gmaj7';Param:(2,2,0,0,0,3)),
(Name :'Gmaj7';Param:(2,2,0,0,3,3)),
(Name :'Gmaj7';Param:(3,2,0,0,0,2)),
(Name :'Gmaj7';Param:(-1,-1,4,4,3,3)),
(Name :'Gsus';Param:(-1,10,12,12,13,3)),
(Name :'Gsus';Param:(-1,3,0,0,3,3)),
(Name :'Gsus';Param:(-1,3,5,5,3,3)),
(Name :'Gsus';Param:(-1,5,5,5,3,3)),
(Name :'Gsus2';Param:(5,-1,0,0,3,5)),
(Name :'Gsus2';Param:(3,0,0,0,3,3)),
(Name :'Gsus2';Param:(-1,0,0,0,3,3)),
(Name :'Gsus2';Param:(-1,-1,0,2,3,3)),
(Name :'Gsus2/B';Param:(3,0,0,0,0,3)),
(Name :'Gsus2/B';Param:(3,2,0,2,0,3)),
(Name :'Gsus2/C';Param:(-1,5,7,5,8,3)),
(Name :'Gsus2/C';Param:(-1,-1,0,2,1,3)),
(Name :'Gsus2/E';Param:(-1,0,2,0,3,0)),
(Name :'Gsus2/E';Param:(-1,0,2,0,3,3)),
(Name :'Gsus2/E';Param:(-1,0,2,2,3,3)),
(Name :'Gsus2/E';Param:(5,0,0,0,3,0)),
(Name :'Gsus2/Gb';Param:(5,-1,4,0,3,5)),
(Name :'Gsus2/Gb';Param:(3,-1,0,2,3,2)),
(Name :'Gsus4/A';Param:(-1,5,7,5,8,3)),
(Name :'Gsus4/A';Param:(-1,-1,0,2,1,3)),
(Name :'Gsus4/B';Param:(3,3,0,0,0,3)),
(Name :'Gsus4/B';Param:(-1,3,0,0,0,3)),
(Name :'Gsus4/E';Param:(3,-1,0,0,1,0)),
(Name :'Gsus4/E';Param:(-1,3,0,0,1,0)),
(Name :'Gsus4/E';Param:(-1,3,2,0,3,0)),
(Name :'Gsus4/E';Param:(-1,3,2,0,3,3)),
(Name :'Gsus4/E';Param:(-1,-1,0,0,1,0)),
(Name :'Gsus4/E';Param:(-1,-1,0,5,5,3)),
(Name :'Gsus4/E';Param:(-1,10,12,12,13,0)),
(Name :'Gsus4/E';Param:(-1,5,5,5,-1,0)),
(Name :'Gsus4/F';Param:(3,3,0,0,1,1))
);
type
TAgreements = class(TCustomControl)
private
fColorLsBx: TColor;
fAgreeLsBx: TComboBox;
Procedure SetColorLsBx(Value:TColor);
Procedure Add_Name_Agreements_In_LsBx;
Function SubtractorKey : Integer;
protected
Procedure DoAgreeLstBxChange(Sender: TObject);
Procedure Resize; Override;
Procedure Paint ; Override;
public
fAgreementSelected:Integer;
constructor Create(AOwner:TComponent); override;
destructor Destroy; override;
published
property Width default 200;
property Height default 200;
property BevelInner default bvLowered;
property BevelOuter default bvLowered;
Property ColorLsBx: TColor Read fColorLsBx Write SetColorLsBx default clWhite;
property OnMouseDown;
property OnClick;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('MUSIC_PRO', [TAgreements]);
end;
constructor TAgreements.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Parent := TWinControl(AOwner);
ControlStyle := ControlStyle + [csFramed, csReplicatable];
DoubleBuffered := True;
Caption := '';
Width := 200;
Height := 200;
BevelInner := bvLowered;
BevelOuter := bvLowered;
fAgreementSelected := -1;
fColorLsBx := ClWhite;
fAgreeLsBx := TComboBox.Create(Self);
fAgreeLsBx.Parent := self;
fAgreeLsBx.Anchors := [akLeft, akRight, akTop];
fAgreeLsBx.Color := fColorLsBx;
fAgreeLsBx.OnChange := DoAgreeLstBxChange;
Resize;
Add_Name_Agreements_In_LsBx;
end;
destructor TAgreements.Destroy;
begin
fAgreeLsBx.Free;
inherited;
end;
Procedure TAgreements.SetColorLsBx(Value: TColor);
begin
if fColorLsBx <> Value then
begin
fColorLsBx := Value;
fAgreeLsBx.Color := fColorLsBx;
end;
End;
Procedure TAgreements.Add_Name_Agreements_In_LsBx;
var
Index : integer;
begin
for Index := Low(ListAgreement) to High(ListAgreement) do
if fAgreeLsBx.Items.IndexOf(ListAgreement[Index].Name) = -1 then
fAgreeLsBx.Items.Add(ListAgreement[Index].Name);
end;
Procedure TAgreements.Resize;
begin
inherited;
If (Width and $1) = $1 Then
Width := Width+1;
Height := Round(Self.Width*1.2);
fAgreeLsBx.SetBounds(4, 4, Width-8, 21);
fAgreeLsBx.Font.Size := round(Width *0.08);
end;
Procedure TAgreements.DoAgreeLstBxChange(Sender: TObject);
var
Index: integer;
begin
if fAgreeLsBx.Items.Count < 0 then
Exit;
for Index := Low(ListAgreement) to high(ListAgreement) Do
if ListAgreement[Index].Name = fAgreeLsBx.Items.Strings[fAgreeLsBx.ItemIndex] then
begin
fAgreementSelected := Index;
Invalidate;
Break;
end;
end;
Function TAgreements.SubtractorKey: Integer;
var
IndexRope, SubtractorKeyValue: Integer;
begin
SubtractorKeyValue := 0;
for IndexRope := 1 to 6 do
if SubtractorKeyValue < ListAgreement[fAgreementSelected].Param[IndexRope-1] then
SubtractorKeyValue := ListAgreement[fAgreementSelected].Param[IndexRope-1];
Result := SubtractorKeyValue-5;
end;
Procedure TAgreements.Paint;
Var
ColumnDim: Single;
Rect: TRect;
IndexLine, IndexRope,
Border,
LeftText, TopText, WidthText, HeightText,
Subtractor, KeysSubstracted: Integer;
Str: String;
Begin
Inherited;
if fAgreementSelected = -1 then
Exit;
Border := Height-Width;
with Canvas do
begin
Brush.Color := clBlack;
Brush.Style := bsSolid;
Pen.Color := clBlack;
Pen.Width := 3;
ColumnDim := Self.Width/7;
for IndexLine := 1 to 6 do
begin
MoveTo( Round(ColumnDim), Round(ColumnDim*IndexLine+Border) );
LineTo( Round(Self.Width-ColumnDim), Round(ColumnDim*IndexLine+Border) );
MoveTo( Round(ColumnDim*IndexLine), Round(ColumnDim+Border) );
LineTo( Round(ColumnDim*IndexLine), Round(Self.Height-ColumnDim) );
end;
Font.Color := clWhite;
Subtractor := SubtractorKey;
for IndexRope := 1 to 6 do
If ListAgreement[fAgreementSelected].Param[IndexRope-1] > 0 Then
begin
Rect.Left := Round( ColumnDim*IndexRope )-5;
Rect.Right := Round( ColumnDim*IndexRope )+5;
if Subtractor > 0 then
KeysSubstracted := ListAgreement[fAgreementSelected].Param[IndexRope-1]-Subtractor
else
KeysSubstracted := ListAgreement[fAgreementSelected].Param[IndexRope-1];
Rect.Top := Round((KeysSubstracted+0.5)*ColumnDim+Border)-5;
Rect.Bottom := Rect.Top+10;
Ellipse(Rect);
if Subtractor > 0 then
begin
Font.Size := Width Div 16;
WidthText := TextWidth( IntToStr(Subtractor) );
HeightText := TextHeight( IntToStr(Subtractor) );
LeftText := Round( (ColumnDim -WidthText)*0.5 );
TopText := Round( ((3*ColumnDim-HeightText)*0.5)+Border );
TextOut( LeftText, TopText, IntToStr(Subtractor+1) );
end;
end
else
begin
if ListAgreement[fAgreementSelected].Param[IndexRope-1] = 0 then
Str := '0'
else
Str := 'X';
Font.Size := Width Div 16;
WidthText := TextWidth(Str);
HeightText := TextHeight(Str);
LeftText := Round( ColumnDim*(IndexRope) )-WidthText Div 2;
TopText := Round( 0.5*ColumnDim-(HeightText*0.5)+Border );
TextOut( LeftText, TopText, Str );
end;
end;
end;
end.
21 déc. 2007 à 01:27
Moi il me semble avoir reconnu d'autres manières d'arriver à la même note !
Je ne les connais pas toutes mais j'en ai reconnu quelques-une ... Le Ré en particulier mais certaines d'entre elles je les connaissaient comme notes augmentées. D'ailleurs en parlant de cela il en manque encore des notes ...
puisque tu les retrouves tout le long du manche.
L'ajout du nom des cordes (Mi, La, Ré, Sol, Si, Mi) et les numéros des doigts
dans les cercle de positions serait un plus pour les débutants.
Ainsi que, j'y reviens, le nom des notes ;-)
Ah aussi je me demandais si un ComboBox ne serait pas mieux qu'une ListBox ...
Cela permettrait d'utiliser le clavier pour accéder au différentes notes. Exemple : pour acceder au Ré tu appuies juste sur "D"
Pour le reste il y a la DropDownList pour un accès rapide avec la souris ou les flèches du clavier sans pour autant afficher chaque note au passage !!!
Ce qui par la même règlerait le "problème" du clique obligatoire pour afficher la tablature.
Parce que là c'est même contraignant, pour une note en plein milieu il faut faire défiler au risque de passer à côté dans un premier temps.
Ok pour le bœuf ! ;-)
21 déc. 2007 à 00:05
Ouais, y'a quelques accords que je connaissais pas... ;-)
J'ai noté un comportement trrrèèès bizarre :
Après avoir cliqué dans la TListBox pour faire apparaître les accords, si on clique sur le panel, les accords sont modifiés plusieurs fois, le premier étant le seul correct.
Sinon, c'est pratique, en saisissant directement l'accord concerné dans la ListBox, on accède rapidement aux derniers de la liste (heureusement pour le sol).
Bon, c'est pas tout ça, quand est-ce qu'on se le tape, ce boeuf ?
20 déc. 2007 à 13:20
Mais ... il y a un mais ;)
Remplace Les :
Self.Repaint;
Self.Refresh;
Par :
Invalidate;
Il y a encore d'autres petites choses mais le plus important est :
quand on clique sur les flèches rien ne change il faut cliquer sur le texte de la ListBox pour que le changement soit visible ...
Et la notation international c'est bien mais les deux serait mieux
A --> La
etc
Belle initiative ... j'y avais pensé il y a longtemps déjà mais je ne l'ai jamais fait.
Bravo