Bonjour.

J'ai un problème quand je veux diminuer à moins d'une seconde la durée d'une fréquence avec pyaudio.
Le code que je vous copie est partiel, il ne fonctionnera pas tel qu'il est.
Mais peut-être que vous êtes habitué à l'utilisation de pyaudio et que vous êtes en mesure de trouver ma solution.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Sincères salutations. ☺