1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| def sine_tone(frequency, duration, volume=0.3, sample_rate=44100): # Calculer le nombre total d'échantillons
n_samples = int(sample_rate * duration)
# Initialiser PyAudio
p = pyaudio.PyAudio()
# Ouvrir un flux de sortie
stream = p.open(format=p.get_format_from_width(1), # 8 bits par échantillon
channels=1, # mono
rate=sample_rate, # fréquence d'échantillonnage
output=True) # flux de sortie
# Fonction pour générer l'onde sinusoïdale
def s(t):
(lineno(), "T", t, "frequency", frequency)
return volume * math.sin(2 * math.pi * frequency * t / sample_rate)
# Générer les échantillons de l'onde sinusoïdale
samples = (int(s(t) * 0x7f + 0x80) for t in range(n_samples))
# Écrire les échantillons dans le flux de sortie par blocs
for buf in zip(*[samples] * sample_rate): # écrire plusieurs échantillons à la fois
stream.write(bytes(bytearray(buf)))
"# Générer les sons avec les fréquences et les notes de 'self.gam_son'."
liste_gam = list(self.gam_son.keys()) # Les noms des gammes
ind_gam = 66 - len(liste_gam)
# id_lino = 0 # self.tab_lig (Lignes) et colis1[2] (Noms.Lignes).
# 328 tab_lig [1, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, ] long 68
for k2, v2 in self.gam_son.items():
(lineno(), "k2", k2, "v2", v2, "ind_gam", ind_gam)
# 1124 k2 0 v2 [['C2', 65.41], ['D2', 73.42], ['E2', 82.41], ['F2', 87.31], ['G2', 98.0], ['A2', 55.0],
# ['B2', 61.74]] ind_gam 0
self.frequencies.clear()
for v1 in v2:
self.frequencies.append(v1)
(lineno(), "v1", v1, "... \t", k2, "\t\t", self.frequencies[-1])
# 1130 v1 ['C2', 65.41] ... 0 ['C2', 65.41]
(lineno(), "frequencies", self.frequencies, "k2", k2)
for freq in self.frequencies:
# Colorier les rectangles coordonnés aux gammes via 'tab_rec' (ligne-315).
# For rec in tab_rec : self.tableau.itemconfig(rec, fill="red") : Change la couleur.
self.tableau.itemconfig(self.tab_rec[ind_gam-1], fill="")
self.tableau.itemconfig(self.tab_rec[ind_gam], fill="lightsteelblue")
self.tableau.update_idletasks() # Forcer la mise à jour de l'interface graphique
# For rec in tab_rec : coords = self.tableau.coords(rec) : Donne les coordonnées.
(lineno(), "freq1", freq)
# 1126 freq1 ['C6', 1046.5]
sine_tone(freq[1], 1)
self.tableau.itemconfig(self.tab_rec[ind_gam], fill="")
ind_gam += 1 |
Partager