Un kilo de moi-même
De Centre de Ressources Numériques - Labomedia
Révision de 26 février 2014 à 03:39 par Olivier (discussion | contributions)
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()