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 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
| #from lycee import *
import matplotlib.pyplot as plt
import wave
import math
import binascii
import numpy as np
#Création d'un fichier audio au format WAV (PCM 8 bits stéréo 44100 Hz)
#à partir de 4 fréquences (1 fondamentale et trois harmoniques)
NomFichier = 'manote.wav'
manote = wave.open(NomFichier,'w') # appellation du fichier manote
nbCanal = 2 # stéreo
nbOctet = 1 # taille d'un échantillon : 1 octet = 8 bits
fech = 44100 # fréquence d'échantillonnage
frequence1 = 440#Hertz
frequence2 = 2*frequence1
frequence3 = 3*frequence1
frequence4 = 4*frequence1
niveau1 = 0.5
niveau2 = 0.5
niveau3 = 0.5
niveau4 = 0.5
duree = 5
nbEchantillon = int(duree*fech)
print("Nombre d'échantillons :",nbEchantillon)
parametres = (nbCanal,nbOctet,fech,nbEchantillon,'NONE','not compressed')# tuple
manote.setparams(parametres) # création de l'en-tête (44 octets)
# niveau max dans l'onde positive : +1 -> 255
# niveau max dans l'onde négative : -1 -> 0
# codage sur 256 valeurs donc niveau sonore nul à 128
amplitude1 = 128*niveau1
amplitude2 = 128*niveau2
amplitude3 = 128*niveau3
amplitude4 = 128*niveau4
# affichage des fréquences fondamentale et harmoniques
plt.figure(1)
t = np.linspace (0, 5/frequence1, 1000)
x1 =niveau1*np.sin(2.0*np.pi*frequence1*t)
x2= niveau2*np.sin(2.0*np.pi*frequence2*t)
x3 =niveau3*np.sin(2.0*np.pi*frequence3*t)
x4 =niveau4*np.sin(2.0*np.pi*frequence4*t)
plt.plot(t, x1,'r', label = "fréquence fondamentale")
plt.plot(t, x2,'g', label = "harmonique 1")
plt.plot(t, x3,'k', label = "harmonique 2")
plt.plot(t, x4,'y', label = "harmonique 3")
plt.title("forme des signaux")
plt.show()
#affichage de la forme du signal sonore
plt.figure(2)
t = np. linspace (0, 5/frequence1, 1000)
x =(niveau1*np.sin(2.0*np.pi*frequence1*t)+niveau2*np.sin(2.0*np.pi*frequence2*t)+ niveau3*np.sin(2.0*np.pi*frequence3*t)+niveau4*np.sin(2.0*np.pi*frequence4*t))/4
plt.plot(t,x)
plt.title("forme du signal sonore")
plt.show()
#création du fichier son
print('Veuillez patienter, création du fichier son en cours...')
for i in range(0,nbEchantillon):
# canal gauche
# 128 seuil du zéro
valG = wave.struct.pack('B',128+int(0.1*(\
amplitude1*math.sin(2.0*math.pi*frequence1*i/fech)+\
amplitude2*math.sin(2.0*math.pi*frequence2*i/fech)+\
amplitude3*math.sin(2.0*math.pi*frequence3*i/fech)+\
amplitude4*math.sin(2.0*math.pi*frequence4*i/fech)\
)))
# canal droite
# 128 seuil du zéro
valD = wave.struct.pack('B',128+int(0.1*(amplitude1*math.sin(2.0*math.pi*frequence1*i/fech)+amplitude2*math.sin(2.0*math.pi*frequence2*i/fech)+amplitude3*math.sin(2.0*math.pi*frequence3*i/fech)+amplitude4*math.sin(2.0*math.pi*frequence4*i/fech))))
manote.writeframes(valG+valG) # écriture fichier
# jouer le fichier son
import pygame
pygame.init()
pygame.mixer.music.load("manote.wav")
pygame.mixer.music.play()
pygame.event.wait()
#winsound.PlaySound('manote.wav',winsound.SND_FILENAME)
manote.close() |
Partager