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)

(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
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()