Skip to content

Commit 875fb02

Browse files
authored
Évolution naturelle du code
1 parent 51f6b1f commit 875fb02

File tree

5 files changed

+171
-18
lines changed

5 files changed

+171
-18
lines changed

READme.md

+29
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,32 @@
11
# Commentaires généraux
22
### Remarques importantes
33
Approfondir la compréhension des cumulations binaires des modes<br>
4+
5+
## Méthodes du traitement des modes binaires
6+
_Il existe une seule constance au démarrage, ce sont les modes naturels binaires._<br>
7+
_Les modes binaires sont issus du type classique des gammes primordiales, le type physique n'a pas encore été vu._<br>
8+
_'songammes' ; construit les gammes et les binaires selon le type classique = Dictionnaire alimenté par le fichier_<br>
9+
_'globdicTcoup.txt' ; une création des 462 formules numériques. Exemple : '102034050607'._<br>
10+
### La méthode par défaut
11+
Elle initialise les sept premières lignes de la colonne des modes binaires.<br>
12+
Ensuite, elle fait un sondage sur les formes binaires restantes et à venir, <br>
13+
pour définir quelle forme contient le plus de modes binaires présents grâce aux modes déjà traités.<br>
14+
* Tel qu'il a été écrit à son départ, le traitement des binaires est en mode 'append()'<br>
15+
C'est ainsi, que grâce aux gammes fondamentales, la colonne des binaires a été remplie.
16+
### La méthode des entiers (Nombres entiers)
17+
La liste originale des binaires a un ordre donné par **la méthode par défaut**.<br>
18+
En transformant l'ordre après avoir modifié le type de nombre en nombre entier, le tri en ordre croissant<br>
19+
remplace la séquence originale.
20+
### La méthode des binaires (Nombres binaires)
21+
La liste des modulations binaires existe, parce qu'elle a été réalisée dans les premières lignes du code.<br>
22+
En triant cette liste en ordre croissant numérique, on parvient à un alignement des gammes originales.<br>
23+
Ainsi, un ordre croissant des nombres entiers binaires, change l'ordre des gammes préétabli.<br>
24+
### La méthode des binaires (Nombres hexadécimaux)
25+
### La méthode des binaires (Nombres octaux)
26+
<br>
27+
<br>
28+
<br>
29+
<br>
30+
<br>
31+
<br>
32+

binomes_audio.py

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#!/usr/bin/env python
2+
# -*- coding: utf-8 -*-
3+
# vicenté quantic cabviva
4+
5+
class audio_bin:
6+
""""""
7+
def __init__(self, binary):
8+
self.data = binary # Clé = Tuple (Colonne. Ligne). Ligne = 0 = Nom de la gamme. Une colonne = Une gamme.
9+
10+
# print("binomes_audio.audio_bin.", self.data)
11+
pass

favicon_16.png

899 Bytes
Loading

gammes_audio.py

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#!/usr/bin/env python
2+
# -*- coding: utf-8 -*-
3+
# vicenté quantic cabviva
4+
5+
class audio_gam:
6+
""""""
7+
def __init__(self, gammes):
8+
self.data = gammes # Clé = Tuple (Colonne. Ligne). Ligne = 0 = Nom de la gamme. Une colonne = Une gamme.
9+
10+
# print("gammes_audio.audio_gam.", self.data)
11+
pass

songammes.py

+120-18
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,33 @@
66
L'architecture de cet assemblage ressemble à cette image (images/ClassBooLsIII.png)."""
77
# https://cabviva.com/musicmp3/gamcop!s.mp3
88

9-
# import gammes_audio as gamma
10-
# import binomes_audio as biner
11-
129
from tkinter import *
1310
from tkinter.constants import *
11+
from tkinter.font import *
1412
from PIL import ImageTk, Image
13+
import gammes_audio as gamma
14+
import binomes_audio as biner
1515

1616
"# Initialisation du visuel, sous forme d'un tableur."
1717
root = Tk()
1818
root.title("Base illusion")
19-
root.geometry("1800x1000+30+10")
20-
table_x = Canvas(root, width=72, height=30, bg="white") # Coin (haut, gauche) pour l'image favicon.
19+
root.geometry("1824x1000+30+10")
20+
table_x = Canvas(root, width=60, height=30) # Coin (haut, gauche) pour l'image favicon.
2121
table_x.grid(row=1, column=1)
22-
table_b = Canvas(root, width=72, height=884, bg="white") # Colonne dédiée aux boutons binaires. (Verticale)
22+
table_b = Canvas(root, width=60, height=884, bg="white") # Colonne dédiée aux boutons binaires. (Verticale)
2323
table_b.grid(row=2, column=1)
24+
frame_b = Frame(table_b)
25+
frame_b.grid()
26+
table_y = Canvas(root, width=84, height=30, bg="thistle") # Coin (haut, droite).
27+
table_y.grid(row=1, column=3)
28+
table_o = Canvas(root, width=84, height=884, bg="thistle") # Colonne dédiée aux binaires ordonnés. (Verticale)
29+
table_o.grid(row=2, column=3)
30+
table_z = Canvas(root, width=84, height=60, bg="thistle") # Coin (bas, droite).
31+
table_z.grid(row=3, column=3)
2432
table_g = Canvas(root, width=1656, height=30, bg="seashell") # Colonne dédiée aux boutons gammes. (Horizontale)
2533
table_g.grid(row=1, column=2)
34+
frame_g = Frame(table_g)
35+
frame_g.grid()
2636
tableau = Canvas(root, width=1656, height=884, bg="ivory") # Affichage des gammes (noms, binaires) liées.
2737
tableau.grid(row=2, column=2)
2838
tableau.config(borderwidth=3, relief=RAISED)
@@ -92,6 +102,8 @@
92102
}
93103
gam_maj = '102034050607'
94104
dic_codage = {} # Dictionnaire des gammes et de leurs modes.
105+
dic_binary = {} # Dictionnaire, clé = binaire, valeur = zob (['o45x', 1], '1000001'), (1, 2, '1000001')...
106+
dic_indice = {} # Dictionnaire, clé = Nom de la gamme, valeur = Numéro de la gamme.
95107
pre_codage = open('globdicTcoup.txt', 'r')
96108
mod, cod1 = '', 1
97109

@@ -112,11 +124,19 @@
112124
mod += '1'
113125
else:
114126
mod += '0'
127+
# C'est une section des premiers degrés, des noms gammes et des numéros des gammes.
115128
if cod2 == 1:
116129
zob = gam_classic[mod_cod], mod
130+
dic_indice[gam_classic[mod_cod][0]] = [] # Dictionnaire, clé = Nom_gamme, valeur = Rang_gamme.
131+
dic_indice[gam_classic[mod_cod][0]].append(cod1)
132+
# print(" gam_classic[mod_cod]", gam_classic[mod_cod])
117133
else:
118134
zob = cod1, cod2, mod
119135
dic_codage[cod1, pre_cod[:12]].append(zob)
136+
# print("dic_codage[cod1, pre_cod[:12]]", dic_codage[cod1, pre_cod[:12]])
137+
dic_binary[zob[-1]] = [] # 'dic_mode01' = Clé Binaire, = Rang numérique.
138+
dic_binary[zob[-1]].append(zob)
139+
# print("zob", zob[-1])
120140
# print("dic_codage :", dic_codage[cod1, pre_cod[:12]])
121141
mod = ''
122142
"# Renversements diatoniques."
@@ -135,12 +155,58 @@
135155
if mod_cod == pre_cod[:12]:
136156
break
137157
cod1 += 1
158+
# ("dic_codage", dic_codage)
138159
pre_codage.close()
139160

140161
colonne_bin = [] # Première colonne contenant les modes binaires uniques. L'index de l'élément = La ligne.
141162
colonne_gam = {} # Colonnes contenant les gammes de 1 à 66. Première ligne = Noms.
142163
colonne_lis = {} # Le dictionnaire clé=N°gamme, valeur=Ensemble degrés à même niveau.
143164
gammes_bin = {} # Dictionnaire des gammes aux modes binaires existants.
165+
images_liste = ["images/BoutonTriInt.png", "images/BoutonTriBin.png", "images/BoutonTriHex.png",
166+
"images/BoutonTriOct.png"]
167+
images_copie = images_liste.copy()
168+
169+
170+
def clic_image(event):
171+
"""Cette fonction convertit les modes binaires.
172+
En changeant le type, on change aussi son ordre croissant.
173+
'dic_indice' ; un dictionnaire = Les clés sont les noms et les valeurs sont les numéros des gammes.
174+
Il faut modifier le dictionnaire original, afin d'établir une nouvelle correspondance."""
175+
liste_iso = list(set(list(dic_binary.keys())))
176+
# print("dic_indice", "dic_indice", "dic_binary", "dic_binary", "\n liste_iso", liste_iso, len(liste_iso))
177+
x, y = event.x, event.y
178+
item_id = table_o.find_closest(x, y)[0] # Récupère l'ID de l'objet le plus proche
179+
if item_id == 1: # Conversion des modes binaires en nombres entiers.
180+
liste_int = [int(x) for x in liste_iso]
181+
liste_int.sort()
182+
print("Type de nombre entier", liste_int)
183+
elif item_id == 2: # Conversion des modes binaires en nombres entiers.
184+
liste_bin = [bin(x) for x in liste_iso]
185+
liste_bin.sort()
186+
print("Type de nombre binaire", liste_bin)
187+
elif item_id == 3: # Conversion des modes binaires en nombres hexadécimaux.
188+
liste_hex = [hex(int(x)) for x in liste_iso]
189+
liste_hex.sort()
190+
print("Type de nombre hexadécimal", liste_hex)
191+
else: # Conversion des modes binaires en nombres octaux.
192+
liste_oct = [oct(int(x)) for x in liste_iso]
193+
liste_oct.sort()
194+
print("Type de nombre octal", liste_oct)
195+
print("\n item_id", item_id, images_copie[item_id - 1], "x/y", x, y)
196+
197+
198+
# _________________________________________________________________________________________
199+
"# Placer les boutons-images sur le volet de droite 'table_o'"
200+
# table_o = Canvas(root, width=84, height=884, bg="thistle"), (row=2, column=3)
201+
esp, deb = 60, 48
202+
image_id = ["", "", ""]
203+
'# images_liste = ["images/BoutonTriBin.png", "images/BoutonTriHex.png", "images/BoutonTriOct.png"]'
204+
for il, image in enumerate(images_liste):
205+
images_liste[il] = Image.open(image)
206+
images_liste[il] = ImageTk.PhotoImage(images_liste[il])
207+
image_id = table_o.create_image(deb, esp, image=images_liste[il])
208+
table_o.tag_bind(image_id, "<Button-1>", clic_image)
209+
esp += 100
144210

145211

146212
def gammes_arp():
@@ -253,29 +319,47 @@ def gammes_arp():
253319

254320

255321
gammes_arp()
322+
323+
324+
def bouton_bin(bb):
325+
"""Pratiquer les redirections des boutons d'en-tête[noms des gammes] et latéral gauche[binaires].
326+
Cette fonction est située après avoir initialisé les dictionnaires nécessaires."""
327+
if len(bb) < 7:
328+
a = "# Jonction module gammes_audio"
329+
else:
330+
a = "# Jonction module binomes_audio"
331+
print("Bb", bb, len(bb), "\t A", a)
332+
333+
256334
# _________________________________________________________________________________________
257335
"# Mise en forme des tables dans la grille"
336+
font_coins = "Courrier 18 bold"
258337
# table_x = Canvas(root, width=72, height=30, bg="white"), (row=1, column=1)
259338
"72/2=36/2=18, 30/2=15, 54=18+36"
260339
tx1, tx2 = (18, 2), (54, 30)
261340
table_x.create_oval(tx1, tx2, fill="gold", width=0) # Table du favicon.
341+
table_x.create_text(36, 15, fill="white", text="X", font=font_coins) # Table du favicon. Lettre X.
262342
image_pil = Image.open("favicon_16.png")
263343
image_tk = ImageTk.PhotoImage(image_pil)
264344
# Image = 16×16. Table_x = 72×30. Emplacement = 54×5
265345
table_x.create_image(12, 16, image=image_tk) # Table du favicon.
266346
# table_g = Canvas(root, width=1656, height=30, bg="seashell"), (row=1, column=2)
267347
tx1, tx2 = (2, 2), (1656, 30)
268348
table_g.create_oval(tx1, tx2, fill="blanchedalmond", width=0) # Colonne dédiée aux boutons gammes.
349+
# table_y = Canvas(root, width=84, height=30, bg="thistle"), (row=1, column=3)
350+
table_y.create_text(44, 16, fill="white", text="Y", font=font_coins) # Table décorative. Lettre Y.
351+
# table_z = Canvas(root, width=84, height=60, bg="thistle"), (row=3, column=3)
352+
table_z.create_text(44, 31, fill="white", text="Z", font=font_coins) # Table décorative. Lettre Y.
269353
# _________________________________________________________________________________________
270354
"# Analyse des modes binaires et des gammes."
271355
coq0, coq1 = 0, 0
272356
deb_col0, deb_lin0 = deb_col + 6, deb_lin + 26
273-
# Visionner les modes binaires.
274-
for colon_lin in colonne_bin:
357+
# Visionner les modes binaires par l'écriture.
358+
for colin in colonne_bin:
275359
tableau.create_text(deb_col0, deb_lin0, text=colonne_bin[coq1], font=police1)
276360
coq1 += 1
277361
deb_lin0 += lin
278-
# print("colon_lin", colon_lin)
362+
# print("colon_lin", colon_lin, " = colonne_bin[coq1]", colonne_bin[coq1])
279363
# _________________________________________________________________________________________
280364
"# Repérer les gammes ayant deux ensembles de degrés séparés."
281365
multi, sage, passe = {}, 0, ''
@@ -293,9 +377,21 @@ def gammes_arp():
293377
if len(multi[k_sage]) < 2:
294378
multi[k_sage] = {}
295379
# _________________________________________________________________________________________
380+
"# Mise en place des boutons binaires sur le panneau gauche."
381+
coq0, tab_bin = 0, colonne_bin.copy()
382+
poli0, poli1 = Font(size=5, weight="bold"), Font(size=7, weight="bold")
383+
for colin in range(len(tab_bin)):
384+
if tab_bin[colin]:
385+
nom0 = tab_bin[colin]
386+
tab_bin[colin] = Button(frame_b, font=poli0, text=nom0,
387+
command=lambda bab=tab_bin[colin]: bouton_bin(bab))
388+
tab_bin[colin].grid(pady=1)
389+
coq0 += 1
390+
# _________________________________________________________________________________________
296391
"# Écriture des noms et les degrés des soixante-six gammes."
297392
# gammes_bin = Les gammes aux modes binaires existants.
298-
color1 = "black"
393+
coq2 = 1
394+
color1, color2 = "black", "lavender"
299395
mul_bin = False # Si la gamme en cours a plusieurs ensembles de degrés.
300396
col0, lin0 = deb_col + 24, deb_lin + 26
301397
recaler = True
@@ -306,28 +402,36 @@ def gammes_arp():
306402
if k_col[1] == 0:
307403
if val in gammes_bin.keys():
308404
color1 = "red"
405+
color2 = "pink"
309406
else:
310407
color1 = "black"
408+
color2 = "lavender"
311409
lin1 = (k_col[1] * lin) + lin0
312-
# print("___ col1", col1, "lin1", lin1)
410+
# print("___ col1", col1, "lin1", lin1, "v_lin", v_lin)
313411
# print("*** k_col", k_col[1], "val", type(val), len(val), val)
314412
if len(val) > 1: # Le dictionnaire 'multi' informe sur les multilistes.
315413
if val in multi.keys() and multi[val]:
316414
mul_bin = True # print("val", val, colonne_gam[k_col], "multi", multi[val])
317415
else:
318416
mul_bin = False
319417
if len(v_lin) == 1: # Écriture des noms en quinconce pour une meilleure lisibilité.
418+
coq2 += 1
320419
if k_col[1] == 0:
321420
if recaler:
322421
sig = -12
422+
row0 = 1
323423
recaler = False
324424
else:
425+
row0 = 2
325426
recaler = True
427+
gam_bouton = Button(frame_g, font=poli1, text=str(val), bg=color2,
428+
command=lambda bag=str(val): bouton_bin(bag))
429+
gam_bouton.grid(row=row0, column=coq2)
326430
if v_lin[0] == '1':
327-
col3, lin3 = (col1-6, lin1-6), (col1+6, lin1+6)
431+
col3, lin3 = (col1 - 6, lin1 - 6), (col1 + 6, lin1 + 6)
328432
tableau.create_rectangle(col3, lin3, fill="gold", width=0)
329433
tableau.create_text(col1, lin1 + sig, text=str(val), font=police2, fill=color1)
330-
else:
434+
else: # 'len(v_lin)'. Quand, plusieurs degrés correspondent à un même emplacement.
331435
ce = len(v_lin)
332436
col2, lin2 = (col1 - ce, lin1 - ce), (col1 + ce, lin1 + ce)
333437
if mul_bin:
@@ -338,7 +442,7 @@ def gammes_arp():
338442
if ici == '1':
339443
col3, lin3 = (col1 - 12, lin1 - 6), (col1, lin1 + 6)
340444
tableau.create_rectangle(col3, lin3, fill="gold", width=0)
341-
tableau.create_text(col1+cran, lin1, text=ici, font=police2, fill="maroon")
445+
tableau.create_text(col1 + cran, lin1, text=ici, font=police2, fill="maroon")
342446
cran += 12
343447
# print("Ici", ici, "col2, lin2", col2, lin2, val, "v_lin", v_lin, colonne_gam[k_col[0], 0][0])
344448
else:
@@ -352,11 +456,9 @@ def gammes_arp():
352456
# print(" FOR colonne_gam cadrer", cadrer)
353457
# break
354458

355-
# gamma.audio_gam(colonne_gam)
356-
# biner.audio_bin(colonne_bin)
459+
gamma.audio_gam(colonne_gam)
460+
biner.audio_bin(colonne_bin)
357461

358462
print("\n LONGUEURS : \n _ colonne_bin", len(colonne_bin), "\n _ colonne_gam", len(colonne_gam.keys()), "\n", col, lin)
359463

360464
root.mainloop()
361-
'''if __name__ == '__main__':
362-
gammes_arp()'''

0 commit comments

Comments
 (0)