Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// partage de liens //// une carte des membres//// (apéros) codelab


#1 2018-01-03 22:04:16 Son + figure

cartide22
membre
Date d'inscription: 2017-12-06
Messages: 20

Son + figure



Bonjour,
Je recherche une astuce pour placer des sons sur l'espace de travail.
Quand j'appuie sur une lettre de mon clavier le son se place et c'est au moment où j'appuie sur entrée que je peux lire les sons.
Comment je peux faire ?

J'ai commencé a faire un code lors de l'appuie des touche mais pas moyen d'arriver à actionner à l'appuie de entrer.

Merci beaucoup pour votre aide

import processing.sound.*;

AudioDevice device;
SoundFile[] file;

// Define the number of samples 
int numsounds = 5;

int value[] = {0,0,0};

void setup(){
  size(640, 360);
  background(255);
  
 
  device = new AudioDevice(this, 48000, 32);
  file = new SoundFile[numsounds];
  
 
  for (int i = 0; i < numsounds; i++){
    file[i] = new SoundFile(this, (i+1) + ".aif");
  }
  
}

void draw(){

    background(value[0],value[1],value[2]);

}



void keyPressed() {
  for (int i=0; i < 3; i++) {  
      value[i]=int(random(255));
  }
 
  switch(key){
  case 'a':
    file[0].play(0.5, 1.0);
    break;

  case 's':
    file[1].play(0.5, 1.0);
    break;
  
  case 'd':
    file[2].play(0.5, 1.0);
    break;
  
  }
}

Hors ligne

 

#2 2018-01-04 08:46:31 Re : Son + figure

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 784

Re: Son + figure



Bonjour,

Les explications de ce que tu souhaites faire ne sont pas très claires.Néanmoins, je crois avoir compris ce que tu souhaites :

import processing.sound.*;

AudioDevice device;
SoundFile[] file;
SoundFile sonAJouer;

int value[] = {0, 0, 0};
int numsounds = 5;

void setup() {
  size(640, 360);
  background(255);
  device = new AudioDevice(this, 48000, 32);
  file = new SoundFile[numsounds];
  for (int i = 0; i < numsounds; i++) {
    file[i] = new SoundFile(this, (i+1) + ".aif");
  }
}

void draw() {
  background(value[0], value[1], value[2]);
}

void keyPressed() {
  for (int i = 0; i < 3; i++) {  
    value[i]=int(random(255));
  }
  switch(key) {
  case 'a':
    sonAJouer = file[0];
    break;

  case 's':
    sonAJouer = file[1];
    break;

  case 'd':
    sonAJouer = file[2];
    break;
  }
  if (keyCode == ENTER) {
    if (sonAJouer != null) {
      sonAJouer.play(0.5, 1.0);
    }
  }
}

Hors ligne

 

#3 2018-01-04 18:52:05 Re : Son + figure

cartide22
membre
Date d'inscription: 2017-12-06
Messages: 20

Re: Son + figure



super merci c'est ce que je voulais, j'ai put comprendre le fonctionnement merci !
maintenant j'essaye de faire une lecture avec une ligne.
C'est à dire : quand la ligne passe sur un objet elle lit le son de l'objet.
je rajoute juste ça au code déjà installé.

Pour dessiner la ligne j'ai rajouté line() mais elle apparait et disparait, et j'ai essayé de lui donné du mouvement mais compliqué elle ne le prend pas en compte...
et je ne vois pas comment lui dire dans la fonction sonAjouer de lire juste les éléments que touche la barre ..

import processing.sound.*;

AudioDevice device;
SoundFile[] file;
SoundFile sonAJouer;

int value[] = {0, 0, 0};
int numsounds = 5;

int deplacementX;
int x;

void setup() {
  size(640, 360);
  background(255);
  device = new AudioDevice(this, 48000, 32);
  file = new SoundFile[numsounds];
  for (int i = 0; i < numsounds; i++) {
    file[i] = new SoundFile(this, (i+1) + ".aif");
  }

 x = 95;
   deplacementX = 0;

}

void draw() {
  background(value[0], value[1], value[2]);
}

void keyPressed() {
  for (int i = 0; i < 3; i++) {  
    value[i]=int(random(255));
  }
  switch(key) {
  case 'a':
  triangle(random(0, 400), random(0, 400), random(0, 400), random(0, 400), random(0, 400), random(0, 400));
    sonAJouer = file[0];
    break;

  case 's':
line(random(10, 500), random(210, 500), random(120, 500), random(120, 500));
    sonAJouer = file[1];
    break;

  case 'd':
 rect(random(0, 400), random(0, 400),random(0, 50),random(0, 50));
    sonAJouer = file[2];
    break;
  }
  if (keyCode == ENTER) {
line(120,120,40,120); 
      x = x + deplacementX;
    if (sonAJouer != null) {
      sonAJouer.play(0.5, 1.0);
    }
  }
}

merci beaucoup pour votre aide smile

Hors ligne

 

#4 2018-01-05 12:21:16 Re : Son + figure

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 784

Re: Son + figure



Bonjour,

Il faut revenir au bases. Pour déplacer une ligne, il faut une position et une vitesse et qu'à chaque tour, il faut redessiner la scène entièrement. A chaque tour tu incrémentes la position par la vitesse.
Ensuite, pour simplifier au lieu de faire une détection de couleur, en admettant que tu connaisses la position des dessins, tu joues un son quand la variable de position atteint la valeur de la position du dessin.
Avec l'affichage, on croit que quand la ligne touche l'objet alors le son est joué.

import processing.sound.*;

AudioDevice device;
SoundFile[] file;

int numsounds = 5;
int[] position;
int vitesseY;
int y;

void setup() {
  size(800, 600);
  background(255);
  device = new AudioDevice(this, 48000, 32);
  file = new SoundFile[numsounds];
  for (int i = 0; i < numsounds; i++) {
    file[i] = new SoundFile(this, (i+1) + ".aif");
  }
  position = new int[numsounds];
  for (int i = 0; i < numsounds; i++) {
    position[i] = int((height / numsounds)  * (0.5 + i));
  }
  y = 0;
  vitesseY = 1;
}

void draw() {
  background(255);
  y += + vitesseY;
  if (y >= height) {
    y = 0;
  }
  stroke(0);
  line(0, y, width, y);
  fill(255, 0, 0);
  noStroke();
  for (int i = 0; i < numsounds; i++) {
    ellipse(20, position[i], 5, 5);
  }
  for (int i = 0; i < numsounds; i++) {
    if (y == position[i]) {
      file[i].play();
    }
  }
}

Hors ligne

 

#5 2018-01-06 23:30:33 Re : Son + figure

cartide22
membre
Date d'inscription: 2017-12-06
Messages: 20

Re: Son + figure



Bonjour,

D'accord merci,
Est'il aussi possible de remplacer les points rouges par les dessins fait avec keypressed ?
comme par exemple avec ArrayList ?
lire le son du rectangle c et lire le son de la ligne T quand la barre passe dessus ?

j'ai fait ça en mélangeant un peu ce que je sais mais je bug sur la lecture et le déplacement ...

Merci beaucoup

ArrayList<Forme> formes;

import processing.sound.*;

AudioDevice device;
SoundFile[] file;
SoundFile sonAJouer;

int numsounds = 5;
int[] position;
int vitesseY;
int y;

void setup() {
  size(800, 600);
  background(255);
  formes = new ArrayList<Forme>();
  device = new AudioDevice(this, 48000, 32);
  file = new SoundFile[numsounds];
  for (int i = 0; i < numsounds; i++) {
    file[i] = new SoundFile(this, (i+1) + ".aif");
  }
  position = new int[numsounds];
  for (int i = 0; i < numsounds; i++) {
    position[i] = int((height / numsounds)  * (0.5 + i));
  }
  y = 0;
  vitesseY = 1;
}

void draw() {
  background(255);
  y += + vitesseY;
  if (y >= height) {
    y = 0;
  }
  for (Forme f : formes) {
    f.affichage();
  }
  }
void keyPressed() {
   if ((key == 't') || (key == 'H')) {
     formes.add(new Ligne());
     sonAJouer = file[0];
    }
   if ((key == 'c') || (key == 'G')) {
             
              sonAJouer = file[1];
        }
  
  if (keyCode == ENTER) {
    stroke(0);
  line(0, 0, 0, width);
 
 
  if (sonAJouer != null) {
      sonAJouer.play(0.5, 1.0);
      (y == position[i])
  }

  }

}

Hors ligne

 

#6 2018-01-07 10:43:57 Re : Son + figure

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 784

Re: Son + figure



Bonjour,

Le mieux est d'attribuer un son à chaque entité directement dans la classe pour alléger le code principal. Voici un exemple de ce que l'on peut faire :

import processing.sound.*;

SoundFile[] file;

ArrayList<Dessin> dessins;
int numsounds = 5;
int vitesseY;
int y;

void setup() {
  size(800, 600);
  background(255);
  dessins = new ArrayList<Dessin>();
  y = 0;
  vitesseY = 1;
}

void draw() {
  background(255);
  y += vitesseY;
  if (y >= height) {
    y = 0;
  }
  stroke(0);
  line(0, y, width, y);
  for (Dessin f : dessins) {
    f.afficher();
    if (y == f.position.y) {
      f.jouer();
    }
  }
}

void keyPressed() {
  dessins.add(new Dessin(this, numsounds));
}

class Dessin {
  PVector position;
  SoundFile son;

  Dessin(PApplet parent, int nombre) {
    position = new PVector((int)random(0, width), (int)random(0, height));
    String fichierSon = int(random(1, nombre + 1)) + ".aif";
    son = new SoundFile(parent, fichierSon);
  }

  void afficher() {
    noStroke();
    fill(255, 0, 0);
    ellipse(position.x, position.y, 5, 5);
  }

  void jouer() {
    son.play();
  }
}

Dernière modification par Mushussu (2018-01-07 11:24:44)

Hors ligne

 

#7 2018-01-09 22:33:40 Re : Son + figure

cartide22
membre
Date d'inscription: 2017-12-06
Messages: 20

Re: Son + figure



Bonsoir,

oh super merci c'est ça que je veux faire !
mais maintenant j'essaye de le faire fonctionner avec l'autre topic que j'ai publié : http://codelab.fr/6935

Quand je mets numsounds avec la suite de dessin en cours cela ne veut pas marcher car c'est une variable parmi des Pvector ce qui est logique mais je ne vois pas comment je pourrais faire en sorte de trouver une autre manière ..
j'ai essayé de l'affilier avec dessinEnCours ou en mettant la variable dans setup ...

voici le debut du code par rapport à l'autre publication sur le forum
Savez vous comment je pourrais faire ?

merci pour votre aide, cela me permet de comprendre et d'essayer merci encore.

ArrayList<Dessin> dessins;
Dessin dessinEnCours;
PVector dimensionDessin, positionDessin, int;

///////
import processing.sound.*;
SoundFile[] file;
int numsounds = 5;
int vitesseY;
int y;
////////

void setup() {
  size(1000, 800);
  dimensionDessin = new PVector(200, 200);
  positionDessin = new PVector(0, 0);
  numsounds = 5;
  dessins = new ArrayList<Dessin>();
  dessinEnCours = new Dessin(positionDessin, dimensionDessin, numsounds);
  dessins.add(dessinEnCours);

////////
   y = 0;
  vitesseY = 1;
//////// 

}

void draw() {
  background(255);
  createGrid();
  for (Dessin d : dessins) {
    d.affichage();
   // d.bouger();
  }
  
///////////
  y += vitesseY;
  if (y >= height) {
    y = 0;
  }
  stroke(0);
  line(0, y, width, y);
  for (Dessin f : dessins) {
    f.afficher();
    if (y == f.position.y) {
      f.jouer();
////////////      
    }
  }
}

void keyPressed() {
//LETTRES//
  if ((key == 'h') || (key == 'H')) {
    dessinEnCours.ajoute(new Ligne(dessinEnCours.extremite, dimensionDessin, numsounds));
 
  }
  if ((key == 'g') || (key == 'G')) {
    dessinEnCours.ajoute(new Ligne(dessinEnCours.extremite, dimensionDessin));

Hors ligne

 

#8 2018-01-13 18:32:19 Re : Son + figure

cartide22
membre
Date d'inscription: 2017-12-06
Messages: 20

Re: Son + figure



Je crois être proche du but mais il me dit : expecting TRIPLE_DOT,found')'
ca veut dire quoi ?

j'ai fait comme ca pour la class dessin

merci pour votre aide, c'est ma dernière ligne droite

class Dessin {
  ArrayList<Forme> formes;
  PVector extremite, position, vitesse;
  float vitesseAnglulaire;
  SoundFile son;

  Dessin(PVector pos, PVector dim, PApplet parent, numsounds) {
     formes = new ArrayList<Forme>();
     position = new PVector(pos.x, pos.y);
     vitesse = new PVector(50, 50);
     extremite = new PVector(random(dim.x), random(dim.y));
     vitesseAnglulaire = 10;
     String fichierSon = int(random(1, 5 + 1)) + ".aif";
     son = new SoundFile(parent, fichierSon); 
  }

voici le code en entier :

ArrayList<Dessin> dessins;
Dessin dessinEnCours;
PVector dimensionDessin, positionDessin;

///////
import processing.sound.*;
SoundFile[] file;
int numsounds = 5;
int vitesseY;
int y;
////////

void setup() {
  size(1000, 800);
  dimensionDessin = new PVector(200, 200);
  positionDessin = new PVector(0, 0);
  numsounds = 5;
  dessins = new ArrayList<Dessin>();
  dessinEnCours = new Dessin(positionDessin, dimensionDessin);
  dessins.add(dessinEnCours);

////////
   y = 0;
  vitesseY = 1;
//////// 

}

void draw() {
  background(255);
  createGrid();
  for (Dessin d : dessins) {
    d.affichage();
   // d.bouger();
  }
  
///////////
  y += vitesseY;
  if (y >= height) {
    y = 0;
  }
  stroke(255);
  line(y, 0, y, width);
  for (Dessin f : dessins) {
    f.afficher();
    if (y == f.position.y) {
      f.jouer();
////////////      
    }
  }
}

void keyPressed() {
//LETTRES//
  if ((key == 'h') || (key == 'H')) {
    dessinEnCours.ajoute(new Ligne(dessinEnCours.extremite, dimensionDessin, this, numsounds));
 
  }
class Ligne extends Forme {
  Ligne(PVector ext, PVector d) {
    super(ext, d);
  }

  void affichage() {
    stroke(255);
    pushMatrix();
    line(pointA.x, pointA.y, pointB.x, pointB.y);
    popMatrix();
  }
}

class Ligne2 extends Forme {
  Ligne2(PVector ext, PVector d) {
    super(ext, d);
  }

  void affichage() {
    stroke(255);
    pushMatrix();
    line(pointA.y, pointA.y, pointB.y, pointB.y);
    popMatrix();
  }
}

class ArcDeCercle extends Forme {
  int hauteur, sens;
  float largeur, angle;

  ArcDeCercle(PVector ext, PVector d) {
    super(ext, d);
    hauteur = floor(random(10, 500));
    sens = floor(random(0, 2));
    largeur = PVector.sub(pointB, pointA).mag();
    angle = PVector.sub(pointB, pointA).heading();
  }

  void affichage() {
    stroke(255);
    pushMatrix();
    translate(pointA.x, pointA.y);
    rotate(angle);
    arc(largeur / 2, 0, largeur, hauteur, 0 + sens * PI, PI + sens * PI);
    popMatrix();
  }
}

class Ellipse extends Forme {
  int hauteur, sens;
  float largeur, angle;

  Ellipse(PVector ext, PVector d) {
    super(ext, d);
   
  }

  void affichage() {
    stroke(155);
    pushMatrix();
    translate(pointA.x, pointA.y);
    rotate(angle);
    ellipse(pointA.x, pointA.x, pointB.x, pointB.x);
    popMatrix();
  }
}


class Rectangle extends Forme {
  Rectangle(PVector ext, PVector d) {
     super(ext, d);
  }

  void affichage() {
    stroke(255);
    noFill();
    pushMatrix();
    rect(pointA.x, pointA.y, pointB.x, pointB.y);
    popMatrix();
  }
}

class Dessin {
  ArrayList<Forme> formes;
  PVector extremite, position, vitesse;
  float vitesseAnglulaire;
  SoundFile son;

  Dessin(PVector pos, PVector dim, PApplet parent, numsounds) {
     formes = new ArrayList<Forme>();
     position = new PVector(pos.x, pos.y);
     vitesse = new PVector(50, 50);
     extremite = new PVector(random(dim.x), random(dim.y));
     vitesseAnglulaire = 10;
     String fichierSon = int(random(1, 5 + 1)) + ".aif";
     son = new SoundFile(parent, fichierSon); 
  }
  
  void ajoute(Forme f) {
    formes.add(f);
    extremite = f.pointB;
  }
  
void exploser() {
    vitesse.set(random(-40, 5), random(-2, 2));
    vitesseAnglulaire = random(-9, 5);
  }
  
  void bouger() {
    position.add(vitesse);
    vitesse.mult(0.5);
  }
   void jouer() {
 son.play();
  }
  

  
  void affichage() {
    pushMatrix();
    translate(position.x, position.y);
    noFill();
    stroke(0);
    for (Forme f : formes) {
      f.affichage();
    }
    popMatrix();
  }
}

class Forme {
  PVector pointA, pointB;

  Forme(PVector v, PVector dim) {
    pointA = new PVector(v.x, v.y);
    pointB = new PVector(random(dim.x), random(dim.y));
  }

  void affichage() {
  }
}

Hors ligne

 

#9 2018-01-15 22:24:28 Re : Son + figure

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 784

Re: Son + figure



Bonsoir,

Voici les deux parties du projet assemblées :

import processing.sound.*;

SoundFile[] file;
ArrayList<Dessin> dessins;
Dessin dessinEnCours;
PVector dimensionDessin, positionDessin;

int numsounds = 5;
int vitesseY;
int y;

void setup() {
  size(1000, 800);
  background(255);
  dimensionDessin = new PVector(200, 200);
  positionDessin = new PVector(0, 0);
  dessins = new ArrayList<Dessin>();
  dessinEnCours = new Dessin(this, numsounds, positionDessin, dimensionDessin);
  dessins.add(dessinEnCours);
  y = 0;
  vitesseY = 1;
}

void draw() {
  background(255);
  for (Dessin d : dessins) {
    d.afficher();
  }
  y += vitesseY;
  if (y >= height) {
    y = 0;
  }
  stroke(255, 0, 0);
  line(0, y, width, y);
  for (Dessin f : dessins) {
    f.afficher();
    if (y == f.position.y) {
      f.jouer();
    }
  }
}

void keyPressed() {
  if ((key == 'h') || (key == 'H')) {
    dessinEnCours.ajoute(new Ligne(dessinEnCours.extremite, dimensionDessin));
  }
  if ((key == 'g') || (key == 'G')) {
    //dessinEnCours.ajoute(new Rectangle(dessinEnCours.extremite));
  }
  if ((key == 'j') || (key == 'J')) {
    //dessinEnCours.ajoute(new Triangle(dessinEnCours.extremite));
  }
  if ((key == 'k') || (key == 'K')) {
    dessinEnCours.ajoute(new ArcDeCercle(dessinEnCours.extremite, dimensionDessin));
  }
  if (key == ' ') {
    for (Dessin d : dessins) {
      //d.exploser();
    }
  }
  if (keyCode == ENTER) {
    if (positionDessin.x >= width - dimensionDessin.x) {
      positionDessin.x = 0;
      positionDessin.y += dimensionDessin.y;
    } else {
      positionDessin.x += dimensionDessin.x;
    }
    dessinEnCours = new Dessin(this, numsounds, positionDessin, dimensionDessin);
    dessins.add(dessinEnCours);
  }
}



class Dessin {
  ArrayList<Forme> formes;
  PVector extremite, position;
  SoundFile son;

  Dessin(PApplet parent, int nombre, PVector pos, PVector dim) {
    formes = new ArrayList<Forme>();
    position = new PVector(pos.x, pos.y);
    extremite = new PVector(random(dim.x), random(dim.y));
    String fichierSon = int(random(1, nombre + 1)) + ".aif";
    son = new SoundFile(parent, fichierSon);
  }

  void ajoute(Forme f) {
    formes.add(f);
    extremite = f.pointB;
  }

  void afficher() {
    pushMatrix();
    translate(position.x, position.y);
    noFill();
    stroke(0);
    for (Forme f : formes) {
      f.affichage();
    }
    popMatrix();
  }

  void jouer() {
    son.play();
  }
}

class Forme {
  PVector pointA, pointB;

  Forme(PVector v, PVector dim) {
    pointA = new PVector(v.x, v.y);
    pointB = new PVector(random(dim.x), random(dim.y));
  }

  void affichage() {
  }
}

class Ligne extends Forme {
  Ligne(PVector ext, PVector d) {
    super(ext, d);
  }

  void affichage() {
    pushMatrix();
    line(pointA.x, pointA.y, pointB.x, pointB.y);
    popMatrix();
  }
}

class ArcDeCercle extends Forme {
  int hauteur, sens;
  float largeur, angle;

  ArcDeCercle(PVector ext, PVector d) {
    super(ext, d);
    hauteur = floor(random(10, 500));
    sens = floor(random(0, 2));
    largeur = PVector.sub(pointB, pointA).mag();
    angle = PVector.sub(pointB, pointA).heading();
  }

  void affichage() {
    pushMatrix();
    translate(pointA.x, pointA.y);
    rotate(angle);
    arc(largeur / 2, 0, largeur, hauteur, 0 + sens * PI, PI + sens * PI);
    popMatrix();
  }
}

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2018