Page 1 of 1

Procedure Accords (Chords)

Posted: Tue Apr 02, 2013 1:12 pm
by dobro
This procedure allows one agreement when asked to return all the agreements made ​​notes
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

Re: Procedure Accords (Chords)

Posted: Tue Apr 02, 2013 1:29 pm
by dobro
small correction made ​​on the agreement Decreased (Quinte bemol) ;)