| |
|
|
| |
--( KODE )--
JSYN must be installed. [Install]
The project is 2500kb to Download
DownLoad PreRecorded sample (GlitchMaster00b.mp3) (14 min. - 16487kb) |
Built with
--( P55 )--
install --( java )--
goo.x@gmx.ch
//www.vif.com/users/goo
Délicate
Sound of ThermoPompe
Phil
s'était encore endormi. Il pouvait s'endormir n'importe où, à
n'importe quel moment, cette fois-ci, c'était le futon du sous-sol
de ma mère. Il n'était pourtant pas tard et il ronflait. On se
demandais si s'était parce qu'il avait pris trop de mess quand
il était petit, mais il faut dire que nous étions à près d'une
heure du centre-ville et que chaque soirée renferme une limite
implicite qui faisait que l'on restait souvent à ne rien faire.
Mais pas cette fois-ci. Nous devions enregistrer un album, mais
notre death métal était coloré par le chaleureux déclin de bois
qui ornait les murs et les tapis de la maison. On entendait même
les casseroles pourtant savamment alignées tinter à chacun des
coups de bass drum. Nous réclamions la rue, indécemment large,
sur laquelle aurait pu se poser un avion, cette rue qui pourtant
faisait fuir tous les regards considérés déjà comme trop intrusifs.
Nous souhaitions en fait probablement un peu plus de fortuit,
n'importe quoi d'autre que ces abris cordés.
Nous
sortîmes les amplis et notre kit pour faire les enregistrements
sans trop savoir. Nous êumes l'idée de squatter la prise de courant
du dépanneur de quartier et de tout remonter là, dans le stationnement
de la station service. C'était ce genre de prise de courant que
l'on ne remarque absolument pas qui devait probablement servir
à l'entretient, une fois par année, ou à tondre le gazon, bien
rare dans cette station de gaz de banlieue. Je n'ai plus souvenir
exact de ce que nous avons joué, mais ça devenais quelque chose
de secondaire tant nous étions inspirés par la richesse du paysage
ordinaire qui se révélait à la première écoute. Et puis cet enregistrement
est toujours resté, nous empêchant même de refaire quoique ce
soit d'autre. Je pense vraiment que nous sommes tous passés à
autre chose à partir de ce moment et ce fut la source de ce qui
allait devenir un projet de trois ans d'enregistrements d'ambiances
sonores au travers des lieux publiques de Québec et de sa banlieue. |
|
public class Glitch01b extends BApplet {
Sample son;
Agent[] groupA, groupB, drum;
///////////////////////////////////////////
///////////////////////////////////////////
//--( SetUp )--
///////////////////////////////////////////
void setup(){
size(800,100);
Sonia.start(this);
//smooth();
noStroke();
ellipseMode(CENTER_DIAMETER);
initDrum();
reset();
}
///////////////////////////////////////////
///////////////////////////////////////////
//--( Reset )-- Init Agents
///////////////////////////////////////////
void reset() {
//int a = 10;
//int b = 20;
int a = (int)random(20);
int b = (int)random(20);
groupA = new Agent[a];
groupB = new Agent[b];
for (int i = 0; i<groupA.length; i++) groupA[i] = new Agent("GlitchAll.wav");
for (int i = 0; i<groupB.length; i++) groupB[i] = new Agent("00BranNew.wav");
}
void initDrum(){
drum = new Agent[1];
drum[0] = new Agent("OLTA0.wav");
drum[0].countMax=loopMax/((int)pow(2,6));
drum[0].son.setRate(24100);
}
void drawDrum(){
fill(0);
drum[0].startFrame=0;
drum[0].endFrame=drum[0].son.getNumFrames();
drum[0].draw();
}
///////////////////////////////////////////
///////////////////////////////////////////
//--( Loop )--
///////////////////////////////////////////
void loop() {
background(255);
fill(245);
for(int i=0;i<groupA.length;i++) groupA[i].draw();
fill(245,0,0,20);
for(int i=0;i<groupB.length;i++) groupB[i].draw();
drawDrum();
//If clicked, change the pattern
if(mousePressed) reset();
}
///////////////////////////////////////////
///////////////////////////////////////////
//--( Agent )--
///////////////////////////////////////////
int cf=1000; //Abstract coeff
int bsz=50; //Size of the object representation
int loopMax=3000; //Maximum of frame per cycles
int gID=0; //ID counter
int inc=200; //The number of frame used in moovSample()
// bigger will change the sound rapidly.
class Agent{
Sample son; //The sound of the Agent
int ID; //ID - Singular name
int count,countMax=0; //The pulse delay
int x,y; //The position in 2D of the Agent
int startFrame, endFrame; //The part of the sound played
Agent(String son){
this.son=new Sample(son);
ID = gID++;
randomize();
}
//--( RANDOM ASSIGN )--
void randomize(){
x=(int)random(width); //Random position
y=(int)random(height);
int level=(int)random(6)+1; //Level is the recursivity on 4/4 mesures divisions
countMax=loopMax/((int)pow(2,level)); //LoopMax is the maximum of cycles and countMax is
// singular to the agent (a division according to 4/4 measures)
count=(int)random(countMax); //start the count at random position (better repartitions)
son.setVolume(0.5f); //Set the volume (many sound are playing at the same time)
//son.setRate(44100); //SetRate
son.setRate(176400/((int)pow(2,random(3)+2)));
son.setPan((x-width/2f)/(float)width);
int maxFrame = son.getNumFrames();
startFrame = (int)random(maxFrame*0.75f);
do{
endFrame = (int)random(maxFrame-startFrame)+startFrame;
}while((endFrame-startFrame)<100||(endFrame-startFrame)>5000);
}
void update(){
if(count++>countMax) {
count=0;
play();
moovSample();
}
}
//Increment or decrement the sample boundary randomly
//Make test to keep coherent sample
void moovSample(){
int maxFrame = son.getNumFrames();
if(random(100)>50) startFrame+=inc; else startFrame-=inc;
if(startFrame<0) startFrame=0;
else if(startFrame>=endFrame) startFrame=endFrame-2;
if(random(100)>50) endFrame+=inc; else endFrame-=inc;
if(endFrame<=startFrame) endFrame=startFrame+2;
else if(endFrame>maxFrame) startFrame=maxFrame-2;
}
//Play the part of the sound when is not playing
void play(){
if(!son.isPlaying()) son.play(startFrame,endFrame);
//debug();
}
//Draw the agent (here is an ellipse for the sequence.
void draw(){
update();
float esz=((countMax-count)/(float)countMax)*bsz;
ellipse(x,y,esz,esz);
}
//Text based infos on the each agent.
void debug(){
print("["+ID+"]");
print("\t[PAN]:"+son.getPan());
print("\t[RATE]:"+son.getRate());
print("\t[LENGTH]:"+(endFrame-startFrame));
print("\t[POS]X:"+x+" Y:"+y);
println();
}
}
///////////////////////////////////////////
///////////////////////////////////////////
//Sonia things that I don't really understand(?)
///////////////////////////////////////////
public void stop(){
Sonia.stop();
super.stop();
}
}
|
|