INTRODUCTION |
Comme vous le savez, les échantillons sonores (les valeurs d’échantillonnage du son) sont stockés dans une liste et peuvent être restitués à partir de cette liste. Si l’on veut éditer le son, il suffit donc de modifier de façon tout-à-fait habituelle la liste des échantillons. |
RÉGLER LE VOLUME DE L’ENREGISTREMENT |
Le programme suivant réduit le volume à 25% du volume initial. Pour ce faire, on copie la liste des échantillons vers une another list, dont toutes les valeurs sont le quart de la valeur initiale. from soundsystem import * samples = getWavMono("mysound.wav") soundlist = [] for item in samples: soundlist.append(item // 4) openMonoPlayer(soundlist, 22010) play()
|
MEMENTO |
Pour copier une liste, il faut tout d’abord créer une empty listet la remplir petit à petit à l’aide de append(). Afin de s’assurer que les valeurs, une fois divisées par quatre, sont encore des nombres entiers, il faut utiliser la integer division (double slash de division). |
UTILISER L’INDICE DE LA LISTE |
from soundsystem import * from gpanel import * samples = getWavMono("mysound.wav") makeGPanel(0, len(samples), -33000, 33000) for i in range(len(samples)): if i == 0: move(i, samples[i] + 10000) else: draw(i, samples[i] + 10000) for i in range(len(samples)): samples[i] = samples[i] // 4 for i in range(len(samples)): if i == 0: move(i, samples[i] - 10000) else: draw(i, samples[i] - 10000) |
MEMENTO |
Beaucoup de programmeurs ont l’habitude de nommer i la variable qui contient l’indice de la liste. Ainsi, pour parcourir une liste, on utilise un bloc for de la manière suivante :
for i in range(10):
La variable i est aussi appelée « variable de contrôle » de la boucle ou « pas » de la boucle.
|
GÉNÉRER DES SONS |
Il est assez grisant de pouvoir créer son propre son, non en le chargeant depuis un fichier préexistant, mais en créant la liste des échantillons de toute pièce. Pour créer une onde rectangulaire, il suffit de stocker une même valeur arbitraire, par exemple 5000, sur un nombre N d’échantillons et de poursuivre ensuite avec la valeur opposée, en l’occurrence -5000, sur les N échantillons suivants au sein de la liste. from soundsystem import * samples = [] for i in range(4 * 5000): value = 5000 if i % 10 == 0: value = -value samples.append(value) openMonoPlayer(samples, 5000) play() |
MEMENTO |
Le taux d’échantillonnage de 10000 Hz correspond à la prise d’un échantillon sonore tous les 0.1 ms. Le programme change toujours de signe (-/+) toutes les 10 valeurs, à savoir tous les 1 ms. Cela correspond à une onde rectangulaire dont la période est de 2 ms, ce qui correspond à une fréquence de 500 Hz. On utilise pour ce faire l’opérateur modulo % qui retourne le reste de la division entière. La condition i % 10 == 0 est donc vraie pour i = 0, 10, 20, 30, etc. |
EXERCICES |
|