addon.js 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /** @typedef {import('./types').WaveObject} WaveObject */
  2. const os = require('os');
  3. const path = require('path');
  4. const addonStaticImport = require('./addon-static-import');
  5. // Package name triggered spam for sherpa-onnx-win32-x64
  6. // so we have renamed it to sherpa-onnx-win-x64
  7. const platform = os.platform() === 'win32' ? 'win' : os.platform();
  8. const arch = os.arch();
  9. const platform_arch = `${platform}-${arch}`;
  10. const possible_paths = [
  11. '../build/Release/sherpa-onnx.node',
  12. '../build/Debug/sherpa-onnx.node',
  13. `./node_modules/sherpa-onnx-${platform_arch}/sherpa-onnx.node`,
  14. `../sherpa-onnx-${platform_arch}/sherpa-onnx.node`,
  15. './sherpa-onnx.node',
  16. ];
  17. let addon = addonStaticImport;
  18. if (!addon) {
  19. for (const p of possible_paths) {
  20. try {
  21. addon = require(p);
  22. break;
  23. } catch (error) {
  24. // do nothing; try the next option
  25. ;
  26. }
  27. }
  28. }
  29. module.exports = addon;
  30. if (!addon) {
  31. let addon_path =
  32. `${process.env.PWD}/node_modules/sherpa-onnx-${platform_arch}`;
  33. const pnpmIndex = __dirname.indexOf(`node_modules${path.sep}.pnpm`);
  34. if (pnpmIndex !== -1) {
  35. const parts = __dirname.slice(pnpmIndex).split(path.sep);
  36. parts.pop();
  37. addon_path =
  38. `${process.env.PWD}/${parts.join('/')}/sherpa-onnx-${platform_arch}`;
  39. }
  40. let msg = `Could not find sherpa-onnx-node. Tried\n\n ${
  41. possible_paths.join('\n ')}\n`
  42. if (os.platform() == 'darwin' &&
  43. (!process.env.DYLD_LIBRARY_PATH ||
  44. !process.env.DYLD_LIBRARY_PATH.includes(
  45. `node_modules/sherpa-onnx-${platform_arch}`))) {
  46. msg +=
  47. 'Please remember to set the following environment variable and try again:\n';
  48. msg += `export DYLD_LIBRARY_PATH=${addon_path}`;
  49. msg += ':$DYLD_LIBRARY_PATH\n';
  50. }
  51. if (os.platform() == 'linux' &&
  52. (!process.env.LD_LIBRARY_PATH ||
  53. !process.env.LD_LIBRARY_PATH.includes(
  54. `node_modules/sherpa-onnx-${platform_arch}`))) {
  55. msg +=
  56. 'Please remember to set the following environment variable and try again:\n';
  57. msg += `export LD_LIBRARY_PATH=${addon_path}`;
  58. msg += ':$LD_LIBRARY_PATH\n';
  59. }
  60. throw new Error(msg)
  61. }
  62. /**
  63. * Read a wave file from disk.
  64. * @function module.exports.readWave
  65. * @param {string} filename
  66. * @param {boolean} [enableExternalBuffer=true]
  67. * @returns {WaveObject}
  68. */
  69. /**
  70. * Read a wave from binary buffer.
  71. * @function module.exports.readWaveFromBinary
  72. * @param {Uint8Array} data - Binary contents of a wave file.
  73. * @param {boolean} [enableExternalBuffer=true]
  74. * @returns {WaveObject}
  75. */
  76. /**
  77. * Write a wave file to disk.
  78. * @function module.exports.writeWave
  79. * @param {string} filename
  80. * @param {WaveObject} obj - { samples: Float32Array, sampleRate: number }
  81. * @returns {boolean}
  82. */