Utilisateur:Mondher : Différence entre versions
(→Q2 / Corps et interface) |
(→Inspirations et/ou partages autour de la musique) |
||
(201 révisions intermédiaires par le même utilisateur non affichées) | |||
Ligne 135 : | Ligne 135 : | ||
== '''Q2 / Corps et interface''' == | == '''Q2 / Corps et interface''' == | ||
<br> | <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. | 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> | ||
<br> | <br> | ||
− | ''' | + | |
− | + | ==='''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. | 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> | ||
Ligne 167 : | Ligne 164 : | ||
* point de rosée | * point de rosée | ||
<br> | <br> | ||
− | ''' | + | |
− | + | ==='''Le son en théorie'''=== | |
− | + | ====='''[https://fr.wikipedia.org/wiki/Son_(physique) Quelques caractéristiques du son en physique]'''===== | |
− | '''[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 ; | * 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 ; | * L'humidité de l'air augmente légèrement la vitesse du son ; | ||
Ligne 177 : | Ligne 172 : | ||
* L'humidité augmente la vitesse propre du son ; | * 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. | * 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. | ||
− | + | ||
− | '''[https://fr.wikipedia.org/wiki/Son_(physique) Audition humaine] | + | ====='''[https://fr.wikipedia.org/wiki/Son_(physique) Audition humaine]'''===== |
− | + | -> Articles détaillés :'''[https://fr.wikipedia.org/wiki/Psychoacoustique Psychoacoustique] et [https://fr.wikipedia.org/wiki/Audition_humaine Audition humaine]''' | |
− | -> 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 : | 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 : | ||
Ligne 193 : | Ligne 186 : | ||
<br> | <br> | ||
-> Utilisation d'un outil naturel de modulation du son comme un outil numérique | -> 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> | <br> | ||
Ligne 202 : | Ligne 198 : | ||
* Quel forme aurait le dispositif, l'interface ? | * Quel forme aurait le dispositif, l'interface ? | ||
<br> | <br> | ||
− | ''' | + | <gallery> |
+ | Mndr-notes-musique-frequences.png|Fréquences des notes en Hz dans la gamme tempérée | ||
+ | </gallery> | ||
+ | |||
+ | ==='''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. | ||
+ | <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> | ||
+ | |||
+ | ====='''Hacker/détourner une station météo'''===== | ||
+ | '''1<sup>ère</sup> piste : fréquence radio''' | ||
<br> | <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> | ||
+ | |||
+ | ====='''[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]'''===== | ||
+ | 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> | ||
+ | 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> | ||
+ | |||
+ | ====='''Quelques pistes explorées pour récupérer les données d'une station météo'''===== | ||
+ | [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] | ||
+ | <br> | ||
+ | [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] | [https://www.youtube.com/watch?v=vb9c_WFMYeI The Sound of Data: Using Python to transform data streams into music] | ||
<br> | <br> | ||
[https://www.youtube.com/watch?v=xXNB1BbKY8A Live Coding Pop Music with Python and SuperCollider] | [https://www.youtube.com/watch?v=xXNB1BbKY8A Live Coding Pop Music with Python and SuperCollider] | ||
<br> | <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] | ||
+ | |||
+ | ====='''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)] | [https://www.youtube.com/watch?v=QGLPinGZhfg Making Music with Code (Using Sonic Pi)] | ||
<br> | <br> | ||
[https://www.youtube.com/watch?v=a1RxpJkvqpY Live coding dub techno in Sonic Pi] | [https://www.youtube.com/watch?v=a1RxpJkvqpY Live coding dub techno in Sonic Pi] | ||
<br> | <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> | <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> | <br> | ||
+ | ======'''Cours du 12.04.21'''====== | ||
+ | Contenu du cours : | ||
<br> | <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." | ||
+ | |||
+ | // 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 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ======'''Cours du 19.04.21'''====== | ||
+ | Contenu du cous : | ||
<br> | <br> | ||
+ | Enveloppes, UGens, doneAction, range | ||
<br> | <br> | ||
− | '''< | + | <syntaxhighlight lang="python"> |
+ | 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 | ||
+ | ) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ======'''À faire pour le 26.04.21'''====== | ||
+ | <gallery> | ||
+ | Mndr supercollider devoir-0.png|Devoir 0 | ||
+ | </gallery> | ||
<br> | <br> | ||
+ | ======'''Docu SuperCollider'''====== | ||
<br> | <br> | ||
− | + | [https://www.youtube.com/watch?v=Ix2b_qFYfAA Live-Coding – programming masterly music | Juan Romero & Patrick Borgeat | TEDxKIT] | |
<br> | <br> | ||
− | + | [https://www.youtube.com/watch?v=wYU18eiiFt4 Meet the Sonic Artist Making Music with Plants: Sound Builders] | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<br> | <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> | ||
− | |||
<br> | <br> | ||
+ | La température et l'humidité pour influencer la fréquence des sons : | ||
<br> | <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> | <br> | ||
− | + | > disposer l’émetteur de la station dans l'eau ferait exploser les mesures d'humidité | |
− | |||
<br> | <br> | ||
<br> | <br> | ||
− | + | La tonalité | |
<br> | <br> | ||
+ | Checker quarts de ton et voix | ||
<br> | <br> | ||
− | + | Demander référence musique à Alice | |
<br> | <br> | ||
+ | 2<sup>ème</sup> piste : | ||
+ | blablabla | ||
<br> | <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> | <br> | ||
+ | [https://www.youtube.com/watch?v=QGLPinGZhfg Making Music with Code (Using Sonic Pi)] | ||
<br> | <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] | [http://www.meteofrance.fr/prevoir-le-temps/observer-le-temps/parametres-observes Observer le temps : température, vent, humidité, pression] | ||
<br> | <br> | ||
Ligne 272 : | Ligne 669 : | ||
[https://fr.wikipedia.org/wiki/Psychoacoustique Psychoacoustique] | [https://fr.wikipedia.org/wiki/Psychoacoustique Psychoacoustique] | ||
<br> | <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
Sommaire
- 1 Q1 / workshop : un réseau=
- 2 --
- 3 Q2 / Corps et interface
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 :
- 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 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
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