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
Quel âge ont vos oreilles ?
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 *

# Cette fonction gère l'interface pygame
def maj():
    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 pur de fréqunce ajustable.",1,(250, 180, 0))
    fenetre.blit(monTexte,(10, 40))
    monTexte = font.render("Pour augmenter ƒ, utiliser la flêche vers le haut du clavier",1,(200,200,200))
    fenetre.blit(monTexte,(10, 65))
    monTexte = font.render("Pour diminuer ƒ, utiliser la flêche vers le bas du clavier",1,(200,200,200))
    fenetre.blit(monTexte,(10, 85))
    monTexte = font.render("Quelle est la plus haute fréquence que vous pouvez entendre ?",1,(255, 100, 100))
    fenetre.blit(monTexte,(10, 120))
    monTexte = font.render("Jusqu'à 2 000 Hz : vont oreilles ont 90 ans !",1,(155, 155, 155))
    fenetre.blit(monTexte,(30, 150))
    monTexte = font.render("Jusqu'à 4 000 Hz : vont oreilles ont 80 ans !",1,(165, 165, 165))
    fenetre.blit(monTexte,(30, 170))
    monTexte = font.render("Jusqu'à 8 000 Hz : vont oreilles ont 70 ans !",1,(175, 175, 175))
    fenetre.blit(monTexte,(30, 190))
    monTexte = font.render("Jusqu'à 10 000 Hz : vont oreilles ont 60 ans !",1,(185, 185, 185))
    fenetre.blit(monTexte,(30, 210))
    monTexte = font.render("Jusqu'à 12 000 Hz : vont oreilles ont 50 ans !",1,(195, 195, 195))
    fenetre.blit(monTexte,(30, 230))
    monTexte = font.render("Jusqu'à 15 000 Hz : vont oreilles ont 40 ans !",1,(205, 205, 205))
    fenetre.blit(monTexte,(30, 250))
    monTexte = font.render("Jusqu'à 16 000 Hz : vont oreilles ont 30 ans !",1,(215, 215, 215))
    fenetre.blit(monTexte,(30, 270))
    monTexte = font.render("Jusqu'à 17 000 Hz : vont oreilles ont 26 ans !",1,(225, 225, 225))
    fenetre.blit(monTexte,(30, 290))
    monTexte = font.render("Jusqu'à 18 000 Hz : vont oreilles ont 24 ans !",1,(235, 235, 235))
    fenetre.blit(monTexte,(30, 310))
    monTexte = font.render("Jusqu'à 20 000 Hz : vont oreilles ont 20 ans !",1,(245, 245, 245))
    fenetre.blit(monTexte,(30, 330))
    monTexte = font.render("Jusqu'à 22 000 Hz : vont oreilles ont 18 ans !",1,(255, 255, 255))
    fenetre.blit(monTexte,(30, 350))
    pygame.display.set_caption("Quel âge ont vos oreilles ?")
    pygame.display.flip()

# Cette fonction génère le son

def geneSon(k):
    global sound
    if k == 1: sound.stop()
    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)
    return sound

frequence = 440
size = (550, 400)
fenetre = pygame.display.set_mode(size, pygame.HWSURFACE | pygame.DOUBLEBUF)

nbBits = 16
pygame.mixer.pre_init(44100, nbBits, 2)
pygame.init()
sample_rate = 44100

ampli = 2**(nbBits - 1) - 1
maj()
geneSon(0)
_running = True

# La fin du code gère les évènements clavier et la sortie du programme
pygame.key.set_repeat(400, 1)
while _running:
    for event in pygame.event.get():
        if event.type == KEYDOWN:
            if event.key == K_UP:
                if frequence < 22000: frequence+=1
                geneSon(1)
                maj()
            if event.key == K_DOWN:
                if frequence > 20: frequence-=1
                geneSon(1)
                maj()
        if event.type == pygame.QUIT:
            _running = False
            break
pygame.quit()

Le résultat :