256 octets pour 1 octave

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

(En cours d'écriture...)

Cette installation permet d'écouter, dans l'ordre, les 256 octets joués sur une octave de piano (ou autre).

Un octet comprenant huit bits, et une octave huit notes, chaque bit est associé à une note qui est jouée si le bit vaut 1.

Le dispositif utilise une Raspberry Pi, une carte PCA9685 - 16-Channel de chez Adafruit, 8 servo-moteurs et une alimentation de PC.

Script python

Ci-dessous, le script principal qui permet d'obtenir le résultat visible sur la vidéo.

L'archive complète avec les librairies d'Adafruit et notre lib de pilotage des servos est disponible ici : Fichier:256octets.zip.

# -*- coding: utf8 -*-

from servoControl import play_note
from servoControl import initialisation

import threading
import time
import re

tps = 0.5
partition = []

for i in range(255):

    octet = bin(i+1)[2:] # converti en binaire et retire le 0b
    octet = octet.zfill(8)   # rajoute les 0 aux début de l'octet
    octet = str(octet)       # converti le nombre en string
    accord = [match.start() for match in re.finditer(re.escape("1"), octet)] # recherche les positions de chaque "1"
    partition.append((i+1, octet, accord))

def thread_notes (bit):
    thread = threading.Thread(target=play_note, args=(bit))
    thread.start()

def octets_pour_un_octave():
            
    for i in partition:

        print("---")
        print (i[1])

        for j in i[2]:
            thread_notes((j,))
        time.sleep(tps)
        print("---")    
       
if __name__ == "__main__":
    
    initialisation ()
    octets_pour_un_octave()

Partie mécanique

Sur les vidéos, la pièce est jouée par un pianiste de 50 doigts, mais il est possible d'obtenir le même résultat avec les 8 doigts d'un pianiste plus modeste.

À cette fin, vous pouvez consulter la documentation d'Octav3.