Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

203
Vistas
¿Cómo obtengo solo un valor único (nota) para jugar? No se repite Javascript

Tengo un guión que funciona perfectamente. Básicamente, estoy sondeando una API cada 5 segundos para myJson.Temperature y se reproduce una nota MIDI correspondiente al valor devuelto. Los valores están entre 0 y 16. Aquí está el script:

 let easymidi = require("easymidi") let output = new easymidi.Output("mindiPort", true) let interval; const fetch = require("node-fetch"); let sendNote = (noteValue, duration) => { output.send("noteon", noteValue) setTimeout(()=> { output.send("noteoff", noteValue) }, duration); } const api_url = 'https://www.placeholder_url.com?timeout=1000' setInterval(() => fetch(api_url) .then((response) => { return response.json(); }) .then((myJson) => { let note; if (myJson.temperature == 0) { note = 24; } else if (myJson.temperature == 2) { note = 25; } else if (myJson.temperature == 4) { note = 26; } else if (myJson.temperature == 6) { note = 27; } else if (myJson.temperature == 8) { note = 28; } else if (myJson.temperature == 10) { note = 29; } else if (myJson.temparature == 12) { note = 30; } else if (myJson.temperature == 14) { note = 31; } else { note = 32; } let noteValue = { note: note, velocity: 100, channel: 1 } sendNote(noteValue, 500) }), 5000); // API call every 5 seconds **This will also play a (same) note every five seconds // if conditions are met**

¿Cómo puedo hacer que la nota suene solo una vez, es decir; - si se realiza una encuesta posterior y devuelve el mismo valor, ¿se puede ignorar esa nota hasta que se devuelva un valor único? Miré filter y onlyUnique pero no estoy seguro de cómo incorporarlos en el código. Gracias de antemano.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Iría por un enfoque simple y realizaría un seguimiento de la última nota emitida:

EDITAR : mi código estaba mal porque estaba comprobando la igualdad de objetos complejos, lo arreglé

 let easymidi = require("easymidi") let output = new easymidi.Output("mindiPort", true) let interval; const fetch = require("node-fetch"); let lastNote = null; let sendNote = (noteValue, duration) => { output.send("noteon", noteValue) setTimeout(()=> { output.send("noteoff", noteValue) }, duration); } const api_url = 'https://www.placeholder_url.com?timeout=1000' setInterval(() => fetch(api_url) .then((response) => { return response.json(); }) .then((myJson) => { let note; if (myJson.temperature == 0) { note = 24; } else if (myJson.temperature == 2) { note = 25; } else if (myJson.temperature == 4) { note = 26; } else if (myJson.temperature == 6) { note = 27; } else if (myJson.temperature == 8) { note = 28; } else if (myJson.temperature == 10) { note = 29; } else if (myJson.temparature == 12) { note = 30; } else if (myJson.temperature == 14) { note = 31; } else { note = 32; } if (lastNote !== note) { let noteValue = { note: note, velocity: 100, channel: 1 } sendNote(noteValue, 500) } lastNote = note; }), 5000); // API call every 5 seconds **This will also play a (same) note every five seconds // if conditions are met**
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda