webody

WEBODY est une pièce sonore à propos du sexe en réseau, et plus spécifiquement des “sextapes” disponibles sur le web, matériau pornographique de plus en plus répandu avec la massification des “webcams” grand public et légères (laptops, smartphones), l’accès grandissant à Internet et au travers de pratiques de sexe “live stream”, camgirls monétisées, etc.
Cette pièce prend pour parti d’écouter ce corpus médiatique, produit et partagé dans le réseau multipoint du web, rendu public et archivé par l’intermédiaire de diverses plateformes, blogs… Il s’agira de considérer ce corpus uniquement dans sa dimension sonore, faisant l’hypothèse d’une pornographie audio (une pornophonie?), en le privant de la visualité prédominante dans la représentation sexuelle, afin d’entendre ce que ce matériau audio nous dit à propos de nos usages et représentations des corps, des technologies, des genres, des réseaux sociaux…
La méthode de composition restera au plus près du document brut, et le détaillant par les moyens de l’amplification, du filtrage, du cut-up ou de la manipulation temporelle des échantillons. Continuer la lecture de webody

[ph_msl]

ph_msl-help

[ph_msl] is a multislider GUI with persitent parameters for interface/graphic setup and conceived as an « abstraction ».

It relies on 4 « compiled » externals from 3 libraries – mostly in order to perform dynamic-patching, state-saving and user events capture :

[iemguts/canvasargs]
[iemguts/propertybang]
[iemgui/iem_event]
[iemlib/dollarg]

Moreover, for the sake of avoiding redundant code, this abstraction is provided with 8 homemade abstractions,
– 6 about color-format conversion :

ph_iem2rgb

   ph_iem2web

ph_rgb2iem

   ph_rgb2web
   ph_web2iem
   ph_web2rgb
– 1 control facility :
   ph_skip
– and 1 GUI abstraction for picking colors and to avoid dependency on [hcs/colorpanel] :
   ph_g.colorpicker

 

To try it : download & uncompress the archive below :
> ph_msl_updated (11/07/2016)
It has been tested with pd-0.46-7 and pd-0.47-1 on MacOS X 10.10.5, and necessary libraries from the « deken » utility.

I’m happy to receive any comments on this : phae_dot_ilias_at_gmail_dot_com

Copyrighted Silence : structuration des données et métadonnées

le script RIP.py :

# -*- coding: utf-8 -*-

'''
  RIP PROCESS
  - rip current CD in drive to "CD_xxx" directory
  - create current "rip_info.xml" in "CD_XXX" directory
  - rip audio into .wav files to "waverip" subdirectory
  - update global "rip_process.xml"
'''

import pymedia.removable.cd as cd
import sys, wave, struct, os
import datetime
import lxml.etree as ET
import random

import CS_lib

# --- LOAD "rip_process.xml"
rip_process_path = os.path.normpath(CS_lib.DATAPATH+"/rip_process.xml")
parser = ET.XMLParser(remove_blank_text=True)
tree = ET.parse(rip_process_path, parser)
rip_process = tree.getroot()
cds = rip_process.findall("cd")
newCD_id = len(cds) + 1

# --- get basic info
print("Be sure to insert CD in drive...")
print("and input human readable labels below")
artistLabel = raw_input("Artist : ")
albumLabel = raw_input("Album : ")

now = datetime.datetime.now()
print("this is local time")
print(now)

# --- créer le dossier "CD_xxx" et son sous-dossier "waverip"
os.chdir(CS_lib.DATAPATH)
newCD_relDir = "CD_"+str(newCD_id)
os.mkdir(newCD_relDir)
newCD_dir = os.path.normpath(CS_lib.DATAPATH+"/"+newCD_relDir)
os.chdir(newCD_relDir)
os.mkdir("waverip")
newCD_waverip_dir = os.path.normpath(newCD_dir+"/waverip")

# --- Ouvrir le media, choisir le bon lecteur
cd.init()	
driveNo = raw_input("Choose drive no. (on "+str(cd.getCount())+" drive(s) found) : ")
if driveNo == '':
	driveNo = str(CS_lib.default_CDDriveNo)
c = cd.CD(int(driveNo))

# --- Récupérer les propriétés dont la Table Of Content (TOC), et le nombre de pistes
cd_props = c.getProperties()
print("opened cd")
newCD_tracksNb = len(cd_props['titles'])
print ("with "+str(newCD_tracksNb)+" track(s)")

currentTrackPos = 0
rip_info = ET.Element('rip_info')

# Itérer parmi les pistes
for tr_no in xrange(len(cd_props['titles'])):
	# --- ouvrir piste
	tr = c.open(cd_props['titles'][tr_no]) 
	
	# --- calcul de la durée
	tr_len_in_frames = int(cd_props['TOC'][tr_no][1])
	tr_len_in_smp = tr_len_in_frames * 588
	tr_len_min = (tr_len_in_smp / 44100) / 60
	tr_len_sec = (tr_len_in_smp / 44100) % 60
	tr_len_ms = int(((tr_len_in_smp / 44100.0) % 1.0) * 1000)
	
	# --- affichage données de piste
	print '--- TRACK %s ---' % (tr_no + 1)
	print '%s frames = %s samples' % (tr_len_in_frames, tr_len_in_smp) 
	print '%s\'%s\":%s' % (tr_len_min, tr_len_sec, tr_len_ms)
	
	
	# --- création du .wav et extraction des données vers fichier
	wavefile_path = os.path.normpath(newCD_waverip_dir+"/TR_"+str(tr_no+1)+".wav")
	wfile = wave.open(wavefile_path, 'w')
	wfile.setparams((2, 2, 44100, 0, 'NONE', 'not compressed'))
	wfile.writeframes(tr.read(tr_len_in_smp * 4))
	wfile.close()
	tr.close()

	# --- ajout des données pour rip_info
	track_info = ET.SubElement(rip_info, 'track', id=str(tr_no+1))
	track_length = ET.SubElement(track_info, 'length_in_smp')
	track_length.text = str(tr_len_in_smp)
	track_position = ET.SubElement(track_info, 'position_in_smp')
	track_position.text = str(currentTrackPos)
	currentTrackPos += tr_len_in_smp

# --- fin du rip, éjection du CD	
c.eject()

# --- Enregistrer "rip_info.xml"
xmlstring = ET.tostring(rip_info, pretty_print=True)
rip_info_path = os.path.normpath(newCD_dir+"/rip_info.xml")
output = open(rip_info_path, 'w')
output.write(xmlstring)
output.close()
print "rip_info.xml created"


# --- mettre à jour rip_process
newCD = ET.Element("cd", attrib={'id':str(newCD_id)})
artist = ET.SubElement(newCD, 'artist')
artist.text = artistLabel
album = ET.SubElement(newCD, 'album')
album.text = albumLabel
rip_date = ET.SubElement(newCD, 'rip_date')
now = datetime.datetime.now()
rip_date.text = now.strftime("%Y-%m-%d %H:%M:%S")
tracksNb = ET.SubElement(newCD, 'tracksNb')
tracksNb.text = str(newCD_tracksNb)

rip_process.append(newCD)

#xmlstring = CS_lib.prettify(rip_process)
xmlstring = ET.tostring(rip_process, pretty_print=True)
output = open(rip_process_path, 'w')
output.write(xmlstring)
output.close()
print "rip_process.xml updated"

 

le fichier ./rip_process.xml :

<rip_process>
  <cd id="1">
    <artist>Margo</artist>
    <album>Furtive Furies</album>
    <rip_date>2015-09-16 23:53:10</rip_date>
    <tracksNb>13</tracksNb>
  </cd>
  <cd id="2">
    <artist>Motorhead</artist>
    <album>Dirty Love</album>
    <rip_date>2015-09-16 23:59:39</rip_date>
    <tracksNb>11</tracksNb>
  </cd>
  <cd id="3">
    <artist>Portishead</artist>
    <album>Portishead</album>
    <rip_date>2015-09-17 00:06:08</rip_date>
    <tracksNb>11</tracksNb>
  </cd>
  <cd id="4">
    <artist>Laurie Anderson</artist>
    <album>Bright Red</album>
    <rip_date>2015-09-17 00:49:39</rip_date>
    <tracksNb>14</tracksNb>
  </cd>
  <cd id="5">
    <artist>MIS (Mexican Institute of Sound)</artist>
    <album>Politico</album>
    <rip_date>2015-09-17 01:01:02</rip_date>
    <tracksNb>13</tracksNb>
  </cd>
  <cd id="6">
    <artist>Robert Wyatt</artist>
    <album>Rock Bottom</album>
    <rip_date>2015-09-17 01:43:47</rip_date>
    <tracksNb>6</tracksNb>
  </cd>
  <cd id="7">
    <artist>KMFDM</artist>
    <album>WWIII</album>
    <rip_date>2015-09-17 01:51:50</rip_date>
    <tracksNb>11</tracksNb>
  </cd>
</rip_process>

 

exemple d’un fichier ./CD_xxx/rip_info.xml :

<rip_info>
  <track id="1">
    <length_in_smp>7952700</length_in_smp>
    <position_in_smp>0</position_in_smp>
  </track>
  <track id="2">
    <length_in_smp>11660628</length_in_smp>
    <position_in_smp>7952700</position_in_smp>
  </track>
  <track id="3">
    <length_in_smp>14457156</length_in_smp>
    <position_in_smp>19613328</position_in_smp>
  </track>
  <track id="4">
    <length_in_smp>10254132</length_in_smp>
    <position_in_smp>34070484</position_in_smp>
  </track>
  <track id="5">
    <length_in_smp>12640236</length_in_smp>
    <position_in_smp>44324616</position_in_smp>
  </track>
  <track id="6">
    <length_in_smp>8336076</length_in_smp>
    <position_in_smp>56964852</position_in_smp>
  </track>
  <track id="7">
    <length_in_smp>8220828</length_in_smp>
    <position_in_smp>65300928</position_in_smp>
  </track>
  <track id="8">
    <length_in_smp>15575532</length_in_smp>
    <position_in_smp>73521756</position_in_smp>
  </track>
  <track id="9">
    <length_in_smp>10181808</length_in_smp>
    <position_in_smp>89097288</position_in_smp>
  </track>
  <track id="10">
    <length_in_smp>7172424</length_in_smp>
    <position_in_smp>99279096</position_in_smp>
  </track>
  <track id="11">
    <length_in_smp>9042852</length_in_smp>
    <position_in_smp>106451520</position_in_smp>
  </track>
  <track id="12">
    <length_in_smp>13088880</length_in_smp>
    <position_in_smp>115494372</position_in_smp>
  </track>
  <track id="13">
    <length_in_smp>32832156</length_in_smp>
    <position_in_smp>128583252</position_in_smp>
  </track>
</rip_info>

 

44K1’00 »

Premier essai, à la fenêtre de chez moi, côté cathédrale, durant le mois d’août

Cette idée vient de l’envie encore une fois de « résumer » un lieu, de l’embrasser dans une dimensions plus à notre échelle.
Pour rentrer dans le concret, il s’agit d’enregistrer l’activité « sonore », la vibration de l’air, à des fréquences qui ne sont plus audibles mais qui sont quand même peut-être des périodes, de récurrences, peut-être même des harmonies. Ainsi on enregistre avec un micro, mais à un taux d’échantillonnage de 80Hz. Selon le théorème de Nyquist, la plus haute fréquence pouvant être représentée est donc 40Hz, donc à mon audition inaudible je crois, en tout cas, je n’arrive pas à la reproduire sur mes haut-parleurs.

Là c’est l’activité de la ville qui formerait des fréquences dans ce spectre inaudible, et peut-être même pas sonore, infrasonore. Le passage des voitures produirait-t-il une fréquence qui n’est pas DC, mais légèrement oscillante, à je ne sais pas 0,37Hz (toutes les 2,720 secondes) ?

Est-ce qu’il y a une fréquence ou ensemble de fréquences qui représenterait le sommeil de la ville, son éveil… l’oscillation d’une activité « bruitante » ?
Est-ce que ce processus n’enregistre pas seulement le bruit électrique ? Mais alors ce bruit électrique n’est-il pas aussi important que ce qui se passe à la fenêtre ? Plus important, ce bruit « propre » (self noise) sonne-t-il plus dans ce processus d’enregistrement que l’activité extérieure, le paysage ?

En tout cas, on aura pris soin de filtrer assez radicalement les fréquences supérieures à la fréquence de Nyquist (SR/2), soit 40Hz et au-delà.

[Courbe de réponse du filtre en entrée (filtre anti-repli du spectre (eng: anti-foldover filter) }

La finalité de cet enregistrement est d’être reproduit à un taux plus élevé pour transposer ces fréquences inaudibles dans le spectre audible. Par conséquent, ce signal « sous-échantillonné » est reproduit à 44100Hz (norme CD). Ainsi le signal le plus haut enregistré (40 Hz en théorie) est transposé à 22 050 Hz (humainement inaudible), et 20Hz à 11 025Hz.
Et 100Hz entendu correspondent à une fréquence enregistrée de 0,184058Hz soit une période de 5,5125 secondes.

[Tableau de correspondance spectre enregistré/spectre reproduit sur une échelle logarithmique]
(Hz) -> période
40 = 13,7 sec
80 = 6,9 sec160 = 3,4 sec
320 = 1,7 sec
640 = 861 ms
1k2 = 430 ms
2k5 = 215 ms
5k1 = 108 ms (9,3Hz)
10k = 54ms (18Hz)

Chose amusante c’est qu’à ce taux de transposition, 80Hz reproduits à 44100Hz, les 80 minutes d’un CD représentent 44100 minutes d’enregistrement, soit 30 jours et 15 heures.

Il faudrait faire l’essai avec des signaux test, par exemple un bruit blanc avec très lent LFO sur l’amplitude (par exemple 100/551,25 Hz, comme on disait, une période d’environ 5 secondes). Voir si cette variation d’amplitude produit bien une relative sinusoïde à faible taux d’échantillonnage.

 

plagiat audio : quelques liens

FORUM « SAMPLES »

http://saceml.deepsound.net/archives/archi3.html

http://saceml.deepsound.net/archives/archi4.html

http://saceml.deepsound.net/archives/archi75.html

ARTICLES « SAMPLES »

http://www.konbini.com/fr/entertainment-2/sampling-et-droits-dauteur/

https://en.wikipedia.org/wiki/Legal_issues_surrounding_music_sampling

https://fr.wikipedia.org/wiki/%C3%89chantillon_%28musique%29#Questions_juridiques

 

python wave

bases en python >>> FLOSS Manual : Initiation à Python >>> http://www.flossmanualsfr.net/initiation-a-python/

la librairie « wave » assez simple d’utilisation : https://docs.python.org/2/library/wave.html

premier tests sous python :

# -*- coding:utf-8 -*-

import wave, struct

sndfile = wave.open("Lusitania.wav",  'r')
print sndfile.getparams()
sndfile.setpos(48200)
frames = sndfile.readframes(12)
print(len(frames))

i = 0
while i < len(frames):
        oneframe = frames[i:i+2]
        print(len(oneframe))
        data = struct.unpack("<h", oneframe)
        print(data)
        i+= 2

sndfile.close()

également la librairie externe PyMedia (http://www.pymedia.org) qui permet de lire directement un CD Audio

à noter les spécificités du CD Audio (voir notamment https://en.wikipedia.org/wiki/Compact_Disc_Digital_Audio#Frames_and_timecode_frames) : il semblerait que, au moins dans la TOC (Table Of Content) les durées et positions soient inscrites en « frames » de 588 paire d’échantillons (gauche et droite) soit 1/75e de seconde (588 x 75 = 44100). Donc il s’agit du « grain », de l’unité minimale de durée.
(à vérifier tout de même avec un autre outil (par ex : rip puis pd [soundfiler] voir si on a des durées qui ne sont pas multiples de 588)

également à propos du format WAVE : un bon document >> http://web.archive.org/web/20080113195252/http://www.borg.com/~jglatt/tech/wave.htm