Lycée Jean Vilar - Villeneuve lez Avignon
Page d'accueil Le site académique
Le site du lycée Espace Numérique de Travail
Le lycée
  Le lycée Jean Vilar
  Archives
  Art et culture
  Association Sportive
  Blogs
  CDI
  Développement durable
  Enseignements
  Espace enseignants
  Espace lycéens
  Espace parents
  Grand oral
  Journal du lycée
  Marchés publics
  Orientation
  Projet d'établissement
  Spécialités
  TICE
  Un lycée européen
  Voyages
  Webradio













Nouvelle page 1
Jean Vilar
Générer un son
Python  

Des exemples pour apprendre


Modules à importer :
          pylab  pour utiliser les fonctions mathématiques et créer des graphiques
          pygame  pour gérer les sons et le clavier

Avec ce programme :
- on définit des fonctions avec  def 
- on déclare une variable globale avec  global 
- on remplit un tableau de « 0 » avec  zeros() 
- on parcourt une liste avec  for...in range(...) 
- on gère les évènements avec  event 
- on conrôle l'exécution avec  _running 
- on crée un son avec  sndarray.make_sound 
- on joue un son avec  play() 

Le code

from pylab import *
import pygame
from pygame.locals import *

frequence = 440
nbBits = 16
ampli = 2**(nbBits - 1) - 1
sample_rate = 44100

pygame.mixer.pre_init(44100, nbBits, 2)
pygame.init()

# Cette fonction gère l'interface pygame
size = (350, 80)
fenetre = pygame.display.set_mode(size, pygame.HWSURFACE | pygame.DOUBLEBUF)
fenetre.fill((40,80,120))
font=pygame.font.Font(None, 36)
monTexte = font.render("Fréquence : " + str(frequence) + " Hz",1,(255,255,255))
fenetre.blit(monTexte,(10, 10))
font=pygame.font.Font(None, 24)
monTexte = font.render("Le son que vous entendez est un son pur.",1,(250, 180, 0))
fenetre.blit(monTexte,(10, 40))
pygame.display.set_caption("Générer un son")
pygame.display.flip()

# Cette fonction génère le son

duration = 1 / frequence
n_samples = int(round(duration*sample_rate))
# On crée un tableau 2D et on le remplit de zéros
buf = zeros((n_samples, 2), dtype = int16)
for s in range(n_samples):
    t = float(s)/sample_rate
    # On complète le tableau pour l'oreille gauche
    buf[s][0] = int(round(ampli*sin(2*math.pi*frequence*t)))
    # Oreille droite = oreille gauche
    buf[s][1] = buf[s][0]
# Le tableau devient un son
sound = pygame.sndarray.make_sound(buf)
sound.play(loops = -1)

_running = True

# La fin du code gère la sortie du programme
while _running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            _running = False
            break
pygame.quit()

Le résultat :