Utilisateur:Mondher : Différence entre versions

De Design numérique
Aller à : navigation, rechercher
(9 octobre / workshop : un réseau)
(Inspirations et/ou partages autour de la musique)
 
(262 révisions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
== '''9 octobre / workshop : un réseau''' ==
+
== '''Q1 / workshop : un réseau'''===
 
+
<br>
 
1ère étape : '''mise en place''' du réseau<br>
 
1ère étape : '''mise en place''' du réseau<br>
  
Ligne 11 : Ligne 11 :
  
 
Carto-index-dendrogram-01.jpg|graph hiérarchique
 
Carto-index-dendrogram-01.jpg|graph hiérarchique
 +
</gallery>
  
 +
'''après quelques expérimentations'''
 +
 +
<gallery>
 
18.png|graph abstrait 1
 
18.png|graph abstrait 1
  
Ligne 21 : Ligne 25 :
  
 
graph abstrait 4.png|graph abstrait 4
 
graph abstrait 4.png|graph abstrait 4
 +
 +
Carto-abstrait.png|
 +
ca2.png|
 +
ca3.png
 +
ca4.png
 +
ca5.png
 +
ca6.png
 +
ca7.png
 +
ca8.png
 +
ca9.png
 +
ca10.jpg
 
</gallery>
 
</gallery>
  
après quelques expérimentations
+
'''et finalement'''
 +
<gallery>
 +
carto-x-1.jpg
 +
carto-x-2.jpg
 +
carto-x-3.jpg
 +
carto-x-4.jpg
 +
carto-x-5.jpg
 +
carto-x-6.jpg
 +
carto-x-7.jpg
 +
carto-x-8.jpg
 +
carto-x-9.jpg
 +
carto-x-10.jpg
 +
carto-x-11.jpg
 +
carto-x-12.jpg
 +
carto-x-13.jpg
 +
carto-x-14.jpg
 +
carto-x-15.jpg
 +
carto-x-16.jpg
 +
carto-x-17.jpg
 +
carto-x-18.jpg
 +
carto-x-19.jpg
 +
carto-x-20.jpg
 +
carto-x-21.jpg
 +
carto-x-22.jpg
 +
carto-x-23.jpg
 +
carto-x-24.jpg
 +
carto-x-25.jpg
 +
</gallery>
  
 +
== '''--''' ==
 +
<br>
 +
==='''quoi ?'''===
 +
Un site composé de plusieurs pages organisées par "niveaux". La page d'accueil est le niveau 1. Sur chaque page il y a des phrases en mouvement. Ces phrases représentent des pensées, des sensations, des idées. Les pensées vont et viennent, sortent par moments de la page. Pour se balader entre les pages, il faut cliquer sur les phrases.
 +
Cette idée vient d'une lecture récente pour l'examen du cours de littérature : L'Innommable de Samuel Beckett. Ce livre présente un narrateur dont la forme reste abstraite, et dont on ne peut cerner la nature. La seule caractéristique qu'il partage avec un être humain est une forme de conscience, remplie de pensées tantôt éparses, tantôt absurdes, tantôt insensées. Il ne sait pas ce qu'il est, si il est.
 +
<br>
 
<gallery>
 
<gallery>
Carto-abstrait.png|
+
Mndr Xx schema.png|
Exemple.jpg|Description 2
 
 
</gallery>
 
</gallery>
 +
schéma de construction des pages et des déplacements
 +
<br>
 +
<br>
 +
==='''comment ?'''===
 +
Pour chaque niveau il y a un fichier HTML, un fichier CSS et un fichier JavaScript.
 +
<br>
 +
Les fichiers HTML contiennent une vingtaine de phrases, chacune contenue dans un paragraphe, lui-même contenu dans un div. Elles sont écrites à l'intérieur d'une balise a, ce qui en fait des liens cliquables.
 +
<br>
 +
<br>
 +
'''CSS :'''
 +
Dimensions et couleur de fond des pages.
 +
<br>
 +
    height: 100%;
 +
    width: 100%;
 +
    margin: none;
 +
    padding: none;
 +
    background-color: black;
 +
<br>
 +
<br>
 +
'''Typographie et hyperliens :'''
 +
<br>
 +
Position, typographie, taille de la typographie, désactivation de l'aspect hyperlien, transparence de la typographie pour utiliser seulement son ombre de manière floue afin de symboliser les pensées. Lorsque le curseur rencontre une phrase, celle-ci se précise. Autrement, les phrases sont floues.
 +
<br>
 +
    position:fixed;
 +
    font-size: 20px;
 +
    text-decoration: none;
 +
    font-family: Arial, Helvetica, sans-serif;
 +
    cursor: none;
 +
    color: transparent;
 +
    text-shadow: 0px 0px 5px #ffffff;
 +
<br>
 +
<br>
 +
JavaScript :
 +
Un script js permet de placer les phrases "aléatoirement" dans l'espace de la fenêtre au moment de l'ouverture de la page :
 +
<br>
 +
    var h = $(window).height() - 50;
 +
    var w = $(window).width() - 50;
 +
 +
    var nh = Math.floor(Math.random() * h);
 +
    var nw = Math.floor(Math.random() * w);
  
== '''générateur de spams''' ==
+
    return [nh,nw];
 +
<br>
 +
puis de les déplacer, "aléatoirement" aussi :
 +
<br>
 +
    var newq = makeNewPosition();
 +
    $(myclass).css({ top: newq[1], left: newq[0] });
 +
<br>
 +
    var newq = makeNewPosition();
 +
    $(myclass).animate({ top: newq[1], left: newq[0] }, 25000,  function(){
 +
      animateDiv(myclass);
 +
    });
 +
<br>
 +
J'aimerais par la suite créer plus de niveaux et incorporer d'autres types de contenus (images, vidéos, sons, documents..)
 +
J'aimerais également développer les aspects visuels et les comportements des éléments.
 +
<br>
 +
<br>
 +
== '''Q2 / Corps et interface''' ==
 +
<br>
 +
==='''Consigne'''===
 +
Toujours en relation avec la thématique "corps et numérique". Le projet  de ce second quadrimestre porte sur la question de l'interface avec les  machines. Il est demandé d'imaginer ou de détourner une interface humain/ordinateur.
 +
<br>
 +
<br>
  
=== '''quoi ?''' ===
+
==='''Quoi'''===
un générateur de spams qui propose de sélectionner un contenu textuel parmi une sélection et de l'envoyer à une ou plusieurs cibles parmi une liste de cibles.
+
J'aimerais travailler sur une interface qui propose des sélections de sons/notes de musique en fonction de données météorologiques.
 +
<br>
 +
<br>
 +
Variante 1/
 +
<br>Pour chaque lieu/région, parmi une sélection de lieux définie, et en fonction de la météo de ce lieu, une palette de sons est créée chaque jour.
 +
<br>
 +
<br>
 +
Variante 2/
 +
<br>
 +
Un instrument muni de capteurs pouvant mesurer des données météorologiques, les enregistrer pour archives et/ou pour rejouer le temps, jouer le temps en temps réel.
 +
<br>
 +
<br>
 +
Les sons varieraient en fonction de :
 +
* la température
 +
* la pression atmosphérique
 +
* l'humidité
 +
* la pluie
 +
* la vitesse du vent
 +
* la direction du vent
 +
* la luminosité
 +
* la nébulosité
 +
* point de rosée
 
<br>
 
<br>
  
=== '''comment ?''' ===
+
==='''Le son en théorie'''===
 +
====='''[https://fr.wikipedia.org/wiki/Son_(physique) Quelques caractéristiques du son en physique]'''=====
 +
* La vitesse du son dépend de la nature, de la température et de la pression du milieu ;
 +
* L'humidité de l'air augmente légèrement la vitesse du son ;
 +
* Les conditions atmosphériques et météorologiques influent sur la propagation acoustique locale et à grande distance. Pour prévoir la propagation du son, il convient de connaître la température moyenne, mais aussi la structure thermique et l'hygrométrie (=l'humidité) de la masse d'air traversée ainsi que la direction du vent ;
 +
* L'humidité augmente la vitesse propre du son ;
 +
* La présence de gouttelettes d'eau dans l'atmosphère, comme dans les nuages et les brumes, comme celle de cristaux de glace, en cas de neige, change considérablement la propagation du son. Elle se traduit par une diminution et une dispersion de la vitesse et une atténuation d'autant plus marquée que la fréquence est basse.
  
===== '''alternative 1''' =====  
+
====='''[https://fr.wikipedia.org/wiki/Son_(physique) Audition humaine]'''=====
''en réseau''
+
-> Articles détaillés :'''[https://fr.wikipedia.org/wiki/Psychoacoustique Psychoacoustique] et [https://fr.wikipedia.org/wiki/Audition_humaine Audition humaine]'''
 
<br>
 
<br>
 +
Comme pour tous les phénomènes perçus, le temps joue un rôle fondamental. Le son étant une variation de la pression, et l'information sonore une variation de cette variation, l'impression sonore dépend à plusieurs égards du temps. Le son étant aussi une onde qui se propage dans l'espace au cours du temps, il existe des relations étroites entre l'espace et le temps, tant dans l'étude du son que dans sa perception. On distingue plusieurs caractères du son :
 +
* la direction d'origine ;
 +
* l'intensité, dite aussi volume sonore ou sonie ;
 +
* la hauteur, qui se décompose en hauteur tonale et hauteur spectrale ;
 +
* le timbre, qui comprend la variation caractéristique de l'émission sonore dans le temps.
  
une page web unique, on choisit un contenu textuel, on clique sur ''envoyer'' et une cible ou plus est/sont spammée(s).
+
Il suffit qu'un de ces caractères varie, les autres restant inchangés, pour qu'on perçoive une différence. La répétition d'une forme dans le temps entraîne la notion de rythme. Par ailleurs, les êtres humains sont capables de distinguer et de suivre une émission sonore dotée d'une certaine continuité de caractères au milieu d'une quantité d'autres (effet cocktail party).  
possibilité de soumettre du contenu, de renseigner son mail ou celui d'autres personnes pour faire partie de la liste de cibles.
+
<br>
 +
<br>
 +
-> Utilisation d'un outil naturel de modulation du son comme un outil numérique
 +
<br>
 +
<br>
 +
[https://www.usherbrooke.ca/sciences/recherche/vulgarisation-scientifique/la-musique-vue-par-les-sciences/la-musique-vue-par-une-mathematicienne/ Musique et mathématiques]
 +
<br>
 +
<br>
 +
'''?'''
 +
<br>
 +
* Quels types de sons ?
 +
* Comment les paramètres météorologiques et atmosphériques modifieraient-ils les sons ?
 +
* Rapport temps(chronologique)/temps(atmosphérique) : trois types de palettes de sons potentielles : les palettes du passé (mémoire, souvenir), les palettes de la journée courante (présent, temps réel), les palettes prédictives (avenir, prédiction).
 +
* Quel forme aurait le dispositif, l'interface ?
 +
<br>
 +
<gallery>
 +
Mndr-notes-musique-frequences.png|Fréquences des notes en Hz dans la gamme tempérée
 +
</gallery>
  
===== '''alternative 2''' =====  
+
==='''Comment'''===
''spams d'institutions et d'entreprises''
+
===='''Interface'''====
 +
====='''Station météorologique connectée'''=====
 +
De prime abord, il y a deux manières de récupérer des données météorologiques : premièrement, les sites internet qui publient des données mesurées par des stations météos nationales agrégées ou amateures, deuxièmement, utiliser une station météo. Étant donné que dans le cadre du workshop on travaille sur les interfaces, la deuxième option semble être la plus pertinente.
 
<br>
 
<br>
 +
<br>
 +
Quelques recherches de stations météo :
 +
<gallery>
 +
Mndr-station-meteo-3.jpg
 +
Mndr-station-meteo-5.jpg
 +
Mndr-station-meteo-4.jpg
 +
Mndr-station-meteo-1.jpg
 +
Mndr-station-meteo-6.jpg
 +
Mndr-station-meteo-7.jpg
 +
Mndr-station-meteo-8.jpg
 +
Mndr-station-meteo-9.jpg
 +
Mndr-station-meteo-10.jpg
 +
</gallery>
  
une page web unique, une première zone avec du contenu à disposition, une deuxième avec une sélection de cibles.
+
====='''Hacker/détourner une station météo'''=====
on choisi le contenu, on choisit une cible au minimum, on clique sur ''envoyer''.
+
'''1<sup>ère</sup> piste : fréquence radio'''
les informations de spams sont-elles enregistrées/archivées ? si oui, sont-elles accessibles ?
+
<br>
 +
Certaines stations météo utilisent une bande de fréquence de 433 MHz (de 868 MHz pour certaines stations) pour transmettre les données mesurées par les capteurs de la station à un appareil connecté. Connecté à un ordinateur, un Raspberry Pi doté d'un récepteur RF 433 MHz permet d'intercepter les envois de données de la station.
 +
<br>
 +
<br>
 +
'''2<sup>ème</sup> piste : passer par le circuit intégré ([https://fr.wikipedia.org/wiki/ESP8266 ESP8266]) de la partie display/récepteur de la station météo'''
 +
<br>
 +
Au cours de mes recherches sur les moyens de ''hacker'' une station météo, je suis tombé sur un [https://rayshobby.net/wordpress/pws-with-esp8266-inside/ article] (consulté le 19.03.21) qui présente une méthode intéressante ; elle serait facile à mettre en place et permettrait de contourner des étapes complexes et chronophages. Cette méthode s'applique à une station météo précise : l'[https://pratiquesnumeriques.be/index.php?title=Utilisateur:Mondher#La_station_m.C3.A9t.C3.A9o_en_question_:_AcuRite_Iris.E2.84.A2_.285-in-1.29_Weather_Station AcuRite Iris™ (5-in-1) Weather Station] car elle contient le circuit intégré ESP8266, ce qui n'est apparemment pas commun pour une station météo.
 +
<br>
 +
<br>
 +
Les étapes de cette méthode :
 +
<br>
 +
# souder des câbles reliant les ports 5V, GND et TXD du circuit intégré ESP8266 aux ports 5V, GND et RX d'un adaptateur USB serial
 +
# régler la vitesse de transmission de données à 115200 bauds
 +
# configurer la connexion WiFi du display/récepteur avec un nom de station et une clé aléatoires (pour faire des tests sans publier les données)
 +
# les informations utilisées pour l'envoi des données à la station [https://www.wunderground.com/ Weather Underground] via la commande HTTP GET sont visibles
 +
# écrire un script qui permette de parser la chaîne de caractères pour récupérer les données météorologiques sous la forme d'un identifiant et de sa valeur
 +
<br>
 +
<gallery>
 +
Mndr-pws_serial_connection.jpg|étape 1 - connexion du circuit intégré à l'adaptateur USB serial
 +
mndr-pws_serial_output.jpg|étape 3 (réception de données brutes à partir du display/récepteur)
 +
</gallery>
  
===== '''alternative 3''' =====  
+
====='''[https://www.acurite.com/shop-all/weather-instruments/weather-stations/high-definition-5-in-1-weather-station-with-wi-fi-to-weather-underground.html La station météo en question : AcuRite Iris™ (5-in-1) Weather Station]'''=====
''spams d'institutions et d'entreprises''
+
Ce modèle permet de mesurer la température, l'humidité, la vitesse du vent, la direction du vent et la pluie.
 +
<br>
 +
L'avantage avec cette station est qu'elle permet les deux méthodes, puisqu'elle fonctionne aussi en 433 MHz.
 
<br>
 
<br>
 +
NB : En Europe, il est impossible de consulter cette page et aussi de commander cet appareil via les distributeurs officiels. Ci-dessous, une capture d'écran de la page et des images de la station
 +
<br>
 +
Commande passée le 21.03.21 chez un distributeur non officiel via E-bay.
 +
<br>
 +
<br>
 +
<gallery>
 +
Mndr-acurite_Iris-(5-in-1)-weather-station.png|Page de l'appareil sur le site du fabricant ''AcuRite''
 +
Mndr-acurite_Iris-(5-in-1)-weather-station-sensors.jpg|L'antenne composée des capteurs / émetteur
 +
Mndr-acurite_Iris-(5-in-1)-weather-station-display.jpg|Le dispositif visuel / récepteur
 +
</gallery>
 +
<gallery>
 +
Mndr acurite-5in1.jpg|photo unboxing
 +
</gallery>
  
une page web unique, une première zone “contenu“ avec un bouton, une deuxième zone “cibles“ avec un bouton.
+
====='''Quelques pistes explorées pour récupérer les données d'une station météo'''=====
on clique sur chaque bouton, le contenu et un nombre de cibles de 1 ou + est choisi par la machine sur un mode aléatoire (anim machine à sous ?)
+
[https://forum.arduino.cc/index.php?topic=536141.0 Récupérer des données de stations météo en 433MHz à l'aide d'un Arduino]
pas de validation demandée, la machine envoie et affiche un message de confirmation (est-ce qu'elle renseigne sur le contenu envoyé et sur la ou les cibles spammées ou est-ce que cela reste un mystère ?).
+
<br>
les informations de spams sont-elles enregistrées/archivées ? si oui, sont-elles accessibles ?
+
[https://www.youtube.com/watch?v=xvt7XlPJt3I Hacking de domotique avec un Raspberry Pi]
 +
<br>
 +
===='''Jouer/programmer de la musique'''====
 +
====='''Python'''=====
 +
[https://www.youtube.com/watch?v=vb9c_WFMYeI The Sound of Data: Using Python to transform data streams into music]
 +
<br>
 +
[https://www.youtube.com/watch?v=xXNB1BbKY8A Live Coding Pop Music with Python and SuperCollider]
 +
<br>
 +
[https://deptinfo-ensip.univ-poitiers.fr/ENS/doku/doku.php/tp:python:harmonie Harmonie avec Python]
  
 +
Librairies Python :
 +
<br>
 +
[https://people.csail.mit.edu/hubert/pyaudio/docs/ PyAudio]
  
== '''10 décembre / sans-titre''' ==
+
====='''Sonic Pi'''=====
 +
======'''Essai'''======
 +
<syntaxhighlight lang="Python">
 +
live_loop :flibble do
 +
  2.times do
 +
    sample :ambi_glass_hum, amp: 0.5, rate: 1, release: 15, cutoff_slide_curve: 10
 +
  end
 +
  4.times do
 +
    sample :ambi_drone, amp: 0.5
 +
    play 20
 +
    2.times do
 +
      sample :ambi_glass_hum, amp: 0.5, rate: 1, release: 15
 +
      sleep 1
 +
      synth :sound_in, sustain: 1.5
 +
      sample :ambi_piano, rate: 0.9, attack: 3, release: 20
 +
      sample :ambi_piano, rate: 1, attack: 1, release: 20
 +
      sample :ambi_piano, rate: 0.2, attack: 1, release: 20
 +
      sample :ambi_piano, rate: 0.4, attack: 3, release: 20
 +
      sample :glitch_bass_g, rate: 0.3, cutoff: rrand(70, 130)
 +
      sleep 4
 +
    end
 +
    sample :ambi_piano
 +
    2.times do
 +
      play choose([:D4,:A4,:G4]), amp: 0.1, attack: 1, release: 2
 +
      sleep 0.125
 +
    end
 +
    2.times do
 +
      play choose([:E4,:C4,:B4]), amp: 0.1, attack: 5, release: 2
 +
      sleep 0.125
 +
    end
 +
  end
 +
end
 +
</syntaxhighlight>
 +
[[Fichier:Mndr_sonicpi_ambiant1_light.wav|gauche|Petit test sur Sonic Pi]]
 +
<br>
 +
<br>
 +
======'''Docu Sonic Pi'''======
 +
[https://www.youtube.com/watch?v=QGLPinGZhfg Making Music with Code (Using Sonic Pi)]
 +
<br>
 +
[https://www.youtube.com/watch?v=a1RxpJkvqpY Live coding dub techno in Sonic Pi]
 +
<br>
 +
 
 +
====='''SuperCollider'''=====
 +
Je recherchais des tutoriels sur SuperCollider quand je suis tombé sur [http://www.artere.qc.ca/babillard/25894-cours-de-programmation-musicale-avec-supercollider/ une annonce] pour des cours de programmation musicale sur SuperCollider.
 +
<br>
 +
J'ai rencontré [https://estelleschorpp.com/ Estelle Schorpp] le 8.04.21 et on a convenu de cours d'une heure et demie, une fois par semaine.
 +
<br>
 +
======'''Cours du 12.04.21'''======
 +
Contenu du cours :
 +
<br>
 +
Interface, shortcuts, variables, SynthDef et attributs SynthDef, UGen, signal, générer vs contrôler le son
 +
<br>
 +
<syntaxhighlight lang="python">
 +
// Cours 0 //
 +
 
 +
// Quelques commandes utiles :
 +
// - pour mettre à jour la fenêtre post : clique doit + clear ou Shift+Cmd+P
 +
// - pour effectuer une action : cmd + Enter
 +
// - pour booter le Server : Cmd + B
 +
// - pour arrêter le son = Cmd+.
 +
// - se documenter = cmd+D en mettant le surseur sur l'objet ou la méthode voulue
 +
// - faire apparaître la barre de recherche : Shift Cmd D
 +
 
 +
 
 +
receiver.message
 +
 
 +
3.cubed
 +
3.cubeg //(voir les messages d'erreur)
 +
3,cubed//(voir les messages d'erreur)
 +
 
 +
 
 +
//VARIABLES LOCALES ET GLOBALES//
 +
// variables globales a..z (sauf s) ou utiliser ~nom
 +
x = 3.cubed
 +
x
 +
x + 10
 +
 
 +
~number = 3.cubed
 +
 
 +
// Variables locales doivent être déclarées//
 +
 
 +
number = 3.cubed
 +
 
 +
(
 +
var number;
 +
number = 3.cubed;
 +
)
 +
 
 +
 
 +
 
 +
// commentaire sur une ligne
 +
/* commentaire entourant un texte*/
 +
// Shift+Cmd+/
 +
 
 +
 
 +
// MAINTENANT ON FAIT DU SON//
 +
 
 +
Server.local.boot
 +
s.boot
 +
Server.killAll
 +
 
 +
//Fonction dans laquelle on met un UGen et à laquelle on applique la méthode play//
 +
{}
 +
{SinOsc.ar}.play; //un synth se stocke sur le serveur
 +
 
 +
///!\ cmd+period pour arrêter le son
 +
 
 +
x = {SinOsc.ar}.play;
 +
x.free
 +
 
 +
//UGens//--> Tour of UGens dans la documentation
 +
 
 +
message .ar (audio rate) et kr. (control rate)
 +
 
 +
 
 +
//SinOsc a 4 arguments : freq , phase, mul et add
 +
 
 +
//freq = fréquence. L'oreille humaine perçoit de 20 Hz à 20000 Hz. Pour le soin de nos oreilles, nous utiliseront des valeurs de fréquence entre 50 et 1000
 +
//mul = amplitude. Dans SuperCollider, l'amplitude est comprise entre 0(on nentend rien) et 1 (amplitude max)
 +
 
 +
x = {SinOsc.ar(700, mul:0.1)}.play;
 +
x.free
 +
 
 +
(
 +
y = {
 +
arg freq=220, width=0.25, amp=0.1;
 +
var sig;
 +
sig = Pulse.ar(freq, width, amp);
 +
}.play;
 +
)
 +
 
 +
y.set(\freq,500, \amp, 0.1);
 +
y.free
 +
 
 +
//SynthDef// (sorte de récipient à Synth) voir documentation de Function dans la section audio "Function.play is often more convenient than SynthDef.play, particularly for short examples and quick testing. The latter does have some additional options, such as lagtimes for controls, etc. Where reuse and maximum flexibility are of greater importance, SynthDef and its various methods are usually the better choice."
  
=== '''quoi ?''' ===
+
// Le SynthDef \carree, version initiale
  
je vois ''instagram'' comme une vitrine de mise en valeur des corps et de marchandisation de ces derniers, notamment par le biais de l'esthétique (des corps), de la notoriété et du culte de la personnalité. le ''top 50'' actuel est composé d'influenceurs·euses et de personnalités issues de la musique, du sport, du cinéma, ou encore de la télé-réalité. l'image renvoyée par ces célébrité·e·s est souvent la composante la plus importante de leur popularité, elle est donc jaugée et menacée en tous temps par le regard des autres, par les tendances, par les scandales, et autres phénomènes. il faut sans arrêt être au top pour et cultiver son personnage publique (et souvent l'égo qui l'accompagne) pour rester dans la course. la notoriété et la beauté sont recherchées, et la combinaison de ces deux paramètres est perçue comme une recette miracle, garantissant une vie heureuse, émancipatrice et gratifiante.
+
(
 +
SynthDef.new(\carree,{
 +
arg freq=220, width=0.25, amp=0.1;
 +
var sig;
 +
sig = Pulse.ar(freq, width, amp);
 +
Out.ar(0, sig);
 +
}).add;
 +
)
  
cette idée de projet part de cette observation et s'articule de la manière suivante :
+
x = Synth.new(\carree, [\freq,500, \width, 0.5])
un site web affiche le portrait des 50 personnes les plus populaires sur ''instagram''. les portraits sont liés à la cote de popularité de ces personnes. si la cote d'une personne baisse, l'image de son portrait se dégrade.
+
x.set(\width, 0.25)
le but de ce projet est donc de représenter ces variations de popularité et d'ajouter à cette compétition une symbolique “cruelle“, comme une conséquence inéluctable de ce jeu de notoriété. comme si sortir du ''top 50'' signifierait de disparaître. chaque personne présente dans ce classement finira par en sortir.
+
x.free
  
[[Fichier:Ranking10-111220.png|sans_cadre|centré|ranking top selon le nombre de followers 10 au 11.12.2020 | source : socialblade.com]]
+
// Le SynthDef \carree, Ajout de plusieurs arguments et du générateur Pan2.
  
=== '''comment ?''' ===
+
(
 +
SynthDef.new(\carree,{
 +
arg freq=220, width=0.25, amp=0.1, pos=0;
 +
var sig;
 +
sig = Pulse.ar(freq, width, amp);
 +
sig = Pan2.ar(sig, pos);
 +
Out.ar(0, sig);
 +
}).add;
 +
)
 +
(
 +
x = Synth.new(\carree, [
 +
\freq,500,
 +
\width, 0.5,
 +
\amp, 0.2;
 +
\pos, 0
  
plus une personne se trouve haut dans le classement, plus l'image de son portrait est complète ; plus elle est bas dans le classement, plus il y a de pixels noirs. une personne qui sort du ''top 50'' verra son portrait constellé de pixels noirs, rendant son identification difficile, voire impossible.
+
])
[https://socialblade.com/instagram/ socialblade.com] est un site de ranking qui permet de visualiser en temps réel des statistiques de popularité d'une sélection de réseaux sociaux. dans la rubrique ''instagram'', il est possible de consulter le ''top X'' des personnes les plus suivies mais aussi de visualiser la popularité sous d'autres angles. l'idée est donc de se calquer en temps réel sur le ''top 50'' et de programmer une ''détérioration'' ou une ''déformation'' de l'image que j'aurais sélectionnée pour figurer sur le site.<br>
+
)
 +
x.free
  
  
détérioration de l'image :<br>
+
// Le SynthDef \carree, Version avec MouseX et MouseY
le nombre de pixels noircis est aléatoire.
 
est-ce que la position 51 implique un noircissement total de l'image des portraits ?
 
est-ce que il doit rester des pixels de l'image originale ?<br>
 
  
 +
(
 +
SynthDef.new(\carree,{
 +
arg freq=220, width=0.25, amp=0.1, pos=0;
 +
var sig;
 +
sig = Pulse.ar(// La fréquence oscille autour d'un équilibre déterminé par la position de la souris.
 +
MouseX.kr(200, 800), MouseY.kr(0.1, 0.5), amp);
 +
// L'utilisation de kr permet d'économiser de la puissance de calcul.
 +
sig = Pan2.ar(sig, pos);
 +
Out.ar(0, sig);
 +
}).add;
 +
)
  
une fois les personnalités dead, leur portrait détérioré est archivé sur le site.<br>
+
x = Synth(\carree)
si une personnalité retourne dans le classement, son image sort de l'archive et récupère des pixels en fonction de son statut.<br>
+
x.free
  
=== '''pourquoi ?''' ===
+
// Le SynthDef \carree.  Utilisation de la fonction exprange pour la modulation.
 +
// La souris contrôle le panoramique.
 +
(
 +
SynthDef(\carree,{
 +
arg freq=220, width=0.5, amp=0.1, vibFreq=2;
 +
var signal;
 +
signal = Pulse.ar(
 +
// Ici, on oscille de +/- 1/2 ton autour de la fréquence freq.
 +
SinOsc.kr(vibFreq).exprange(freq * -1.midiratio, freq * 1.midiratio),
 +
width,
 +
amp
 +
);
 +
signal = Pan2.ar(signal, MouseX.kr(-1,1));
 +
Out.ar(0, signal);
 +
}).add;
 +
)
  
notions qui m'intéressent dans ce travail :<br>
+
(
temporalité, fait de classer, approche “factuelle“, culte de la personnalité, déconstruction (symbolique) de l'égo, compétition, lien avec des phénomènes sociétaux et des concepts philosophiques, le côté caricatural de la compétition, symboliquement attaquer le “capital beauté“ par sa détérioration<br>
+
x = Synth(\carree, [
 +
\freq, 350,
 +
\width, 0.2,
 +
\amp, 0.05,
 +
\pos, 0,
 +
\vibFreq, 1,
 +
]);
 +
)
 +
x.free
 +
</syntaxhighlight>
  
 +
======'''Cours du 19.04.21'''======
 +
Contenu du cous :
 +
<br>
 +
Enveloppes, UGens, doneAction, range
 +
<br>
 +
<syntaxhighlight lang="python">
 +
Server.default.options.sampleRate = 44100;
  
fonctionnement qui m'intéresse dans ce travail :<br>
+
s.boot
la participation d'un grand nombre de personnes est garantie, sans qu'il ne soit demandé à personne de participer à ce travail (contrairement au générateur de spams). les données sont nombreuses et quotidiennes. le déroulement du projet et sa durée sont donc probablement garantis. les résultats sont des notes symboliques décernées par le plus grand nombre sur la base de “phénomènes spontanés“ dans un spectre très large couplés à une temporalité variable > qu'est ce que cela peut-il produire..?<br>
+
s.quit
  
 +
//ENVELOPPES
 +
//UGen Line pour contrôler l'amplitude
  
liens que je vois avec la thématique de corps numériques :<br>
+
//doneAction:0
le corps est omniprésent dans les comptes de personnes du ''top 50'', il est nécessaire, utilisé, vendu, magnifié, glorifié et surtout, numérique. ces comptes ''instagram'' font partie de la version numérique de ces personnes. nous sommes beaucoup à avoir une présence sur le net, ce qui peut inclure des informations sur nos apparences physiques mais aussi sur nos modes de vies, nos choix, nos orientations, notre intimité, etc.. (cf. corps chez michel foucault entre autres), ce qui me fait penser que certaines personnes, au vu de leur couverture médiatique/sociale et de leur présence sur le web, ont une présence beaucoup plus marquée que d'autres qui le sont moins ou pas du tout. En gros, tout ce qui représente une personne et qui est contenu sur le net, constitue, pour moi, son corps numérique. les répercussions sont à double tranchant.<br>
+
s.plotTree
  
 +
(
 +
x = {
 +
var sig, env;
 +
env = Line.kr;
 +
sig = Saw.ar(ExpRand(100, 800)) * env;
 +
}.play
 +
)
  
pour aller plus loin et boucler la boucle :<br>
+
x.free
créer un compte instagram et poster les portraits ?<br>
 
  
 +
//doneAction:2
  
lien recherché avec le cours d'arts numériques donné par Yves-Bernard > matérialisation de l'art numérique :<br>
+
(
impression et exposition des portraits des personnalités déclassées
+
x = {
 +
var sig, env;
 +
env = Line.kr(0, 0.5, 5, doneAction:0);
 +
sig = Saw.ar(ExpRand(100, 800)) * env;
 +
}.play
 +
)
  
=== '''schéma''' ===
+
x.free
  
[[Fichier:Schema.png|vignette|centré]]
+
//UGen XLine
 +
//XLine pour contrôler l'amplitude
  
=== '''images et droit d'auteur''' ===
+
(
 +
x = {
 +
var sig, env;
 +
env = XLine.kr(0.01, 0.5, 5, doneAction:2);
 +
sig = Saw.ar(ExpRand(100, 800)) * env;
 +
}.play
 +
)
 +
x.free
  
ce projet nécessite des photos destinées à être utilisées comme portraits. les images de célébrités étant protégées par des droits d'auteur, cela complique la tâche. mais, il est apparemment possible d'utiliser des photos trouvées sur instagram à condition qu'elle ne soient pas hébergées sur son propre site, ce qui est faisable en utilisant la fonction ''embed''. de cette manière, on peut afficher la photo sur notre site sans l'héberger.<br>
+
//XLine pour contrôler la fréquence
  
[https://phototrend.fr/2020/04/instagram-droit-auteur-fonction-embed/ source de l'info]<br>
+
(
>>> vérifier que cette info soit correcte !!! <br>
+
x = {
 +
var sig, envAmp, envFreq;
 +
envAmp = XLine.kr(0.01, 0.5, 5, doneAction:2);
 +
envFreq = XLine.kr(1000, 100, 5, doneAction:2);
 +
sig = Saw.ar(envFreq) * envAmp;
 +
}.play
 +
)
 +
x.free
  
si cette pirouette est possible, c'est jackpot car, le projet reposant sur des portraits mis en avant par leur détenteurs·trices, on a la meilleure source possible d'images et en quantité ! en plus de la ''qualité de la matière'', les photos proviendraient de la source du projet > boucle parfaite
+
(
 +
x = {
 +
var sig, envAmp, envFreq;
 +
envAmp = XLine.kr(0.01, 0.5, 5, doneAction:2);
 +
envFreq = XLine.kr(1000, 100, 2, doneAction:0);
 +
sig = Saw.ar(envFreq) * envAmp;
 +
}.play
 +
)
 +
x.free
 +
 
 +
//EnvGen
 +
 
 +
Env.new.plot
 +
 
 +
Env.new([0, 1, 0.3, 0], [0.5, 1, 3]).plot
 +
 
 +
Env.new([1, 0.6, 0.9, 1], [1, 2, 3]).plot
 +
 
 +
Env.new([0.01, 1, 0.01], [0.5, 3], [-1, 1]).plot
 +
 
 +
(
 +
x = {
 +
var sig, envAmp, envFreq;
 +
envAmp = EnvGen.kr(Env.new(
 +
[0.01, 1, 0.01],
 +
[0.5, 2],
 +
\exp));
 +
envFreq = XLine.kr(1000, 100, 2, doneAction:2);
 +
sig = Saw.ar(envFreq) * envAmp;
 +
}.play
 +
)
 +
x.free
 +
 
 +
(
 +
x = {
 +
var sig, envAmp, envFreq;
 +
envAmp = EnvGen.kr(Env.new(
 +
[0.01, 1, 0.01],
 +
[0.5, 2],
 +
\exp));
 +
envFreq = XLine.kr(1000, 100, 2, doneAction:2);
 +
sig = Saw.ar(envFreq) * envAmp;
 +
}.play
 +
)
 +
</syntaxhighlight>
 +
 
 +
======'''À faire pour le 26.04.21'''======
 +
<gallery>
 +
Mndr supercollider devoir-0.png|Devoir 0
 +
</gallery>
 +
<br>
 +
======'''Docu SuperCollider'''======
 +
<br>
 +
[https://www.youtube.com/watch?v=Ix2b_qFYfAA Live-Coding – programming masterly music | Juan Romero & Patrick Borgeat | TEDxKIT]
 +
<br>
 +
[https://www.youtube.com/watch?v=wYU18eiiFt4 Meet the Sonic Artist Making Music with Plants: Sound Builders]
 +
<br>
 +
 
 +
===='''Interprétation des données en musique'''====
 +
1<sup>ère</sup> piste :
 +
Utiliser des gammes de musiques dont les notes varieraient en fonction des données météo selon la relation réelle qu'entretiennent les sons et les impacts des phénomènes physiques sur les sons.
 +
<br>
 +
<br>
 +
La température et l'humidité pour influencer la fréquence des sons :
 +
<br>
 +
La vitesse du son augmente légèrement lorsque l’air contient de la vapeur d’eau. La seule façon de modifier la vitesse du son et de changer de milieu de propagation ou de changer les propriétés du milieu dans lequel l'onde se propage. Donc pour modifier la vitesse de propagation du son dans l'air, on peut modifier la température de l'air et/ou son humidité.
 +
<br>
 +
> disposer l’émetteur de la station dans l'eau ferait exploser les mesures d'humidité
 +
<br>
 +
<br>
 +
La tonalité
 +
<br>
 +
Checker quarts de ton et voix
 +
<br>
 +
Demander référence musique à Alice
 +
<br>
 +
2<sup>ème</sup> piste :
 +
blablabla
 +
<br>
 +
 
 +
===='''Coder de la musique avec python'''====
 +
[https://www.youtube.com/watch?v=vb9c_WFMYeI The Sound of Data: Using Python to transform data streams into music]
 +
<br>
 +
[https://www.youtube.com/watch?v=xXNB1BbKY8A Live Coding Pop Music with Python and SuperCollider]
 +
<br>
 +
[https://www.youtube.com/watch?v=QGLPinGZhfg Making Music with Code (Using Sonic Pi)]
 +
<br>
 +
[https://www.youtube.com/watch?v=a1RxpJkvqpY Live coding dub techno in Sonic Pi]
 +
<br>
 +
 
 +
==='''Documentation'''===
 +
[http://www.meteofrance.fr/prevoir-le-temps/observer-le-temps/parametres-observes Observer le temps : température, vent, humidité, pression]
 +
<br>
 +
[http://www.scienceballade.com/meteo-climat-musique La météo et le climat dans la musique]
 +
<br>
 +
[https://www.infoclimat.fr/observations-meteo/temps-reel/paris-montsouris/07156.html Infoclimat : données météo de nombreux pays en temps réel]
 +
<br>
 +
[https://fr.wikipedia.org/wiki/Son_(physique) Le son en physique]
 +
<br>
 +
[https://fr.wikipedia.org/wiki/Audition_humaine L'audition humaine]
 +
<br>
 +
[https://fr.wikipedia.org/wiki/Acoustique Acoustique]
 +
<br>
 +
[https://fr.wikipedia.org/wiki/Psychoacoustique Psychoacoustique]
 +
<br>
 +
 
 +
==='''Inspirations/partages autour de la musique'''===
 +
[https://youtu.be/izhGLGPmvIU?t=1 Nils Frahm - Montreux Jazz Festival 2015 (Live)]
 +
<br>
 +
[https://www.youtube.com/watch?v=kFRdoYfZYUY Hania Rani – Live from Studio S2]
 +
<br>
 +
[https://www.youtube.com/watch?v=-dikWB6wm0A Brian Eno - New Space Music] (1993)
 +
<br>
 +
[https://www.youtube.com/watch?v=5gRiEKKTB90 Fern (2002) - Mileece]

Version actuelle datée du 15 octobre 2021 à 08:35

Q1 / workshop : un réseau=


1ère étape : mise en place du réseau

2ème étape : investir le réseau et les lieux qu'il contient, utiliser les avatars, déposer ça et là des fichiers, créer des liens

3ème étape : cartographier le réseau en fonction de ce qui interpelle, relever des activités, comportements ou informations. pour cette étape, je me suis intéressé à la représentation statistique ; quantité de fichiers déposés et créés, formats représentés, temporalité, ce que j'ai fait à l'aide d'un outil infographique online (piktochart) ; mais il fallait trouver des outils plus pertinents. suite à une discussion avec un ami géographe-urbaniste, j'ai découvert tulip-perspective, un software de cartographie-statistique. avec ce software, je me suis concentré sur des représentations quantitatives et sur la nature des fichiers. plusieurs graphiques ont été générés, deux on été retenus.

après quelques expérimentations

et finalement

--


quoi ?

Un site composé de plusieurs pages organisées par "niveaux". La page d'accueil est le niveau 1. Sur chaque page il y a des phrases en mouvement. Ces phrases représentent des pensées, des sensations, des idées. Les pensées vont et viennent, sortent par moments de la page. Pour se balader entre les pages, il faut cliquer sur les phrases. Cette idée vient d'une lecture récente pour l'examen du cours de littérature : L'Innommable de Samuel Beckett. Ce livre présente un narrateur dont la forme reste abstraite, et dont on ne peut cerner la nature. La seule caractéristique qu'il partage avec un être humain est une forme de conscience, remplie de pensées tantôt éparses, tantôt absurdes, tantôt insensées. Il ne sait pas ce qu'il est, si il est.

schéma de construction des pages et des déplacements

comment ?

Pour chaque niveau il y a un fichier HTML, un fichier CSS et un fichier JavaScript.
Les fichiers HTML contiennent une vingtaine de phrases, chacune contenue dans un paragraphe, lui-même contenu dans un div. Elles sont écrites à l'intérieur d'une balise a, ce qui en fait des liens cliquables.

CSS : Dimensions et couleur de fond des pages.

   height: 100%;
   width: 100%;
   margin: none;
   padding: none;
   background-color: black;



Typographie et hyperliens :
Position, typographie, taille de la typographie, désactivation de l'aspect hyperlien, transparence de la typographie pour utiliser seulement son ombre de manière floue afin de symboliser les pensées. Lorsque le curseur rencontre une phrase, celle-ci se précise. Autrement, les phrases sont floues.

   position:fixed;
   font-size: 20px;
   text-decoration: none;
   font-family: Arial, Helvetica, sans-serif;
   cursor: none;
   color: transparent;
   text-shadow: 0px 0px 5px #ffffff;



JavaScript : Un script js permet de placer les phrases "aléatoirement" dans l'espace de la fenêtre au moment de l'ouverture de la page :

   var h = $(window).height() - 50;
   var w = $(window).width() - 50;
   var nh = Math.floor(Math.random() * h);
   var nw = Math.floor(Math.random() * w);
   return [nh,nw];


puis de les déplacer, "aléatoirement" aussi :

   var newq = makeNewPosition();
   $(myclass).css({ top: newq[1], left: newq[0] });


   var newq = makeNewPosition();
   $(myclass).animate({ top: newq[1], left: newq[0] }, 25000,   function(){
     animateDiv(myclass);
   });


J'aimerais par la suite créer plus de niveaux et incorporer d'autres types de contenus (images, vidéos, sons, documents..) J'aimerais également développer les aspects visuels et les comportements des éléments.

Q2 / Corps et interface


Consigne

Toujours en relation avec la thématique "corps et numérique". Le projet de ce second quadrimestre porte sur la question de l'interface avec les machines. Il est demandé d'imaginer ou de détourner une interface humain/ordinateur.

Quoi

J'aimerais travailler sur une interface qui propose des sélections de sons/notes de musique en fonction de données météorologiques.

Variante 1/
Pour chaque lieu/région, parmi une sélection de lieux définie, et en fonction de la météo de ce lieu, une palette de sons est créée chaque jour.

Variante 2/
Un instrument muni de capteurs pouvant mesurer des données météorologiques, les enregistrer pour archives et/ou pour rejouer le temps, jouer le temps en temps réel.

Les sons varieraient en fonction de :

  • la température
  • la pression atmosphérique
  • l'humidité
  • la pluie
  • la vitesse du vent
  • la direction du vent
  • la luminosité
  • la nébulosité
  • point de rosée


Le son en théorie

Quelques caractéristiques du son en physique
  • La vitesse du son dépend de la nature, de la température et de la pression du milieu ;
  • L'humidité de l'air augmente légèrement la vitesse du son ;
  • Les conditions atmosphériques et météorologiques influent sur la propagation acoustique locale et à grande distance. Pour prévoir la propagation du son, il convient de connaître la température moyenne, mais aussi la structure thermique et l'hygrométrie (=l'humidité) de la masse d'air traversée ainsi que la direction du vent ;
  • L'humidité augmente la vitesse propre du son ;
  • La présence de gouttelettes d'eau dans l'atmosphère, comme dans les nuages et les brumes, comme celle de cristaux de glace, en cas de neige, change considérablement la propagation du son. Elle se traduit par une diminution et une dispersion de la vitesse et une atténuation d'autant plus marquée que la fréquence est basse.
Audition humaine

-> Articles détaillés :Psychoacoustique et Audition humaine
Comme pour tous les phénomènes perçus, le temps joue un rôle fondamental. Le son étant une variation de la pression, et l'information sonore une variation de cette variation, l'impression sonore dépend à plusieurs égards du temps. Le son étant aussi une onde qui se propage dans l'espace au cours du temps, il existe des relations étroites entre l'espace et le temps, tant dans l'étude du son que dans sa perception. On distingue plusieurs caractères du son :

  • la direction d'origine ;
  • l'intensité, dite aussi volume sonore ou sonie ;
  • la hauteur, qui se décompose en hauteur tonale et hauteur spectrale ;
  • le timbre, qui comprend la variation caractéristique de l'émission sonore dans le temps.

Il suffit qu'un de ces caractères varie, les autres restant inchangés, pour qu'on perçoive une différence. La répétition d'une forme dans le temps entraîne la notion de rythme. Par ailleurs, les êtres humains sont capables de distinguer et de suivre une émission sonore dotée d'une certaine continuité de caractères au milieu d'une quantité d'autres (effet cocktail party).

-> Utilisation d'un outil naturel de modulation du son comme un outil numérique

Musique et mathématiques

?

  • Quels types de sons ?
  • Comment les paramètres météorologiques et atmosphériques modifieraient-ils les sons ?
  • Rapport temps(chronologique)/temps(atmosphérique) : trois types de palettes de sons potentielles : les palettes du passé (mémoire, souvenir), les palettes de la journée courante (présent, temps réel), les palettes prédictives (avenir, prédiction).
  • Quel forme aurait le dispositif, l'interface ?


Comment

Interface

Station météorologique connectée

De prime abord, il y a deux manières de récupérer des données météorologiques : premièrement, les sites internet qui publient des données mesurées par des stations météos nationales agrégées ou amateures, deuxièmement, utiliser une station météo. Étant donné que dans le cadre du workshop on travaille sur les interfaces, la deuxième option semble être la plus pertinente.

Quelques recherches de stations météo :

Hacker/détourner une station météo

1ère piste : fréquence radio
Certaines stations météo utilisent une bande de fréquence de 433 MHz (de 868 MHz pour certaines stations) pour transmettre les données mesurées par les capteurs de la station à un appareil connecté. Connecté à un ordinateur, un Raspberry Pi doté d'un récepteur RF 433 MHz permet d'intercepter les envois de données de la station.

2ème piste : passer par le circuit intégré (ESP8266) de la partie display/récepteur de la station météo
Au cours de mes recherches sur les moyens de hacker une station météo, je suis tombé sur un article (consulté le 19.03.21) qui présente une méthode intéressante ; elle serait facile à mettre en place et permettrait de contourner des étapes complexes et chronophages. Cette méthode s'applique à une station météo précise : l'AcuRite Iris™ (5-in-1) Weather Station car elle contient le circuit intégré ESP8266, ce qui n'est apparemment pas commun pour une station météo.

Les étapes de cette méthode :

  1. souder des câbles reliant les ports 5V, GND et TXD du circuit intégré ESP8266 aux ports 5V, GND et RX d'un adaptateur USB serial
  2. régler la vitesse de transmission de données à 115200 bauds
  3. configurer la connexion WiFi du display/récepteur avec un nom de station et une clé aléatoires (pour faire des tests sans publier les données)
  4. les informations utilisées pour l'envoi des données à la station Weather Underground via la commande HTTP GET sont visibles
  5. écrire un script qui permette de parser la chaîne de caractères pour récupérer les données météorologiques sous la forme d'un identifiant et de sa valeur


La station météo en question : AcuRite Iris™ (5-in-1) Weather Station

Ce modèle permet de mesurer la température, l'humidité, la vitesse du vent, la direction du vent et la pluie.
L'avantage avec cette station est qu'elle permet les deux méthodes, puisqu'elle fonctionne aussi en 433 MHz.
NB : En Europe, il est impossible de consulter cette page et aussi de commander cet appareil via les distributeurs officiels. Ci-dessous, une capture d'écran de la page et des images de la station
Commande passée le 21.03.21 chez un distributeur non officiel via E-bay.

Quelques pistes explorées pour récupérer les données d'une station météo

Récupérer des données de stations météo en 433MHz à l'aide d'un Arduino
Hacking de domotique avec un Raspberry Pi

Jouer/programmer de la musique

Python

The Sound of Data: Using Python to transform data streams into music
Live Coding Pop Music with Python and SuperCollider
Harmonie avec Python

Librairies Python :
PyAudio

Sonic Pi
Essai
live_loop :flibble do
  2.times do
    sample :ambi_glass_hum, amp: 0.5, rate: 1, release: 15, cutoff_slide_curve: 10
  end
  4.times do
    sample :ambi_drone, amp: 0.5
    play 20
    2.times do
      sample :ambi_glass_hum, amp: 0.5, rate: 1, release: 15
      sleep 1
      synth :sound_in, sustain: 1.5
      sample :ambi_piano, rate: 0.9, attack: 3, release: 20
      sample :ambi_piano, rate: 1, attack: 1, release: 20
      sample :ambi_piano, rate: 0.2, attack: 1, release: 20
      sample :ambi_piano, rate: 0.4, attack: 3, release: 20
      sample :glitch_bass_g, rate: 0.3, cutoff: rrand(70, 130)
      sleep 4
    end
    sample :ambi_piano
    2.times do
      play choose([:D4,:A4,:G4]), amp: 0.1, attack: 1, release: 2
      sleep 0.125
    end
    2.times do
      play choose([:E4,:C4,:B4]), amp: 0.1, attack: 5, release: 2
      sleep 0.125
    end
  end
end



Docu Sonic Pi

Making Music with Code (Using Sonic Pi)
Live coding dub techno in Sonic Pi

SuperCollider

Je recherchais des tutoriels sur SuperCollider quand je suis tombé sur une annonce pour des cours de programmation musicale sur SuperCollider.
J'ai rencontré Estelle Schorpp le 8.04.21 et on a convenu de cours d'une heure et demie, une fois par semaine.

Cours du 12.04.21

Contenu du cours :
Interface, shortcuts, variables, SynthDef et attributs SynthDef, UGen, signal, générer vs contrôler le son

// Cours 0 //

// Quelques commandes utiles :
// - pour mettre à jour la fenêtre post : clique doit + clear ou Shift+Cmd+P
// - pour effectuer une action : cmd + Enter
// - pour booter le Server : Cmd + B
// - pour arrêter le son = Cmd+.
// - se documenter = cmd+D en mettant le surseur sur l'objet ou la méthode voulue
// - faire apparaître la barre de recherche : Shift Cmd D


receiver.message

3.cubed
3.cubeg //(voir les messages d'erreur)
3,cubed//(voir les messages d'erreur)


//VARIABLES LOCALES ET GLOBALES//
// variables globales a..z (sauf s) ou utiliser ~nom
x = 3.cubed
x
x + 10

~number = 3.cubed

// Variables locales doivent être déclarées//

number = 3.cubed

(
var number;
number = 3.cubed;
)



// commentaire sur une ligne
/* commentaire entourant un texte*/
// Shift+Cmd+/


// MAINTENANT ON FAIT DU SON//

Server.local.boot
s.boot
Server.killAll

//Fonction dans laquelle on met un UGen et à laquelle on applique la méthode play//
{}
{SinOsc.ar}.play; //un synth se stocke sur le serveur

///!\ cmd+period pour arrêter le son

x = {SinOsc.ar}.play;
x.free

//UGens//--> Tour of UGens dans la documentation

message .ar (audio rate) et kr. (control rate)


//SinOsc a 4 arguments : freq , phase, mul et add

//freq = fréquence. L'oreille humaine perçoit de 20 Hz à 20000 Hz. Pour le soin de nos oreilles, nous utiliseront des valeurs de fréquence entre 50 et 1000
//mul = amplitude. Dans SuperCollider, l'amplitude est comprise entre 0(on nentend rien) et 1 (amplitude max)

x = {SinOsc.ar(700, mul:0.1)}.play;
x.free

(
y = {
	arg freq=220, width=0.25, amp=0.1;
	var sig;
	sig = Pulse.ar(freq, width, amp);
}.play;
)

y.set(\freq,500, \amp, 0.1);
y.free

//SynthDef// (sorte de récipient à Synth) voir documentation de Function dans la section audio "Function.play is often more convenient than SynthDef.play, particularly for short examples and quick testing. The latter does have some additional options, such as lagtimes for controls, etc. Where reuse and maximum flexibility are of greater importance, SynthDef and its various methods are usually the better choice."

// Le SynthDef \carree, version initiale

(
SynthDef.new(\carree,{
	arg freq=220, width=0.25, amp=0.1;
	var sig;
	sig = Pulse.ar(freq, width, amp);
	Out.ar(0, sig);
}).add;
)

x = Synth.new(\carree, [\freq,500, \width, 0.5])
x.set(\width, 0.25)
x.free

// Le SynthDef \carree, Ajout de plusieurs arguments et du générateur Pan2.

(
SynthDef.new(\carree,{
	arg freq=220, width=0.25, amp=0.1, pos=0;
	var sig;
	sig = Pulse.ar(freq, width, amp);
	sig = Pan2.ar(sig, pos);
	Out.ar(0, sig);
}).add;
)
(
x = Synth.new(\carree, [
	\freq,500,
	\width, 0.5,
	\amp, 0.2;
	\pos, 0

])
)
x.free


// Le SynthDef \carree, Version avec MouseX et MouseY

(
SynthDef.new(\carree,{
	arg freq=220, width=0.25, amp=0.1, pos=0;
	var sig;
	sig = Pulse.ar(// La fréquence oscille autour d'un équilibre déterminé par la position de la souris.
		MouseX.kr(200, 800), MouseY.kr(0.1, 0.5), amp);
	// L'utilisation de kr permet d'économiser de la puissance de calcul.
	sig = Pan2.ar(sig, pos);
	Out.ar(0, sig);
}).add;
)

x = Synth(\carree)
x.free

// Le SynthDef \carree.  Utilisation de la fonction exprange pour la modulation.
// La souris contrôle le panoramique.
(
SynthDef(\carree,{
	arg freq=220, width=0.5, amp=0.1, vibFreq=2;
	var signal;
	signal = Pulse.ar(
		// Ici, on oscille de +/- 1/2 ton autour de la fréquence freq.
		SinOsc.kr(vibFreq).exprange(freq * -1.midiratio, freq * 1.midiratio),
		width,
		amp
	);
	signal = Pan2.ar(signal, MouseX.kr(-1,1));
	Out.ar(0, signal);
}).add;
)

(
x = Synth(\carree, [
	\freq, 350,
	\width, 0.2,
	\amp, 0.05,
	\pos, 0,
	\vibFreq, 1,
]);
)
x.free
Cours du 19.04.21

Contenu du cous :
Enveloppes, UGens, doneAction, range

Server.default.options.sampleRate = 44100;

s.boot
s.quit

//ENVELOPPES
//UGen Line pour contrôler l'amplitude

//doneAction:0
s.plotTree

(
x = {
	var sig, env;
	env = Line.kr;
	sig = Saw.ar(ExpRand(100, 800)) * env;
}.play
)

x.free

//doneAction:2

(
x = {
	var sig, env;
	env = Line.kr(0, 0.5, 5, doneAction:0);
	sig = Saw.ar(ExpRand(100, 800)) * env;
}.play
)

x.free

//UGen XLine
//XLine pour contrôler l'amplitude

(
x = {
	var sig, env;
	env = XLine.kr(0.01, 0.5, 5, doneAction:2);
	sig = Saw.ar(ExpRand(100, 800)) * env;
}.play
)
x.free

//XLine pour contrôler la fréquence

(
x = {
	var sig, envAmp, envFreq;
	envAmp = XLine.kr(0.01, 0.5, 5, doneAction:2);
	envFreq = XLine.kr(1000, 100, 5, doneAction:2);
	sig = Saw.ar(envFreq) * envAmp;
}.play
)
x.free

(
x = {
	var sig, envAmp, envFreq;
	envAmp = XLine.kr(0.01, 0.5, 5, doneAction:2);
	envFreq = XLine.kr(1000, 100, 2, doneAction:0);
	sig = Saw.ar(envFreq) * envAmp;
}.play
)
x.free

//EnvGen

Env.new.plot

Env.new([0, 1, 0.3, 0], [0.5, 1, 3]).plot

Env.new([1, 0.6, 0.9, 1], [1, 2, 3]).plot

Env.new([0.01, 1, 0.01], [0.5, 3], [-1, 1]).plot

(
x = {
	var sig, envAmp, envFreq;
	envAmp = EnvGen.kr(Env.new(
		[0.01, 1, 0.01],
		[0.5, 2],
		\exp));
	envFreq = XLine.kr(1000, 100, 2, doneAction:2);
	sig = Saw.ar(envFreq) * envAmp;
}.play
)
x.free

(
x = {
	var sig, envAmp, envFreq;
	envAmp = EnvGen.kr(Env.new(
		[0.01, 1, 0.01],
		[0.5, 2],
		\exp));
	envFreq = XLine.kr(1000, 100, 2, doneAction:2);
	sig = Saw.ar(envFreq) * envAmp;
}.play
)
À faire pour le 26.04.21


Docu SuperCollider


Live-Coding – programming masterly music | Juan Romero & Patrick Borgeat | TEDxKIT
Meet the Sonic Artist Making Music with Plants: Sound Builders

Interprétation des données en musique

1ère piste : Utiliser des gammes de musiques dont les notes varieraient en fonction des données météo selon la relation réelle qu'entretiennent les sons et les impacts des phénomènes physiques sur les sons.

La température et l'humidité pour influencer la fréquence des sons :
La vitesse du son augmente légèrement lorsque l’air contient de la vapeur d’eau. La seule façon de modifier la vitesse du son et de changer de milieu de propagation ou de changer les propriétés du milieu dans lequel l'onde se propage. Donc pour modifier la vitesse de propagation du son dans l'air, on peut modifier la température de l'air et/ou son humidité.
> disposer l’émetteur de la station dans l'eau ferait exploser les mesures d'humidité

La tonalité
Checker quarts de ton et voix
Demander référence musique à Alice
2ème piste : blablabla

Coder de la musique avec python

The Sound of Data: Using Python to transform data streams into music
Live Coding Pop Music with Python and SuperCollider
Making Music with Code (Using Sonic Pi)
Live coding dub techno in Sonic Pi

Documentation

Observer le temps : température, vent, humidité, pression
La météo et le climat dans la musique
Infoclimat : données météo de nombreux pays en temps réel
Le son en physique
L'audition humaine
Acoustique
Psychoacoustique

Inspirations/partages autour de la musique

Nils Frahm - Montreux Jazz Festival 2015 (Live)
Hania Rani – Live from Studio S2
Brian Eno - New Space Music (1993)
Fern (2002) - Mileece