6
6
L'architecture de cet assemblage ressemble à cette image (images/ClassBooLsIII.png)."""
7
7
# https://cabviva.com/musicmp3/gamcop!s.mp3
8
8
9
- # import gammes_audio as gamma
10
- # import binomes_audio as biner
11
-
12
9
from tkinter import *
13
10
from tkinter .constants import *
11
+ from tkinter .font import *
14
12
from PIL import ImageTk , Image
13
+ import gammes_audio as gamma
14
+ import binomes_audio as biner
15
15
16
16
"# Initialisation du visuel, sous forme d'un tableur."
17
17
root = Tk ()
18
18
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.
21
21
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)
23
23
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 )
24
32
table_g = Canvas (root , width = 1656 , height = 30 , bg = "seashell" ) # Colonne dédiée aux boutons gammes. (Horizontale)
25
33
table_g .grid (row = 1 , column = 2 )
34
+ frame_g = Frame (table_g )
35
+ frame_g .grid ()
26
36
tableau = Canvas (root , width = 1656 , height = 884 , bg = "ivory" ) # Affichage des gammes (noms, binaires) liées.
27
37
tableau .grid (row = 2 , column = 2 )
28
38
tableau .config (borderwidth = 3 , relief = RAISED )
92
102
}
93
103
gam_maj = '102034050607'
94
104
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.
95
107
pre_codage = open ('globdicTcoup.txt' , 'r' )
96
108
mod , cod1 = '' , 1
97
109
112
124
mod += '1'
113
125
else :
114
126
mod += '0'
127
+ # C'est une section des premiers degrés, des noms gammes et des numéros des gammes.
115
128
if cod2 == 1 :
116
129
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])
117
133
else :
118
134
zob = cod1 , cod2 , mod
119
135
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])
120
140
# print("dic_codage :", dic_codage[cod1, pre_cod[:12]])
121
141
mod = ''
122
142
"# Renversements diatoniques."
135
155
if mod_cod == pre_cod [:12 ]:
136
156
break
137
157
cod1 += 1
158
+ # ("dic_codage", dic_codage)
138
159
pre_codage .close ()
139
160
140
161
colonne_bin = [] # Première colonne contenant les modes binaires uniques. L'index de l'élément = La ligne.
141
162
colonne_gam = {} # Colonnes contenant les gammes de 1 à 66. Première ligne = Noms.
142
163
colonne_lis = {} # Le dictionnaire clé=N°gamme, valeur=Ensemble degrés à même niveau.
143
164
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
144
210
145
211
146
212
def gammes_arp ():
@@ -253,29 +319,47 @@ def gammes_arp():
253
319
254
320
255
321
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
+
256
334
# _________________________________________________________________________________________
257
335
"# Mise en forme des tables dans la grille"
336
+ font_coins = "Courrier 18 bold"
258
337
# table_x = Canvas(root, width=72, height=30, bg="white"), (row=1, column=1)
259
338
"72/2=36/2=18, 30/2=15, 54=18+36"
260
339
tx1 , tx2 = (18 , 2 ), (54 , 30 )
261
340
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.
262
342
image_pil = Image .open ("favicon_16.png" )
263
343
image_tk = ImageTk .PhotoImage (image_pil )
264
344
# Image = 16×16. Table_x = 72×30. Emplacement = 54×5
265
345
table_x .create_image (12 , 16 , image = image_tk ) # Table du favicon.
266
346
# table_g = Canvas(root, width=1656, height=30, bg="seashell"), (row=1, column=2)
267
347
tx1 , tx2 = (2 , 2 ), (1656 , 30 )
268
348
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.
269
353
# _________________________________________________________________________________________
270
354
"# Analyse des modes binaires et des gammes."
271
355
coq0 , coq1 = 0 , 0
272
356
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 :
275
359
tableau .create_text (deb_col0 , deb_lin0 , text = colonne_bin [coq1 ], font = police1 )
276
360
coq1 += 1
277
361
deb_lin0 += lin
278
- # print("colon_lin", colon_lin)
362
+ # print("colon_lin", colon_lin, " = colonne_bin[coq1]", colonne_bin[coq1] )
279
363
# _________________________________________________________________________________________
280
364
"# Repérer les gammes ayant deux ensembles de degrés séparés."
281
365
multi , sage , passe = {}, 0 , ''
@@ -293,9 +377,21 @@ def gammes_arp():
293
377
if len (multi [k_sage ]) < 2 :
294
378
multi [k_sage ] = {}
295
379
# _________________________________________________________________________________________
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
+ # _________________________________________________________________________________________
296
391
"# Écriture des noms et les degrés des soixante-six gammes."
297
392
# gammes_bin = Les gammes aux modes binaires existants.
298
- color1 = "black"
393
+ coq2 = 1
394
+ color1 , color2 = "black" , "lavender"
299
395
mul_bin = False # Si la gamme en cours a plusieurs ensembles de degrés.
300
396
col0 , lin0 = deb_col + 24 , deb_lin + 26
301
397
recaler = True
@@ -306,28 +402,36 @@ def gammes_arp():
306
402
if k_col [1 ] == 0 :
307
403
if val in gammes_bin .keys ():
308
404
color1 = "red"
405
+ color2 = "pink"
309
406
else :
310
407
color1 = "black"
408
+ color2 = "lavender"
311
409
lin1 = (k_col [1 ] * lin ) + lin0
312
- # print("___ col1", col1, "lin1", lin1)
410
+ # print("___ col1", col1, "lin1", lin1, "v_lin", v_lin )
313
411
# print("*** k_col", k_col[1], "val", type(val), len(val), val)
314
412
if len (val ) > 1 : # Le dictionnaire 'multi' informe sur les multilistes.
315
413
if val in multi .keys () and multi [val ]:
316
414
mul_bin = True # print("val", val, colonne_gam[k_col], "multi", multi[val])
317
415
else :
318
416
mul_bin = False
319
417
if len (v_lin ) == 1 : # Écriture des noms en quinconce pour une meilleure lisibilité.
418
+ coq2 += 1
320
419
if k_col [1 ] == 0 :
321
420
if recaler :
322
421
sig = - 12
422
+ row0 = 1
323
423
recaler = False
324
424
else :
425
+ row0 = 2
325
426
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 )
326
430
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 )
328
432
tableau .create_rectangle (col3 , lin3 , fill = "gold" , width = 0 )
329
433
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.
331
435
ce = len (v_lin )
332
436
col2 , lin2 = (col1 - ce , lin1 - ce ), (col1 + ce , lin1 + ce )
333
437
if mul_bin :
@@ -338,7 +442,7 @@ def gammes_arp():
338
442
if ici == '1' :
339
443
col3 , lin3 = (col1 - 12 , lin1 - 6 ), (col1 , lin1 + 6 )
340
444
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" )
342
446
cran += 12
343
447
# print("Ici", ici, "col2, lin2", col2, lin2, val, "v_lin", v_lin, colonne_gam[k_col[0], 0][0])
344
448
else :
@@ -352,11 +456,9 @@ def gammes_arp():
352
456
# print(" FOR colonne_gam cadrer", cadrer)
353
457
# break
354
458
355
- # gamma.audio_gam(colonne_gam)
356
- # biner.audio_bin(colonne_bin)
459
+ gamma .audio_gam (colonne_gam )
460
+ biner .audio_bin (colonne_bin )
357
461
358
462
print ("\n LONGUEURS : \n _ colonne_bin" , len (colonne_bin ), "\n _ colonne_gam" , len (colonne_gam .keys ()), "\n " , col , lin )
359
463
360
464
root .mainloop ()
361
- '''if __name__ == '__main__':
362
- gammes_arp()'''
0 commit comments