Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

190
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!