This is valid for all instruments ....
such an agreement "A" (major) return (A, C #, E)
ie: A, C-sharp, E
one agreements "A m", (note the space between the chord name and its type, return (A, C, E)
ie: A, C, E etc. ...
follow carefully the space between the chord name and the "type"

see the following example

Code: Select all
; dico Accords
;***********************************************
;Titre :*regle_a_Dadi
;Auteur : Dobro
;Date :27/08/2013
;Heure :19:34:43
;Version Purebasic : PureBasic 5.11 (Windows - x86)
;Version de l'editeur :EPB V2.40
;***********************************************
Structure accord
Fondamentale.s
Tierce.s
Quarte.s
Quinte.s
Septieme.s
neuvieme.s
Onzieme.s ;=Quarte.s
Treizieme.s ;=Sixte.s
EndStructure
; on commencera sur la E
global accord.accord
Declare.s accords(F.s)
global note.s="E,F,F#,G,G#,A,A#,B,C,C#,D,D#,E,F,F#,G,G#,A,A#,B,C,C#,D,D#,E,F,F#,G,G#,A,A#,B,C,C#,D,D#"
debug "accord La Majeur="+accords("A") ; la note doit etre séparé par un espace du Type !!!
debug "accord La mineur="+accords("A m") ; la note doit etre séparé par un espace du Type !!!
debug "accord Do mineur="+accords("C m")
debug "accord Ré sus4="+accords("D sus4") ; la note doit etre séparé par un espace du Type !!!
debug "accord Fa diminué="+accords("F dim")
debug "accord Fa augmenté="+accords("F aug")
debug "accord la mineure 6="+accords("A m 6")
debug "accord la 7 ="+accords("A 7")
debug "accord la mineure 7 em majeur ="+accords("A m 7M") ; la note doit etre séparé par un espace du Type !!!
debug "accord Re 9 em ="+accords("D 9")
debug "accord Re mineur 9 em ="+accords("D m 9")
debug "accord Sol 9 em diminué ="+accords("G 9 dim")
debug "accord Sol 9 em augmenté ="+accords("G 9 aug")
debug "accord Re 11 em ="+accords("D 11")
debug "accord A# 11 em augmenté ="+accords("A# 11 aug") ; la note doit etre séparé par un espace du Type !!! ici: A#(Espace) 11 aug .....
debug "accord C 13 em diminué ="+accords("C 13 dim")
debug "accord A 13 em ="+accords("A 13")
debug "accord Do augmenté ="+accords("C aug")
debug "accord Si ° ="+accords("B °")
Procedure.s accords(F.s)
; By Dobro
;init :
accord\Tierce.s=""
accord\Quarte.s=""
accord\Quinte.s=""
accord\Septieme.s=""
accord\neuvieme.s=""
accord\Onzieme.s=""
accord\Treizieme.s=""
for i=1 to len(note.s) ; on cherche la position de la note
t$=stringfield(F.s,1," ") ; Attention recupere le nom de l'accors si séparé par un espace !! ("A# 7"
t$=trim(t$) :t$=UCase(t$)
if StringField(note.s,i,",") =t$
pos=i ; ok , on l'a
Break
Endif
next i
accord\Fondamentale.s=t$
; ************* la tierce *****************************
if FindString(F.s,"m") And FindString(F.s,"dim")=0 ; regarde si l'accords est majeur ou mineur
accord\Tierce.s=stringfield(note.s,pos+3,",") ; mineur
Else
accord\Tierce.s=stringfield(note.s,pos+4,",") ; majeur
endif
if FindString(F.s,"sus4") ; regarde si l'accords est sus4
accord\Tierce.s=stringfield(note.s,pos+5,",") ; sus4
endif
accord\Quinte.s=stringfield(note.s,pos+7,",") ; la quinte ne change pas pour le moment
; *********************** la quinte *******************************
if FindString(F.s,"aug") ; regarde si l'accords est augmenté
accord\Quinte.s=stringfield(note.s,pos+8,",") ; augmenté
ElseIf FindString(F.s,"dim") ; regarde si l'accords est diminué
accord\Tierce.s=stringfield(note.s,pos+3,",") ; mineur
accord\Quinte.s=stringfield(note.s,pos+6,",") ; diminué
endif
; ************* la 7em ******************************************
if FindString(F.s,"7") ; regarde si l'accords est 7em (mineure)
accord\Septieme.s=stringfield(note.s,pos+10,",") ;la 7em est mineure
Endif
if FindString(F.s,"7M") ; regarde si l'accords est 7em majeur (7em augmenté)
accord\Septieme.s=stringfield(note.s,pos+11,",") ;la 7em est majeure
Endif
If FindString(F.s,"6") ; regarde si l'accords est 6em (7em diminué)
accord\Septieme.s=stringfield(note.s,pos+9,",") ;la 7em est diminué
Endif
If FindString(F.s,"°") ; demi diminué ( mineur,quinte diminué,7em diminué)
accord\Tierce.s=stringfield(note.s,pos+3,",") ; mineur
accord\Quinte.s=stringfield(note.s,pos+6,",") ; la quinte est diminuée
accord\Septieme.s=stringfield(note.s,pos+9,",") ;la 7em est diminué
endif
; ****************** la 9em **********************************
if FindString(F.s,"9") ; regarde si l'accords est 9em (mineure)
accord\Quinte.s=stringfield(note.s,pos+7,",") ;la quinte est juste
accord\Septieme.s=stringfield(note.s,pos+10,",") ;la 7em est mineure
accord\neuvieme.s=stringfield(note.s,pos+14,",") ;la 9em est juste
Endif
if FindString(F.s,"9 aug") ; regarde si l'accords est 9em augmenté
accord\Quinte.s=stringfield(note.s,pos+7,",") ;la quinte est juste
accord\Septieme.s=stringfield(note.s,pos+10,",") ;la 7em est mineure
accord\neuvieme.s=stringfield(note.s,pos+15,",") ;la 9em est Augmentée
Endif
if FindString(F.s,"9 dim") ; regarde si l'accords est 9em diminué
accord\Quinte.s=stringfield(note.s,pos+7,",") ;la quinte est juste
accord\Septieme.s=stringfield(note.s,pos+10,",") ;la 7em est mineure
accord\neuvieme.s=stringfield(note.s,pos+13,",") ;la 9em est diminuée
Endif
; **************** la 11em ****************************
if FindString(F.s,"11") ; regarde si l'accords est 11em
accord\Quinte.s=stringfield(note.s,pos+7,",") ;la quinte est juste
accord\Septieme.s=stringfield(note.s,pos+10,",") ;la 7em est mineure
accord\neuvieme.s=stringfield(note.s,pos+14,",") ;la 9em est juste
accord\Onzieme.s=stringfield(note.s,pos+17,",") ;la 11em est juste
Endif
If FindString(F.s,"11 aug") ; regarde si l'accords est 11em augmenté
accord\Quinte.s=stringfield(note.s,pos+7,",") ;la quinte est juste
accord\Septieme.s=stringfield(note.s,pos+10,",") ;la 7em est mineure
accord\neuvieme.s=stringfield(note.s,pos+14,",") ;la 9em est juste
accord\Onzieme.s=stringfield(note.s,pos+18,",") ;la 11em est augmentée
Endif
; ******************* la 13 em ************************
if FindString(F.s,"13") ; regarde si l'accords est 13em
accord\Quinte.s=stringfield(note.s,pos+7,",") ;la quinte est juste
accord\Septieme.s=stringfield(note.s,pos+10,",") ;la 7em est mineure
accord\neuvieme.s=stringfield(note.s,pos+14,",") ;la 9em est juste
accord\Onzieme.s=stringfield(note.s,pos+17,",") ;la 11em est juste
accord\Treizieme.s=stringfield(note.s,pos+21,",") ;la 13em est diminuée
Endif
If FindString(F.s,"13 dim") ; regarde si l'accords est 13em
accord\Quinte.s=stringfield(note.s,pos+7,",") ;la quinte est juste
accord\Septieme.s=stringfield(note.s,pos+10,",") ;la 7em est mineure
accord\neuvieme.s=stringfield(note.s,pos+14,",") ;la 9em est juste
accord\Onzieme.s=stringfield(note.s,pos+17,",") ;la 11em est juste
accord\Treizieme.s=stringfield(note.s,pos+20,",") ;la 13em est diminuée
Endif
acc.s=accord\Fondamentale.s+","+accord\Tierce.s+","+accord\Quinte.s+","+accord\Septieme.s+","+accord\neuvieme.s+","+accord\Onzieme.s+","+accord\Treizieme.s
ProcedureReturn acc.s
EndProcedure
;
; EPB