top of page

PROJET N°8: Comparaison Processing et Python

raw.png

#!/usr/bin/env python
# coding: utf-8

# In[4]:


#importation de numpy
# alias np
import numpy as np
# importation de matplotlib.pyplot
# alias plt
import matplotlib.pyplot as plt
# fonction associée à la loi horaire
def z(t,g,h):
    return h - g * t**2 / 2
# paramètres physiques
g = 9.81
# accélération de la pesanteur
h = 1.0
# hauteur initiale en m
# tracé des trajectoires
t_min = 0.0
# instant initial en s
t_max = 1.0
# instant final en s
n_t = 100
# nombre de points de calculs
# tableau des instants
tab_t = np.linspace(t_min,t_max,n_t)
# tableau des z
tab_z = z(tab_t,g,h)
# tracé de tab_z en fonction de tab_t
# option'r-': tracé en rouge (r)
# en reliant les points (-)
plt.plot(tab_t,tab_z,'r-')
# affichage de la courbe
plt.show()


 

processing.PNG

int nombrederectangles = 10;
int x = 0;


void setup()
{
  size(400,410);
  // 4 tableaux de 10 cases chacun contiennent la position en x et en y du centre de chaque base et le sens de déplacement
  xdirection = new int[10];
  ydirection = new int[10];
  xpos = new float[10];
  ypos = new float[10];
  noStroke();
  noCursor();
  frameRate(30);
  ellipseMode(RADIUS);  
  for(int i=0; i<10;i++){
  xpos[i] = random(25,350);
  ypos[i] = random(25,350);
  xdirection[i] = 1;
  ydirection[i] = 1;
  noCursor();
  }
}

void draw()
{
 background(20);
 fill(255);
 text("Your score is  " + x, tx,ty);
  if(millis()<5000) {
  text("Press left mouse button to fire. Press right mouse button to reload.", 15, 40);
  }

 



 

l'indentation de 4 espaces est indispensable en python pour associer def à return

tableau de comparatif.PNG

# script audio.py
# (C) Fabrice Sincère ; Jean-Claude Meilland
import wave
import math
import binascii

print("Création d'un fichier audio au format WAV (PCM 8 bits stéréo 44100 Hz)")
print("Son de forme sinusoïdale sur chaque canal\n")
NomFichier = 'T:/cgenialson.wav'
#NomFichier = 'C:/home/cgenialson.wav'
#NomFichier = 'son.wav'
Monson = wave.open(NomFichier,'w') # instanciation de l'objet Monson

nbCanal = 2    # stéreo
nbOctet = 1    # taille d'un échantillon : 1 octet = 8 bits
fech = 44100   # fréquence d'échantillonnage

frequenceG = float(input('Fréquence du son du canal de gauche (Hz) ? '))
frequenceD = float(input('Fréquence du son du canal de droite (Hz) ? '))
niveauG = float(input('Niveau du son du canal de gauche (0 à 1) ? '))
niveauD = float(input('Niveau du son du canal de droite (0 à 1) ? '))
duree = float(input('Durée (en secondes) ? '))

nbEchantillon = int(duree*fech)
print("Nombre d'échantillons :",nbEchantillon)


 

parametres = (nbCanal,nbOctet,fech,nbEchantillon,'NONE','not compressed')# tupleMonson.setparams(parametres)    # création de l'en-tête (44 octets)# niveau max dans l'onde positive : +1 -> 255 (0xFF)# niveau max dans l'onde négative : -1 ->   0 (0x00)# niveau sonore nul :                0 -> 127.5 (0x80 en valeur arrondi)amplitudeG = 127.5*niveauGamplitudeD = 127.5*niveauDprint('Veuillez patienter...')for i in range(0,nbEchantillon):    # canal gauche    # 127.5 + 0.5 pour arrondir à l'entier le plus proche    valG = wave.struct.pack('B',int(128.0 + amplitudeG*math.sin(2.0*math.pi*frequenceG*i/fech)))    # canal droit    valD = wave.struct.pack('B',int(128.0 + amplitudeD*math.sin(2.0*math.pi*frequenceD*i/fech)))    Monson.writeframes(valG + valD) # écriture frameMonson.close()Fichier = open(NomFichier,'rb')data = Fichier.read()tailleFichier = len(data)print('\nTaille du fichier',NomFichier, ':', tailleFichier,'octets')print("Lecture du contenu de l'en-tête (44 octets) :")print(binascii.hexlify(data[0:44]))print("Nombre d'octets de données :",tailleFichier - 44)Fichier.close()

Qu'est-ce qu'un tuple ?

Pour déclarer un tuple on utilise des parenthèses chaque éléments étant séparés par des virgules.

Ce sont des listes d'éléments non-modifiables : nombre entier, décimal, listes, chaînes de caractères...

Exemple :

parametres = (nbCanal,nbOctet,fech,nbEchantillon,'NONE','not compressed')# tuple

GAMME TEMPÉRÉE:

​

DO-DO#-RE-RE#-MI-FA-FA#-SOL-SOL#-LA-LA#-SI-DO

​

440Hz La3 ou A4            On divise 2 puissance 1 douxième

        

image.jpg
Capture.PNG

  DO#    RE#               FA#     SOL#  LA#

  275     309              369      415     466

​

voici les étapes a suivre pour un son avec python

Etapes 1

télécharger edupython

Etapes 2: 1) pour créer un son copiez le texte ci dessous

# script audio.py
# (C) Fabrice Sincère ; Jean-Claude Meilland
import wave
import math
import binascii

print("Création d'un fichier audio au format WAV (PCM 8 bits stéréo 44100 Hz)")
print("Son de forme sinusoïdale sur chaque canal\n")
NomFichier = 'T:/cgenialson.wav'
#NomFichier = 'C:/home/cgenialson.wav'
#NomFichier = 'son.wav'
Monson = wave.open(NomFichier,'w') # instanciation de l'objet Monson

nbCanal = 2    # stéreo
nbOctet = 1    # taille d'un échantillon : 1 octet = 8 bits
fech = 44100   # fréquence d'échantillonnage

frequenceG = float(input('Fréquence du son du canal de gauche (Hz) ? '))
frequenceD = float(input('Fréquence du son du canal de droite (Hz) ? '))
niveauG = float(input('Niveau du son du canal de gauche (0 à 1) ? '))
niveauD = float(input('Niveau du son du canal de droite (0 à 1) ? '))
duree = float(input('Durée (en secondes) ? '))

nbEchantillon = int(duree*fech)
print("Nombre d'échantillons :",nbEchantillon)

parametres = (nbCanal,nbOctet,fech,nbEchantillon,'NONE','not compressed')# tuple
Monson.setparams(parametres)    # création de l'en-tête (44 octets)

# niveau max dans l'onde positive : +1 -> 255 (0xFF)
# niveau max dans l'onde négative : -1 ->   0 (0x00)
# niveau sonore nul :                0 -> 127.5 (0x80 en valeur arrondi)

amplitudeG = 127.5*niveauG
amplitudeD = 127.5*niveauD


print('Veuillez patienter...')
for i in range(0,nbEchantillon):

    # canal gauche
    # 127.5 + 0.5 pour arrondir à l'entier le plus proche
    valG = wave.struct.pack('B',int(128.0 + amplitudeG*math.sin(2.0*math.pi*frequenceG*i/fech)))
    # canal droit
    valD = wave.struct.pack('B',int(128.0 + amplitudeD*math.sin(2.0*math.pi*frequenceD*i/fech)))
    Monson.writeframes(valG + valD) # écriture frame
for i in range(0,nbEchantillon):
    # canal gauche
    # 127.5 + 0.5 pour arrondir à l'entier le plus proche
    valG = wave.struct.pack('B',int(128.0 + amplitudeG*math.sin(2.0*math.pi*1.5*frequenceG*i/fech)))
    # canal droit
    valD = wave.struct.pack('B',int(128.0 + amplitudeD*math.sin(2.0*math.pi*1.5*frequenceD*i/fech)))
    Monson.writeframes(valG + valD) # écriture frame
Monson.close()

Fichier = open(NomFichier,'rb')
data = Fichier.read()
tailleFichier = len(data)
print('\nTaille du fichier',NomFichier, ':', tailleFichier,'octets')
print("Lecture du contenu de l'en-tête (44 octets) :")
print(binascii.hexlify(data[0:44]))
print("Nombre d'octets de données :",tailleFichier - 44)
Fichier.close()

2)Pour faire une mélodie par exemple "au clair de la lune" il suffit de modifier ces lignes EN ROUGE et de rajouter une variable "fréquence" avec les fréquences des notes de la musique "au clair de la lune" ce qui donne

frequence=[260,1,260,1,260,291,328,291,260,328,291,1,291,260]

for y in frequence:

3)Pour créer des sons aléatoires il faut enlever les lignes en rouge et le s remplacer par ces lignes :

import ramdom

frequence=[ramdom.randrange(0,10) for i in range (10)

bottom of page