Para reproducir un sonido, por ejemplo cuando se pulse una tecla determinada, usamos la librería Minim. Una librería es un conjunto de subprogramas que amplían la funcionalidad de otro (o de un lenguaje en este caso) más allá de aquella para la que se concibió.
Mimin está incluida en Processing y para usarla basta con importarla mediante el código:
import ddf.minim.*;
Luego instanciamos un objeto Minim
Minim soundengine; AudioSample sonido1;
En setup() cargamos un archivo de audio que previamente hemos guardado en la carpeta data.
void setup() { soundengine = new Minim(this); sonido1 = soundengine.loadSample("01.mp3", 1024); }
Luego hacemos que el objeto se dispare al pulsar una tecla
void draw() { } void keyPressed() { if (key == 'b' || key == 'B') { sonido1.trigger(); } }
Más información básica sobre el uso de sonidos mediante Minim en su Quickstart Guide
Hola amigo, como guardo un archivo en una carpeta Data?? gracias.
En la carpeta donde tienes tu sketch creas una carpeta llamada ‘data’. Y dentro de esa carpeta guardas el archivo.
Disculpa la tardanza, no he visto el comentario hasta hoy.
tenho duvidar em colocar musica a tocar no sotfware processing
O que é Minim ?
Hola Delton. Minim es una librería que permite reproducir sonido desde Processing. Está incluida, por lo que no necesitas instalarla, sólo importarla al principio de tu sketch con este código:
import ddf.minim.*;
Hola! me sirvio un monton el tuto. Hay forma de que al obtener un dato en el serial ej «2» se reproduzca el archivo 2.mp3? el numero dos ya lo puedo guardar en una variable, lo que no logro es que la variable se iguale con el nombre del mp3.
Gracias!
Prueba esto (dentro de draw(){}):
if(nombreDeVariable == 2){sonido2.trigger();}
Antes tienes que instanciarlo y cargarlo igual que el objeto sonido1.
Espero que te sirva. Un saludo.
Sos un genio!
Lo probare! Mil gracias!!!!
Hola en mi codigo aparece que no tiene ninguna libreria minim, que puedo hacer? graciaaaas
Puede ser un problema con Processing 3. P2 incluía Minim por defecto, pero P3 usa una librería distinta llamada Sound. Puedes usar P2 o añadir la librería desde el gestor, o manualmente -> https://github.com/ddf/Minim
Buen día!
espero me puedas ayudar.
Cargue 3 archivos, necesito que estos se reproduzcan según las condiciones pero que se puedan pausar. puse «if» pero para detenerlas al ponerle código a cada una me lo marca como error por que se repite.
if (weather.getTemperature()>=18){ //Cambiar temperatura
sol.isPlaying();
}
if (weather.getTemperature()<18){ //Cambiar temperatura
nublado.isPlaying();
}
else if(weather.getTemperature()<18){ //Cambiar temperatura
calor.isPlaying();
}
}
void keyPressed()
{
if ( sol.isPlaying() )
{
sol.pause();
}
else
{
sol.loop();
}
}
void keyPressed()
{
if ( nublado.isPlaying() )
{
nublado.pause();
}
else
{
nublado.loop();
}
}
void keyPressed()
{
if ( calor.isPlaying() )
{
calor.pause();
}
else
{
calor.loop();
}
}
Tienes varias funciones keyPressed() con contenidos diferentes. Prueba a reunir todos los condicionales en un solo keyPressed().
Por ejemplo:
void keyPressed(){
if(condición01){función01}
else if(condición02){función02}
else if(condición03){función03}
else{funciónPorDefecto}
}
Muchas Gracias!!
hola, como hago para que la musica este durante todo el juego?
En lugar de invocar el sonido con el método .trigger() dentro de la función keypressed(), usa el método .loop() dentro de draw():
void draw(){ sonido1.loop();}
Saludos
Escribi, sonido1.loop(); pero aparece que la funcion no existe, que podria ser? tengo el mismo codigo escrito aqui como ejemplo…
Como hago para que cuando pulses una tecla del teclado suene una canción diferente?
Ya no hace falta, ya lo solucione
cómo hago una animación cuadro por cuadro con sonido?
Si pudieras ser más específico/a…
Hola, como puedo hacer para que cuando pulse sobre una imagen se reproduzca un mp3 con processing? Gracias
Puedes hacer una serie de condicionales
if / else if
que comprueben si al hacer clic el mouse está dentro de los límites de la imagen. En pesudo-código sería:void mouseReleased(){
si el mouse está más bajo que el límite superior (de la imagen)
y además el mouse está más alto que el límite inferior
y además el mouse está más a la derecha que el límite izquierdo
y además el mouse está más a la izquierda que el límite derecho
reproducir sonido
}
Hola, me preguntaba si me podrías ayudar con un problema que me ha surgido al colocar este código en un juego que estoy creando. Consiste en el típico PONG en el que cuando metes la bola se reinicia y vuelve al juego. Yo lo que quiero es que suene una canción de fondo desde que se ejecuta el juego hasta que se cierra, el problema viene que cuando incluyo este código en el juego, cada vez que se mete punto, se reinicia la pelota se reinicia la canción sucesivamente (haciendo que se reproduzca simultáneamente la misma canción de manera que queda un eco molesto hasta que deja de entenderse completamente la canción).
import ddf.minim.*;
import ddf.minim.analysis.*;
import ddf.minim.effects.*;
import ddf.minim.signals.*;
import ddf.minim.spi.*;
import ddf.minim.ugens.*;
Minim minim;
AudioPlayer sou;
void setup() {
size (500,500,P2D);
minim = new Minim (this);
sou =minim.loadFile(«11111.mp3»);
sou.loop();
}
void draw() {
}
Me gustaría saber como puedo hacer para que la canción se quede fija sin que el código del juego influya en el código de reproducción de la música. Gracias y un saludo.
¿Has probado a parar el sonido antes de reiniciar, sou.stop()? Donde tengas la función para reiniciar, junto antes o justo después. Ya me dices si funciona.
Lo siento, no acabo de entender como hacerlo. Esta es la parte del programa que me de problemas (para que lo veas ya que alomejor no me explico muy bien);
import ddf.minim.*;
import ddf.minim.analysis.*;
import ddf.minim.effects.*;
import ddf.minim.signals.*;
import ddf.minim.spi.*;
import ddf.minim.ugens.*;
Minim minim;
AudioPlayer sou;
int x, y, w, h, speedX, speedY;
int scoreL = 0;
int scoreR = 0;
int winScore = 10;
void setup() {
size(1400, 500);
minim = new Minim (this);
sou =minim.loadFile(«song.mp3»);
sou.loop();
frameRate(150); //velocidad de la bola
x = width/2;
y = height/2;
w = 20;
h = 20;
speedX = 2;
speedY = 2;
textSize(35);
textAlign(CENTER, CENTER);
rectMode(CENTER);
}
void draw() {
background(225);
drawCircle();
moveCircle();
bounceOff();
scores();
}
void drawCircle() {
fill(225,0,0);
ellipse(x, y, w, h);
}
void moveCircle() {
x = x + speedX*2;
y = y + speedY*2;
}
void bounceOff() {
if ( x > width – w/2) {
setup();
speedX = -speedX;
scoreL = scoreL + 1;
} else if ( x height – h/2) {
speedY = -speedY;
} else if ( y < 0 + h/2) {
speedY = -speedY;
}
}
void scores() {
fill(255);
text(scoreL, 100, 50); //posición del marcador 1
text(scoreR, width-100, 50); //posición del marcador 2
}
void keyPressed() {
if (keyCode == 'P') {
noLoop();
sou.pause();
text("PAUSE", 200,100);
text("Click R to continue",735,450);
}else if(keyCode == 'R') {
loop();
sou.play();
}
}
No sé colocar el sou.close() o el sou.stop(). Al poner el stop me dice que la función no existe. He encontrado la manera de que la música se reproduzca solo una vez con void keyPressed(), pero no me gusta la idea de que haya que pulsar una tecla para iniciar el sonido (un poco incomodo, ¿no?) y también si por casualidad vuelve a pulsar la tecla se duplica la canción como anteriormente. Si fuera posible que sonara desde que se inicia el programa hasta que se cierra sin necesidad de usar el keyPressed() sería perfecto y agradecería tu ayuda.
Gracias y lamento las molestias
Antes que nada, disculpa la tardanza. Estas semanas hay trabajo a paletadas 🙂
Veo que el reinicio lo tienes en la función bounceOff(). Es justo antes de la llamada a setup() en esa función donde debes parar el sonido para que al volver a ejecutar setup() no se superpongan.
El método stop() es válido -> http://code.compartmental.net/minim/minim_method_stop.html
¡Va perfecto!
¡¡Muchas gracias!!
Hola,
Tengo un audio en draw que se reproduce cuando mouseX está en un rango de valor x. ¿Cómo podría hacer para que el audio se reproduzca una sola vez? Ahora se carga una y otra vez mientras mouseX se encuentra en dicho rango.
if (mouseX > 512 && mouseX < 640)
{
s4.play();
}
desde ya muchas gracias
saludos
Por ejemplo, puedes crear una función testMouse() que compruebe si el mouse está en el rango que quieres. Debes crear antes una una variable booleana global, ‘playsound’, y la das un valor de ‘false’. La nueva función le pasa el valor ‘true’ si el mouse está en su sitio.
void testMouse(){
if(mouseX > width/2){
playsound = true;
}
}
Y en draw() creas un condicional
if (playsound){
player.play();
}
…sin olvidarte de invocar la función testMouse().
Así se reproduce una sola vez. Si quieres que deje de sonar al salir el mouse del rango establecido, puedes aladir un else if a tu conveniencia.
¡Saludos!
Muchas gracias, lo probaré enseguida.
Saludos
hola! quiero que el sonido se repita continuamente, cómo lo puedo hacer? gracias!
Está resuelto más arriba -> http://dunadigital.com/processing/2014/01/14/como-reproducir-un-sonido/#comment-542
Muy buenas. Estoy trabajando con la kinect, con un código que lee los movimientos de una persona y crea un esqueleto sencillo que se mueve a la vez ella. Me gustaría implementar un sonido para los movimientos que uno haga, variando el tono del sonido según la velocidad de los movimientos, como si fuese una frecuencia. ¿Sabrías como puedo hacerlo? Ya que no tengo ni idea de audio en processing.
Un saludo.
Perdón no puse el código.
import kinect4WinSDK.Kinect;
import kinect4WinSDK.SkeletonData;
Kinect kinect;
ArrayList bodies;
void setup()
{
size(640, 480);
background(0);
kinect = new Kinect(this);
smooth();
bodies = new ArrayList();
}
void draw()
{
background(0);
image(kinect.GetImage(), 320, 0, 320, 240);
image(kinect.GetDepth(), 320, 240, 320, 240);
image(kinect.GetMask(), 0, 240, 320, 240);
for (int i=0; i=0; i–)
{
if (_s.dwTrackingID == bodies.get(i).dwTrackingID)
{
bodies.remove(i);
}
}
}
}
void moveEvent(SkeletonData _b, SkeletonData _a)
{
if (_a.trackingState == Kinect.NUI_SKELETON_NOT_TRACKED)
{
return;
}
synchronized(bodies) {
for (int i=bodies.size ()-1; i>=0; i–)
{
if (_b.dwTrackingID == bodies.get(i).dwTrackingID)
{
bodies.get(i).copy(_a);
break;
}
}
}
}
Holaa! Tal vez me puedes decir cómo acelerar el tempo de un sonido, gracias
como puedo hacer que al hacer click inicie el sonido o la musica?
Hola, mi programa de processing no reproduce bien el sonido que le meto, suena como un disco rayado y a veces da error. He probado con todo tipo de sonidos y sigue igual. Ya no sé que hacer.
¿Tienes alguna forma de solucionar esto?
Muchas gracias.
Con los pocos datos que me das es difícil saberlo. ¿Puede ser que hayas puesto el trigger() dentro de draw() y se esté ejecutando constantemente?
hola necesito una ayuda como logro hacer que en el fondo alla puntillismo, en degrade y que ademas se mueva mediante el sonido de reproducción del video, osea como si fuera lineas de musica que se reproducen en tu cel.