Un kilo de moi-même

De Centre de Ressources Numériques - Labomedia
Aller à : Navigation, rechercher

Cette composition a été crée pour être jouée par Octav3, notre pianiste à 8 doigts.

Elle consiste a faire jouer à lui-même le code en binaire du script python écrit pour l'occasion sachant que celui-ci fait exactement 1024 octets, soit 1 Kio.

Les 1024 octets (composés de 8 bits) sont retranscrits sur une octave (composée de 8 notes).

Le morceau se compose donc de 1024 accords joués successivement.


Le code de 1024 octet, non commenté.

# -*- coding: utf8 -*-
# C'est un vrai engagement personnel vis à vis de l'Art contemporain
 
from servoControl import play_note
from servoControl import initialisation
 
import threading
import time
import re
 
tps = 0.3
partition = []
 
from sys import argv
 
fichier = str(argv[1])
 
with open(fichier, 'rb') as g:
    content = g.read()
 
content = map(ord,content)
 
for octet in content:
 
    octet = bin(octet)        
    octet = octet[2:].zfill(8)
    accord = [match.start() for match in re.finditer(re.escape("1"), octet)]
    partition.append(("test", octet, accord))
 
def thread_notes (bit):
    thread = threading.Thread(target=play_note, args=(bit))
    thread.start()
 
def myself():
 
    compteur = 1
 
    for i in partition:
	print("Octet n°{0} : {1}\n\n".format(compteur, i[1]))
        for j in i[2]:
            thread_notes((7-j,))
        time.sleep(tps)
	compteur +=1
 
if __name__ == "__main__":
 
    initialisation ()
    myself()

Le même code commenté :

# -*- coding: utf8 -*-
# C'est un vrai engagement personnel vis à vis de l'Art contemporain
 
from servoControl import play_note
from servoControl import initialisation
 
import threading
import time
import re
 
tps = 0.3
partition = []
 
from sys import argv
 
fichier = str(argv[1])                                                        #récupère le premier argument renseigné à l’exécution 
 
with open(fichier, 'rb') as g:
    content = g.read()                                                        #ouvre le fichier dans son intégralité en binaire
 
content = map(ord,content)                                                    #converti chaque octet en une valeur décimale comprise entre 0 et 255
 
for octet in content:
 
    octet = bin(octet)                                                        #converti la valeur décimale en binaire écrit avec des "0" et des "1"       
    octet = octet[2:].zfill(8)                                                #complète au besoin avec des 0 pour bien avoir 8 bit
    accord = [match.start() for match in re.finditer(re.escape("1"), octet)]  #récupère la position des 1 dans l'octet
    partition.append(("test", octet, accord))                                 #construit la partition
 
def thread_notes (bit):
    thread = threading.Thread(target=play_note, args=(bit))
    thread.start()
 
def myself():
 
    compteur = 1
 
    for i in partition:
	print("Octet n°{0} : {1}\n\n".format(compteur, i[1]))
        for j in i[2]:
            thread_notes((7-j,))
        time.sleep(tps)
	compteur +=1
 
if __name__ == "__main__":
 
    initialisation ()
    myself()