pitched.js 967 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import {parentPort, workerData, Worker} from "worker_threads";
  2. import WavEncoder from "wav-encoder";
  3. // TODO: Possible optimization in the future.
  4. function createWorker(c){
  5. return new Promise((resolve, reject) => {
  6. const c0 = new Worker('./c0.js', {
  7. workerData: {
  8. pitch: Number(workerData.pitch),
  9. binary: workerData.binary,
  10. channel: c
  11. }
  12. })
  13. c0.on("message", (worker) => {
  14. resolve(worker);
  15. })
  16. c0.on("error", (err) => {
  17. console.error(err);
  18. reject(err);
  19. })
  20. })
  21. }
  22. try{
  23. const res = await Promise.all([createWorker(0), createWorker(1)]);
  24. const prep = {
  25. sampleRate: res[0].samplerate,
  26. channelData: [
  27. res[0].output, res[1].output
  28. ]
  29. }
  30. let wavBuffer = await WavEncoder.encode(prep)
  31. parentPort.postMessage(wavBuffer)
  32. }catch(e){
  33. console.error(e)
  34. }