whisper.rn 0.5.0-rc.0 → 0.5.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/README.md +119 -50
  2. package/android/build.gradle +1 -0
  3. package/lib/commonjs/AudioSessionIos.js +2 -1
  4. package/lib/commonjs/AudioSessionIos.js.map +1 -1
  5. package/lib/commonjs/index.js +1 -0
  6. package/lib/commonjs/index.js.map +1 -1
  7. package/lib/commonjs/jest-mock.js +126 -0
  8. package/lib/commonjs/jest-mock.js.map +1 -0
  9. package/lib/commonjs/realtime-transcription/RealtimeTranscriber.js +831 -0
  10. package/lib/commonjs/realtime-transcription/RealtimeTranscriber.js.map +1 -0
  11. package/lib/commonjs/realtime-transcription/SliceManager.js +233 -0
  12. package/lib/commonjs/realtime-transcription/SliceManager.js.map +1 -0
  13. package/lib/commonjs/realtime-transcription/adapters/AudioPcmStreamAdapter.js +133 -0
  14. package/lib/commonjs/realtime-transcription/adapters/AudioPcmStreamAdapter.js.map +1 -0
  15. package/lib/commonjs/realtime-transcription/adapters/JestAudioStreamAdapter.js +201 -0
  16. package/lib/commonjs/realtime-transcription/adapters/JestAudioStreamAdapter.js.map +1 -0
  17. package/lib/commonjs/realtime-transcription/adapters/SimulateFileAudioStreamAdapter.js +309 -0
  18. package/lib/commonjs/realtime-transcription/adapters/SimulateFileAudioStreamAdapter.js.map +1 -0
  19. package/lib/commonjs/realtime-transcription/index.js +27 -0
  20. package/lib/commonjs/realtime-transcription/index.js.map +1 -0
  21. package/lib/commonjs/realtime-transcription/types.js +114 -0
  22. package/lib/commonjs/realtime-transcription/types.js.map +1 -0
  23. package/lib/commonjs/utils/WavFileReader.js +158 -0
  24. package/lib/commonjs/utils/WavFileReader.js.map +1 -0
  25. package/lib/commonjs/utils/WavFileWriter.js +181 -0
  26. package/lib/commonjs/utils/WavFileWriter.js.map +1 -0
  27. package/lib/commonjs/utils/common.js +25 -0
  28. package/lib/commonjs/utils/common.js.map +1 -0
  29. package/lib/module/AudioSessionIos.js +2 -1
  30. package/lib/module/AudioSessionIos.js.map +1 -1
  31. package/lib/module/index.js +1 -0
  32. package/lib/module/index.js.map +1 -1
  33. package/lib/module/jest-mock.js +124 -0
  34. package/lib/module/jest-mock.js.map +1 -0
  35. package/lib/module/realtime-transcription/RealtimeTranscriber.js +825 -0
  36. package/lib/module/realtime-transcription/RealtimeTranscriber.js.map +1 -0
  37. package/lib/module/realtime-transcription/SliceManager.js +226 -0
  38. package/lib/module/realtime-transcription/SliceManager.js.map +1 -0
  39. package/lib/module/realtime-transcription/adapters/AudioPcmStreamAdapter.js +124 -0
  40. package/lib/module/realtime-transcription/adapters/AudioPcmStreamAdapter.js.map +1 -0
  41. package/lib/module/realtime-transcription/adapters/JestAudioStreamAdapter.js +194 -0
  42. package/lib/module/realtime-transcription/adapters/JestAudioStreamAdapter.js.map +1 -0
  43. package/lib/module/realtime-transcription/adapters/SimulateFileAudioStreamAdapter.js +302 -0
  44. package/lib/module/realtime-transcription/adapters/SimulateFileAudioStreamAdapter.js.map +1 -0
  45. package/lib/module/realtime-transcription/index.js +8 -0
  46. package/lib/module/realtime-transcription/index.js.map +1 -0
  47. package/lib/module/realtime-transcription/types.js +107 -0
  48. package/lib/module/realtime-transcription/types.js.map +1 -0
  49. package/lib/module/utils/WavFileReader.js +151 -0
  50. package/lib/module/utils/WavFileReader.js.map +1 -0
  51. package/lib/module/utils/WavFileWriter.js +174 -0
  52. package/lib/module/utils/WavFileWriter.js.map +1 -0
  53. package/lib/module/utils/common.js +18 -0
  54. package/lib/module/utils/common.js.map +1 -0
  55. package/lib/typescript/AudioSessionIos.d.ts +1 -1
  56. package/lib/typescript/AudioSessionIos.d.ts.map +1 -1
  57. package/lib/typescript/index.d.ts.map +1 -1
  58. package/lib/typescript/jest-mock.d.ts +2 -0
  59. package/lib/typescript/jest-mock.d.ts.map +1 -0
  60. package/lib/typescript/realtime-transcription/RealtimeTranscriber.d.ts +165 -0
  61. package/lib/typescript/realtime-transcription/RealtimeTranscriber.d.ts.map +1 -0
  62. package/lib/typescript/realtime-transcription/SliceManager.d.ts +72 -0
  63. package/lib/typescript/realtime-transcription/SliceManager.d.ts.map +1 -0
  64. package/lib/typescript/realtime-transcription/adapters/AudioPcmStreamAdapter.d.ts +22 -0
  65. package/lib/typescript/realtime-transcription/adapters/AudioPcmStreamAdapter.d.ts.map +1 -0
  66. package/lib/typescript/realtime-transcription/adapters/JestAudioStreamAdapter.d.ts +44 -0
  67. package/lib/typescript/realtime-transcription/adapters/JestAudioStreamAdapter.d.ts.map +1 -0
  68. package/lib/typescript/realtime-transcription/adapters/SimulateFileAudioStreamAdapter.d.ts +75 -0
  69. package/lib/typescript/realtime-transcription/adapters/SimulateFileAudioStreamAdapter.d.ts.map +1 -0
  70. package/lib/typescript/realtime-transcription/index.d.ts +6 -0
  71. package/lib/typescript/realtime-transcription/index.d.ts.map +1 -0
  72. package/lib/typescript/realtime-transcription/types.d.ts +216 -0
  73. package/lib/typescript/realtime-transcription/types.d.ts.map +1 -0
  74. package/lib/typescript/utils/WavFileReader.d.ts +61 -0
  75. package/lib/typescript/utils/WavFileReader.d.ts.map +1 -0
  76. package/lib/typescript/utils/WavFileWriter.d.ts +57 -0
  77. package/lib/typescript/utils/WavFileWriter.d.ts.map +1 -0
  78. package/lib/typescript/utils/common.d.ts +9 -0
  79. package/lib/typescript/utils/common.d.ts.map +1 -0
  80. package/package.json +23 -11
  81. package/src/AudioSessionIos.ts +3 -2
  82. package/src/index.ts +4 -0
  83. package/{jest/mock.js → src/jest-mock.ts} +2 -2
  84. package/src/realtime-transcription/RealtimeTranscriber.ts +983 -0
  85. package/src/realtime-transcription/SliceManager.ts +252 -0
  86. package/src/realtime-transcription/adapters/AudioPcmStreamAdapter.ts +143 -0
  87. package/src/realtime-transcription/adapters/JestAudioStreamAdapter.ts +251 -0
  88. package/src/realtime-transcription/adapters/SimulateFileAudioStreamAdapter.ts +378 -0
  89. package/src/realtime-transcription/index.ts +34 -0
  90. package/src/realtime-transcription/types.ts +277 -0
  91. package/src/utils/WavFileReader.ts +202 -0
  92. package/src/utils/WavFileWriter.ts +206 -0
  93. package/src/utils/common.ts +17 -0
@@ -0,0 +1 @@
1
+ {"version":3,"names":["JestAudioStreamAdapter","config","isInitialized","recording","chunksSent","startTime","constructor","options","arguments","length","undefined","sampleRate","channels","bitsPerSample","simulateLatency","simulateErrors","chunkSize","chunkInterval","maxChunks","generateSilence","initialize","release","delay","simulateStartErrorOnly","Error","start","_this$statusCallback","Date","now","statusCallback","call","startStreaming","stop","_this$statusCallback2","streamInterval","clearTimeout","isRecording","onData","callback","dataCallback","onError","errorCallback","onStatusChange","simulateError","error","_this$errorCallback","simulateDataChunk","data","streamData","timestamp","getChunksSent","getTotalBytesStreamed","getStreamDuration","streamChunk","audioData","generateAudioChunk","setTimeout","startByte","endByte","Math","min","subarray","Uint8Array","fill","frequency","samplesPerChunk","timeOffset","i","time","amplitude","sin","PI","sample","round","floor","ms","Promise","resolve","exports"],"sourceRoot":"../../../../src","sources":["realtime-transcription/adapters/JestAudioStreamAdapter.ts"],"mappings":";;;;;;AAgBO,MAAMA,sBAAsB,CAAiC;EAC1DC,MAAM,GAA6B,IAAI;EAIvCC,aAAa,GAAG,KAAK;EAErBC,SAAS,GAAG,KAAK;EAUjBC,UAAU,GAAG,CAAC;EAEdC,SAAS,GAAG,CAAC;EAErBC,WAAWA,CAAA,EAA8C;IAAA,IAA7CC,OAAsC,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;IACrD,IAAI,CAACD,OAAO,GAAG;MACbI,UAAU,EAAE,KAAK;MACjBC,QAAQ,EAAE,CAAC;MACXC,aAAa,EAAE,EAAE;MACjBC,eAAe,EAAE,CAAC;MAClBC,cAAc,EAAE,KAAK;MACrBC,SAAS,EAAE,IAAI;MAAE;MACjBC,aAAa,EAAE,GAAG;MAAE;MACpBC,SAAS,EAAE,CAAC,CAAC;MAAE;MACfC,eAAe,EAAE,IAAI;MACrB,GAAGZ;IACL,CAAC;EACH;EAEA,MAAMa,UAAUA,CAACnB,MAAyB,EAAiB;IACzD,IAAI,IAAI,CAACC,aAAa,EAAE;MACtB,MAAM,IAAI,CAACmB,OAAO,EAAE;IACtB;IAEA,IAAI,IAAI,CAACd,OAAO,CAACO,eAAe,GAAI,CAAC,EAAE;MACrC,MAAMd,sBAAsB,CAACsB,KAAK,CAAC,IAAI,CAACf,OAAO,CAACO,eAAe,CAAE;IACnE;IAEA,IAAI,IAAI,CAACP,OAAO,CAACQ,cAAc,IAAI,CAAC,IAAI,CAACR,OAAO,CAACgB,sBAAsB,EAAE;MACvE,MAAM,IAAIC,KAAK,CAAC,gCAAgC,CAAC;IACnD;IAEA,IAAI,CAACvB,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACC,aAAa,GAAG,IAAI;EAC3B;EAEA,MAAMuB,KAAKA,CAAA,EAAkB;IAAA,IAAAC,oBAAA;IAC3B,IAAI,CAAC,IAAI,CAACxB,aAAa,EAAE;MACvB,MAAM,IAAIsB,KAAK,CAAC,6BAA6B,CAAC;IAChD;IAEA,IAAI,IAAI,CAACrB,SAAS,EAAE;MAClB;IACF;IAEA,IAAI,IAAI,CAACI,OAAO,CAACO,eAAe,GAAI,CAAC,EAAE;MACrC,MAAMd,sBAAsB,CAACsB,KAAK,CAAC,IAAI,CAACf,OAAO,CAACO,eAAe,CAAE;IACnE;IAEA,IAAI,IAAI,CAACP,OAAO,CAACQ,cAAc,EAAE;MAC/B,MAAM,IAAIS,KAAK,CAAC,uBAAuB,CAAC;IAC1C;IAEA,IAAI,CAACrB,SAAS,GAAG,IAAI;IACrB,IAAI,CAACC,UAAU,GAAG,CAAC;IACnB,IAAI,CAACC,SAAS,GAAGsB,IAAI,CAACC,GAAG,EAAE;IAC3B,CAAAF,oBAAA,OAAI,CAACG,cAAc,cAAAH,oBAAA,uBAAnBA,oBAAA,CAAAI,IAAA,KAAI,EAAkB,IAAI,CAAC;IAC3B,IAAI,CAACC,cAAc,EAAE;EACvB;EAEA,MAAMC,IAAIA,CAAA,EAAkB;IAAA,IAAAC,qBAAA;IAC1B,IAAI,CAAC,IAAI,CAAC9B,SAAS,EAAE;MACnB;IACF;IAEA,IAAI,IAAI,CAACI,OAAO,CAACO,eAAe,GAAI,CAAC,EAAE;MACrC,MAAMd,sBAAsB,CAACsB,KAAK,CAAC,IAAI,CAACf,OAAO,CAACO,eAAe,CAAE;IACnE;IAEA,IAAI,CAACX,SAAS,GAAG,KAAK;IACtB,CAAA8B,qBAAA,OAAI,CAACJ,cAAc,cAAAI,qBAAA,uBAAnBA,qBAAA,CAAAH,IAAA,KAAI,EAAkB,KAAK,CAAC;IAE5B,IAAI,IAAI,CAACI,cAAc,EAAE;MACvBC,YAAY,CAAC,IAAI,CAACD,cAAc,CAAC;MACjC,IAAI,CAACA,cAAc,GAAGxB,SAAS;IACjC;EACF;EAEA0B,WAAWA,CAAA,EAAY;IACrB,OAAO,IAAI,CAACjC,SAAS;EACvB;EAEAkC,MAAMA,CAACC,QAAyC,EAAQ;IACtD,IAAI,CAACC,YAAY,GAAGD,QAAQ;EAC9B;EAEAE,OAAOA,CAACF,QAAiC,EAAQ;IAC/C,IAAI,CAACG,aAAa,GAAGH,QAAQ;EAC/B;EAEAI,cAAcA,CAACJ,QAAwC,EAAQ;IAC7D,IAAI,CAACT,cAAc,GAAGS,QAAQ;EAChC;EAEA,MAAMjB,OAAOA,CAAA,EAAkB;IAC7B,IAAI,IAAI,CAAClB,SAAS,EAAE;MAClB,MAAM,IAAI,CAAC6B,IAAI,EAAE;IACnB;IAEA,IAAI,CAAC9B,aAAa,GAAG,KAAK;IAC1B,IAAI,CAACD,MAAM,GAAG,IAAI;IAClB,IAAI,CAACsC,YAAY,GAAG7B,SAAS;IAC7B,IAAI,CAAC+B,aAAa,GAAG/B,SAAS;IAC9B,IAAI,CAACmB,cAAc,GAAGnB,SAAS;IAC/B,IAAI,CAACN,UAAU,GAAG,CAAC;EACrB;;EAEA;EACAuC,aAAaA,CAACC,KAAa,EAAQ;IAAA,IAAAC,mBAAA;IACjC,CAAAA,mBAAA,OAAI,CAACJ,aAAa,cAAAI,mBAAA,uBAAlBA,mBAAA,CAAAf,IAAA,KAAI,EAAiBc,KAAK,CAAC;EAC7B;EAEAE,iBAAiBA,CAACC,IAAgB,EAAQ;IACxC,IAAI,CAAC,IAAI,CAACR,YAAY,IAAI,CAAC,IAAI,CAACtC,MAAM,EAAE;MACtC;IACF;IAEA,MAAM+C,UAA2B,GAAG;MAClCD,IAAI;MACJpC,UAAU,EAAE,IAAI,CAACV,MAAM,CAACU,UAAU,IAAI,IAAI,CAACJ,OAAO,CAACI,UAAW;MAC9DC,QAAQ,EAAE,IAAI,CAACX,MAAM,CAACW,QAAQ,IAAI,IAAI,CAACL,OAAO,CAACK,QAAS;MACxDqC,SAAS,EAAEtB,IAAI,CAACC,GAAG;IACrB,CAAC;IAED,IAAI,CAACW,YAAY,CAACS,UAAU,CAAC;EAC/B;EAEAE,aAAaA,CAAA,EAAW;IACtB,OAAO,IAAI,CAAC9C,UAAU;EACxB;EAEA+C,qBAAqBA,CAAA,EAAW;IAC9B,OAAO,IAAI,CAAC/C,UAAU,GAAG,IAAI,CAACG,OAAO,CAACS,SAAU;EAClD;EAEAoC,iBAAiBA,CAAA,EAAW;IAC1B,OAAO,IAAI,CAACjD,SAAS,GAAGwB,IAAI,CAACC,GAAG,EAAE,GAAG,IAAI,CAACvB,SAAS,GAAG,CAAC;EACzD;EAEU0B,cAAcA,CAAA,EAAS;IAC/B,IAAI,CAAC,IAAI,CAACQ,YAAY,IAAI,CAAC,IAAI,CAACtC,MAAM,EAAE;MACtC;IACF;IAEA,MAAMoD,WAAW,GAAGA,CAAA,KAAM;MACxB,IAAI,CAAC,IAAI,CAAClD,SAAS,EAAE;QACnB;MACF;;MAEA;MACA,IAAI,IAAI,CAACI,OAAO,CAACW,SAAS,GAAI,CAAC,IAAI,IAAI,CAACd,UAAU,IAAI,IAAI,CAACG,OAAO,CAACW,SAAU,EAAE;QAC7E,IAAI,CAACc,IAAI,EAAE;QACX;MACF;;MAEA;MACA,MAAMsB,SAAS,GAAG,IAAI,CAACC,kBAAkB,EAAE;MAE3C,IAAID,SAAS,EAAE;QACb,IAAI,CAACR,iBAAiB,CAACQ,SAAS,CAAC;QACjC,IAAI,CAAClD,UAAU,IAAI,CAAC;MACtB;;MAEA;MACA,IAAI,IAAI,CAACD,SAAS,EAAE;QAClB,IAAI,CAAC+B,cAAc,GAAGsB,UAAU,CAACH,WAAW,EAAE,IAAI,CAAC9C,OAAO,CAACU,aAAa,CAAE;MAC5E;IACF,CAAC;;IAED;IACA,IAAI,CAACiB,cAAc,GAAGsB,UAAU,CAACH,WAAW,EAAE,IAAI,CAAC9C,OAAO,CAACU,aAAa,CAAE;EAC5E;EAEQsC,kBAAkBA,CAAA,EAAsB;IAC9C;IACA,IAAI,IAAI,CAAChD,OAAO,CAAC+C,SAAS,EAAE;MAC1B,MAAMG,SAAS,GAAG,IAAI,CAACrD,UAAU,GAAG,IAAI,CAACG,OAAO,CAACS,SAAU;MAC3D,MAAM0C,OAAO,GAAGC,IAAI,CAACC,GAAG,CAACH,SAAS,GAAG,IAAI,CAAClD,OAAO,CAACS,SAAU,EAAE,IAAI,CAACT,OAAO,CAAC+C,SAAS,CAAC7C,MAAM,CAAC;MAE5F,IAAIgD,SAAS,IAAI,IAAI,CAAClD,OAAO,CAAC+C,SAAS,CAAC7C,MAAM,EAAE;QAC9C,OAAO,IAAI,EAAC;MACd;;MAEA,OAAO,IAAI,CAACF,OAAO,CAAC+C,SAAS,CAACO,QAAQ,CAACJ,SAAS,EAAEC,OAAO,CAAC;IAC5D;;IAEA;IACA,MAAM1C,SAAS,GAAG,IAAI,CAACT,OAAO,CAACS,SAAU;IACzC,MAAMsC,SAAS,GAAG,IAAIQ,UAAU,CAAC9C,SAAS,CAAC;IAE3C,IAAI,IAAI,CAACT,OAAO,CAACY,eAAe,EAAE;MAChC;MACAmC,SAAS,CAACS,IAAI,CAAC,CAAC,CAAC;IACnB,CAAC,MAAM;MACL;MACA,MAAMpD,UAAU,GAAG,IAAI,CAACJ,OAAO,CAACI,UAAW;MAC3C,MAAMqD,SAAS,GAAG,GAAG,EAAC;MACtB,MAAMC,eAAe,GAAGjD,SAAS,GAAG,CAAC,EAAC;MACtC,MAAMkD,UAAU,GAAI,IAAI,CAAC9D,UAAU,GAAG6D,eAAe,GAAItD,UAAU;MAE7D,KAAK,IAAIwD,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,eAAe,EAAEE,CAAC,IAAI,CAAC,EAAE;QACjD,MAAMC,IAAI,GAAGF,UAAU,GAAGC,CAAC,GAAGxD,UAAU;QACxC,MAAM0D,SAAS,GAAGV,IAAI,CAACW,GAAG,CAAC,CAAC,GAAGX,IAAI,CAACY,EAAE,GAAGP,SAAS,GAAGI,IAAI,CAAC,GAAG,GAAG;QAChE,MAAMI,MAAM,GAAGb,IAAI,CAACc,KAAK,CAACJ,SAAS,GAAG,KAAK,CAAC,EAAC;;QAE7C;QACAf,SAAS,CAACa,CAAC,GAAG,CAAC,CAAC,GAAGK,MAAM,GAAG,GAAG;QAC/BlB,SAAS,CAACa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAGR,IAAI,CAACe,KAAK,CAACF,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG;MACvD;IACF;IAEA,OAAOlB,SAAS;EAClB;EAEA,OAAehC,KAAKA,CAACqD,EAAU,EAAiB;IAC9C,OAAO,IAAIC,OAAO,CAACC,OAAO,IAAIrB,UAAU,CAACqB,OAAO,EAAEF,EAAE,CAAC,CAAC;EACxD;AACF;AAACG,OAAA,CAAA9E,sBAAA,GAAAA,sBAAA"}
@@ -0,0 +1,309 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.SimulateFileAudioStreamAdapter = void 0;
7
+ var _WavFileReader = require("../../utils/WavFileReader");
8
+ class SimulateFileAudioStreamAdapter {
9
+ config = null;
10
+ isInitialized = false;
11
+ recording = false;
12
+ currentBytePosition = 0;
13
+ startTime = 0;
14
+ pausedTime = 0;
15
+ hasReachedEnd = false;
16
+ constructor(options) {
17
+ this.options = {
18
+ playbackSpeed: 1.0,
19
+ chunkDurationMs: 100,
20
+ loop: false,
21
+ logger: () => {},
22
+ ...options
23
+ };
24
+ this.fileReader = new _WavFileReader.WavFileReader(this.options.fs, this.options.filePath);
25
+ }
26
+ async initialize(config) {
27
+ if (this.isInitialized) {
28
+ await this.release();
29
+ }
30
+ try {
31
+ this.config = config;
32
+
33
+ // Initialize the WAV file reader
34
+ await this.fileReader.initialize();
35
+
36
+ // Validate file format matches config
37
+ const header = this.fileReader.getHeader();
38
+ if (!header) {
39
+ throw new Error('Failed to read WAV file header');
40
+ }
41
+
42
+ // Warn about mismatched formats but allow processing
43
+ if (header.sampleRate !== config.sampleRate) {
44
+ this.log(`WAV file sample rate (${header.sampleRate}Hz) differs from config (${config.sampleRate}Hz)`);
45
+ }
46
+ if (header.channels !== config.channels) {
47
+ this.log(`WAV file channels (${header.channels}) differs from config (${config.channels})`);
48
+ }
49
+ if (header.bitsPerSample !== config.bitsPerSample) {
50
+ this.log(`WAV file bits per sample (${header.bitsPerSample}) differs from config (${config.bitsPerSample})`);
51
+ }
52
+ this.isInitialized = true;
53
+ this.log(`Simulate audio stream initialized: ${header.duration.toFixed(2)}s at ${this.options.playbackSpeed}x speed`);
54
+ } catch (error) {
55
+ var _this$errorCallback;
56
+ const errorMessage = error instanceof Error ? error.message : 'Unknown initialization error';
57
+ (_this$errorCallback = this.errorCallback) === null || _this$errorCallback === void 0 ? void 0 : _this$errorCallback.call(this, errorMessage);
58
+ throw new Error(`Failed to initialize SimulateFileAudioStreamAdapter: ${errorMessage}`);
59
+ }
60
+ }
61
+ async start() {
62
+ if (!this.isInitialized || !this.config) {
63
+ throw new Error('Adapter not initialized');
64
+ }
65
+ if (this.recording) {
66
+ return;
67
+ }
68
+ try {
69
+ var _this$statusCallback;
70
+ this.recording = true;
71
+ this.hasReachedEnd = false;
72
+ this.startTime = Date.now() - this.pausedTime;
73
+ (_this$statusCallback = this.statusCallback) === null || _this$statusCallback === void 0 ? void 0 : _this$statusCallback.call(this, true);
74
+
75
+ // Start streaming chunks
76
+ this.startStreaming();
77
+ this.log('File audio simulation started');
78
+ } catch (error) {
79
+ var _this$statusCallback2, _this$errorCallback2;
80
+ this.recording = false;
81
+ (_this$statusCallback2 = this.statusCallback) === null || _this$statusCallback2 === void 0 ? void 0 : _this$statusCallback2.call(this, false);
82
+ const errorMessage = error instanceof Error ? error.message : 'Unknown start error';
83
+ (_this$errorCallback2 = this.errorCallback) === null || _this$errorCallback2 === void 0 ? void 0 : _this$errorCallback2.call(this, errorMessage);
84
+ throw error;
85
+ }
86
+ }
87
+ async stop() {
88
+ if (!this.recording) {
89
+ return;
90
+ }
91
+ try {
92
+ var _this$statusCallback3;
93
+ this.recording = false;
94
+ this.pausedTime = Date.now() - this.startTime;
95
+
96
+ // Stop the streaming interval
97
+ if (this.streamInterval) {
98
+ clearInterval(this.streamInterval);
99
+ this.streamInterval = undefined;
100
+ }
101
+ (_this$statusCallback3 = this.statusCallback) === null || _this$statusCallback3 === void 0 ? void 0 : _this$statusCallback3.call(this, false);
102
+ this.log('File audio simulation stopped');
103
+ } catch (error) {
104
+ var _this$errorCallback3;
105
+ const errorMessage = error instanceof Error ? error.message : 'Unknown stop error';
106
+ (_this$errorCallback3 = this.errorCallback) === null || _this$errorCallback3 === void 0 ? void 0 : _this$errorCallback3.call(this, errorMessage);
107
+ }
108
+ }
109
+ isRecording() {
110
+ return this.recording;
111
+ }
112
+ onData(callback) {
113
+ this.dataCallback = callback;
114
+ }
115
+ onError(callback) {
116
+ this.errorCallback = callback;
117
+ }
118
+ onStatusChange(callback) {
119
+ this.statusCallback = callback;
120
+ }
121
+ async release() {
122
+ await this.stop();
123
+ this.isInitialized = false;
124
+ this.currentBytePosition = 0;
125
+ this.pausedTime = 0;
126
+ this.log('SimulateFileAudioStreamAdapter released');
127
+ }
128
+
129
+ /**
130
+ * Start the streaming process
131
+ */
132
+ startStreaming() {
133
+ if (!this.config || !this.isInitialized) {
134
+ return;
135
+ }
136
+ const header = this.fileReader.getHeader();
137
+ if (!header) {
138
+ var _this$errorCallback4;
139
+ (_this$errorCallback4 = this.errorCallback) === null || _this$errorCallback4 === void 0 ? void 0 : _this$errorCallback4.call(this, 'WAV file header not available');
140
+ return;
141
+ }
142
+
143
+ // Calculate chunk size based on desired duration
144
+ const chunkDurationSec = (this.options.chunkDurationMs || 100) / 1000;
145
+ const bytesPerSecond = header.sampleRate * header.channels * (header.bitsPerSample / 8);
146
+ const chunkSizeBytes = Math.floor(chunkDurationSec * bytesPerSecond);
147
+
148
+ // Adjust interval timing based on playback speed
149
+ const intervalMs = (this.options.chunkDurationMs || 100) / (this.options.playbackSpeed || 1.0);
150
+ this.streamInterval = setInterval(() => {
151
+ if (!this.recording) {
152
+ return;
153
+ }
154
+ try {
155
+ this.streamNextChunk(chunkSizeBytes);
156
+ } catch (error) {
157
+ var _this$errorCallback5;
158
+ const errorMessage = error instanceof Error ? error.message : 'Streaming error';
159
+ (_this$errorCallback5 = this.errorCallback) === null || _this$errorCallback5 === void 0 ? void 0 : _this$errorCallback5.call(this, errorMessage);
160
+ this.stop();
161
+ }
162
+ }, intervalMs);
163
+ }
164
+
165
+ /**
166
+ * Stream the next audio chunk
167
+ */
168
+ streamNextChunk(chunkSizeBytes) {
169
+ if (!this.dataCallback || !this.config) {
170
+ return;
171
+ }
172
+ const header = this.fileReader.getHeader();
173
+ if (!header) {
174
+ return;
175
+ }
176
+
177
+ // Get the next chunk of audio data
178
+ const audioChunk = this.fileReader.getAudioSlice(this.currentBytePosition, chunkSizeBytes);
179
+ if (!audioChunk || audioChunk.length === 0) {
180
+ // End of file reached
181
+ if (this.options.loop) {
182
+ // Reset to beginning for looping
183
+ this.currentBytePosition = 0;
184
+ this.startTime = Date.now();
185
+ this.pausedTime = 0;
186
+ this.hasReachedEnd = false;
187
+ this.log('Looping audio file simulation');
188
+ return;
189
+ }
190
+
191
+ // Stop streaming due to no new buffer
192
+ this.log('Audio file simulation completed - no new buffer available');
193
+ this.hasReachedEnd = true;
194
+
195
+ // Call the end-of-file callback if provided
196
+ if (this.options.onEndOfFile) {
197
+ this.log('Calling onEndOfFile callback');
198
+ this.options.onEndOfFile();
199
+ }
200
+
201
+ // Stop the stream
202
+ this.stop();
203
+ return;
204
+ }
205
+
206
+ // Update position
207
+ this.currentBytePosition += audioChunk.length;
208
+
209
+ // Create stream data using the original file's format
210
+ const streamData = {
211
+ data: audioChunk,
212
+ sampleRate: header.sampleRate,
213
+ channels: header.channels,
214
+ timestamp: Date.now()
215
+ };
216
+
217
+ // Send the chunk
218
+ this.dataCallback(streamData);
219
+ }
220
+
221
+ /**
222
+ * Get current playback statistics
223
+ */
224
+ getStatistics() {
225
+ const header = this.fileReader.getHeader();
226
+ const currentTime = this.fileReader.byteToTime(this.currentBytePosition);
227
+ return {
228
+ filePath: this.options.filePath,
229
+ isRecording: this.recording,
230
+ currentTime,
231
+ totalDuration: (header === null || header === void 0 ? void 0 : header.duration) || 0,
232
+ progress: header ? currentTime / header.duration : 0,
233
+ playbackSpeed: this.options.playbackSpeed,
234
+ currentBytePosition: this.currentBytePosition,
235
+ totalBytes: this.fileReader.getTotalDataSize(),
236
+ hasReachedEnd: this.hasReachedEnd,
237
+ header
238
+ };
239
+ }
240
+
241
+ /**
242
+ * Seek to a specific time position
243
+ */
244
+ seekToTime(timeSeconds) {
245
+ const header = this.fileReader.getHeader();
246
+ if (!header) {
247
+ return;
248
+ }
249
+ const clampedTime = Math.max(0, Math.min(timeSeconds, header.duration));
250
+ this.currentBytePosition = this.fileReader.timeToByte(clampedTime);
251
+
252
+ // Reset timing if we're currently playing
253
+ if (this.recording) {
254
+ this.startTime = Date.now() - clampedTime * 1000 / (this.options.playbackSpeed || 1.0);
255
+ this.pausedTime = 0;
256
+ }
257
+ this.log(`Seeked to ${clampedTime.toFixed(2)}s`);
258
+ }
259
+
260
+ /**
261
+ * Set playback speed
262
+ */
263
+ setPlaybackSpeed(speed) {
264
+ if (speed <= 0) {
265
+ throw new Error('Playback speed must be greater than 0');
266
+ }
267
+ this.options.playbackSpeed = speed;
268
+
269
+ // If currently playing, restart streaming with new speed
270
+ if (this.recording) {
271
+ this.stop().then(() => {
272
+ this.start();
273
+ });
274
+ }
275
+ this.log(`Playback speed set to ${speed}x`);
276
+ }
277
+
278
+ /**
279
+ * Reset file buffer to beginning
280
+ */
281
+ resetBuffer() {
282
+ this.log('Resetting file buffer to beginning');
283
+
284
+ // Reset position and timing
285
+ this.currentBytePosition = 0;
286
+ this.startTime = Date.now();
287
+ this.pausedTime = 0;
288
+ this.hasReachedEnd = false;
289
+
290
+ // If currently playing, restart streaming from beginning
291
+ if (this.recording) {
292
+ this.log('Restarting streaming from beginning');
293
+ // Stop and restart to apply the reset
294
+ this.stop().then(() => {
295
+ this.start();
296
+ });
297
+ }
298
+ }
299
+
300
+ /**
301
+ * Logger function
302
+ */
303
+ log(message) {
304
+ var _this$options$logger, _this$options;
305
+ (_this$options$logger = (_this$options = this.options).logger) === null || _this$options$logger === void 0 ? void 0 : _this$options$logger.call(_this$options, `[SimulateFileAudioStreamAdapter] ${message}`);
306
+ }
307
+ }
308
+ exports.SimulateFileAudioStreamAdapter = SimulateFileAudioStreamAdapter;
309
+ //# sourceMappingURL=SimulateFileAudioStreamAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_WavFileReader","require","SimulateFileAudioStreamAdapter","config","isInitialized","recording","currentBytePosition","startTime","pausedTime","hasReachedEnd","constructor","options","playbackSpeed","chunkDurationMs","loop","logger","fileReader","WavFileReader","fs","filePath","initialize","release","header","getHeader","Error","sampleRate","log","channels","bitsPerSample","duration","toFixed","error","_this$errorCallback","errorMessage","message","errorCallback","call","start","_this$statusCallback","Date","now","statusCallback","startStreaming","_this$statusCallback2","_this$errorCallback2","stop","_this$statusCallback3","streamInterval","clearInterval","undefined","_this$errorCallback3","isRecording","onData","callback","dataCallback","onError","onStatusChange","_this$errorCallback4","chunkDurationSec","bytesPerSecond","chunkSizeBytes","Math","floor","intervalMs","setInterval","streamNextChunk","_this$errorCallback5","audioChunk","getAudioSlice","length","onEndOfFile","streamData","data","timestamp","getStatistics","currentTime","byteToTime","totalDuration","progress","totalBytes","getTotalDataSize","seekToTime","timeSeconds","clampedTime","max","min","timeToByte","setPlaybackSpeed","speed","then","resetBuffer","_this$options$logger","_this$options","exports"],"sourceRoot":"../../../../src","sources":["realtime-transcription/adapters/SimulateFileAudioStreamAdapter.ts"],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "RealtimeTranscriber", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _RealtimeTranscriber.RealtimeTranscriber;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "SliceManager", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _SliceManager.SliceManager;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "VAD_PRESETS", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _types.VAD_PRESETS;
22
+ }
23
+ });
24
+ var _RealtimeTranscriber = require("./RealtimeTranscriber");
25
+ var _SliceManager = require("./SliceManager");
26
+ var _types = require("./types");
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_RealtimeTranscriber","require","_SliceManager","_types"],"sourceRoot":"../../../src","sources":["realtime-transcription/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AACA,IAAAA,oBAAA,GAAAC,OAAA;AAGA,IAAAC,aAAA,GAAAD,OAAA;AA6BA,IAAAE,MAAA,GAAAF,OAAA"}
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.VAD_PRESETS = void 0;
7
+ // === Audio Stream Interfaces ===
8
+
9
+ // === Enhanced VAD Options ===
10
+
11
+ // Pre-defined VAD configurations for different use cases
12
+ /**
13
+ * VAD Presets Overview:
14
+ *
15
+ * VAD Presets
16
+ * / | \
17
+ * Conservative Default Sensitive
18
+ * / | | \
19
+ * conservative very-conservative sensitive very-sensitive
20
+ * (0.7 thresh) (0.8 thresh) (0.3 thresh) (0.2 thresh)
21
+ * 500ms min 750ms min 100ms min 100ms min
22
+ * Clear speech Very clear Quiet env Catches whispers
23
+ *
24
+ * Specialized Presets
25
+ * / | \
26
+ * continuous meeting noisy
27
+ * (60s max) (45s max) (0.75 thresh)
28
+ * Lectures Multi-spk Strict for noise
29
+ *
30
+ * Key Parameters:
31
+ * - threshold: 0.0-1.0 (lower = more sensitive)
32
+ * - minSpeechDurationMs: Min duration to consider speech
33
+ * - minSilenceDurationMs: Min silence before ending speech
34
+ * - maxSpeechDurationS: Max continuous speech duration
35
+ * - speechPadMs: Padding around detected speech
36
+ * - samplesOverlap: Analysis window overlap (0.0-1.0)
37
+ */
38
+ const VAD_PRESETS = {
39
+ // Default - balanced performance
40
+ default: {
41
+ threshold: 0.5,
42
+ minSpeechDurationMs: 250,
43
+ minSilenceDurationMs: 100,
44
+ maxSpeechDurationS: 30,
45
+ speechPadMs: 30,
46
+ samplesOverlap: 0.1
47
+ },
48
+ // Sensitive - good for quiet environments
49
+ sensitive: {
50
+ threshold: 0.3,
51
+ minSpeechDurationMs: 100,
52
+ minSilenceDurationMs: 50,
53
+ maxSpeechDurationS: 15,
54
+ speechPadMs: 50,
55
+ samplesOverlap: 0.2
56
+ },
57
+ // Very sensitive - catches even quiet speech
58
+ 'very-sensitive': {
59
+ threshold: 0.2,
60
+ minSpeechDurationMs: 100,
61
+ minSilenceDurationMs: 50,
62
+ maxSpeechDurationS: 15,
63
+ speechPadMs: 100,
64
+ samplesOverlap: 0.3
65
+ },
66
+ // Conservative - avoids false positives
67
+ conservative: {
68
+ threshold: 0.7,
69
+ minSpeechDurationMs: 500,
70
+ minSilenceDurationMs: 200,
71
+ maxSpeechDurationS: 25,
72
+ speechPadMs: 20,
73
+ samplesOverlap: 0.05
74
+ },
75
+ // Very conservative - only clear speech
76
+ 'very-conservative': {
77
+ threshold: 0.8,
78
+ minSpeechDurationMs: 750,
79
+ minSilenceDurationMs: 300,
80
+ maxSpeechDurationS: 20,
81
+ speechPadMs: 10,
82
+ samplesOverlap: 0.05
83
+ },
84
+ // Continuous speech - for presentations/lectures
85
+ continuous: {
86
+ threshold: 0.4,
87
+ minSpeechDurationMs: 200,
88
+ minSilenceDurationMs: 300,
89
+ maxSpeechDurationS: 60,
90
+ // Longer segments
91
+ speechPadMs: 50,
92
+ samplesOverlap: 0.15
93
+ },
94
+ // Meeting mode - handles multiple speakers
95
+ meeting: {
96
+ threshold: 0.45,
97
+ minSpeechDurationMs: 300,
98
+ minSilenceDurationMs: 150,
99
+ maxSpeechDurationS: 45,
100
+ speechPadMs: 75,
101
+ samplesOverlap: 0.2
102
+ },
103
+ // Noisy environment - more strict thresholds
104
+ noisy: {
105
+ threshold: 0.75,
106
+ minSpeechDurationMs: 400,
107
+ minSilenceDurationMs: 100,
108
+ maxSpeechDurationS: 25,
109
+ speechPadMs: 40,
110
+ samplesOverlap: 0.1
111
+ }
112
+ };
113
+ exports.VAD_PRESETS = VAD_PRESETS;
114
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["VAD_PRESETS","default","threshold","minSpeechDurationMs","minSilenceDurationMs","maxSpeechDurationS","speechPadMs","samplesOverlap","sensitive","conservative","continuous","meeting","noisy","exports"],"sourceRoot":"../../../src","sources":["realtime-transcription/types.ts"],"mappings":";;;;;;AAGA;;AA4BA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,WAAW,GAAG;EACzB;EACAC,OAAO,EAAE;IACPC,SAAS,EAAE,GAAG;IACdC,mBAAmB,EAAE,GAAG;IACxBC,oBAAoB,EAAE,GAAG;IACzBC,kBAAkB,EAAE,EAAE;IACtBC,WAAW,EAAE,EAAE;IACfC,cAAc,EAAE;EAClB,CAAC;EAED;EACAC,SAAS,EAAE;IACTN,SAAS,EAAE,GAAG;IACdC,mBAAmB,EAAE,GAAG;IACxBC,oBAAoB,EAAE,EAAE;IACxBC,kBAAkB,EAAE,EAAE;IACtBC,WAAW,EAAE,EAAE;IACfC,cAAc,EAAE;EAClB,CAAC;EAED;EACA,gBAAgB,EAAE;IAChBL,SAAS,EAAE,GAAG;IACdC,mBAAmB,EAAE,GAAG;IACxBC,oBAAoB,EAAE,EAAE;IACxBC,kBAAkB,EAAE,EAAE;IACtBC,WAAW,EAAE,GAAG;IAChBC,cAAc,EAAE;EAClB,CAAC;EAED;EACAE,YAAY,EAAE;IACZP,SAAS,EAAE,GAAG;IACdC,mBAAmB,EAAE,GAAG;IACxBC,oBAAoB,EAAE,GAAG;IACzBC,kBAAkB,EAAE,EAAE;IACtBC,WAAW,EAAE,EAAE;IACfC,cAAc,EAAE;EAClB,CAAC;EAED;EACA,mBAAmB,EAAE;IACnBL,SAAS,EAAE,GAAG;IACdC,mBAAmB,EAAE,GAAG;IACxBC,oBAAoB,EAAE,GAAG;IACzBC,kBAAkB,EAAE,EAAE;IACtBC,WAAW,EAAE,EAAE;IACfC,cAAc,EAAE;EAClB,CAAC;EAED;EACAG,UAAU,EAAE;IACVR,SAAS,EAAE,GAAG;IACdC,mBAAmB,EAAE,GAAG;IACxBC,oBAAoB,EAAE,GAAG;IACzBC,kBAAkB,EAAE,EAAE;IAAE;IACxBC,WAAW,EAAE,EAAE;IACfC,cAAc,EAAE;EAClB,CAAC;EAED;EACAI,OAAO,EAAE;IACPT,SAAS,EAAE,IAAI;IACfC,mBAAmB,EAAE,GAAG;IACxBC,oBAAoB,EAAE,GAAG;IACzBC,kBAAkB,EAAE,EAAE;IACtBC,WAAW,EAAE,EAAE;IACfC,cAAc,EAAE;EAClB,CAAC;EAED;EACAK,KAAK,EAAE;IACLV,SAAS,EAAE,IAAI;IACfC,mBAAmB,EAAE,GAAG;IACxBC,oBAAoB,EAAE,GAAG;IACzBC,kBAAkB,EAAE,EAAE;IACtBC,WAAW,EAAE,EAAE;IACfC,cAAc,EAAE;EAClB;AACF,CAAC;AAAAM,OAAA,CAAAb,WAAA,GAAAA,WAAA"}
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.WavFileReader = void 0;
7
+ var _common = require("./common");
8
+ class WavFileReader {
9
+ header = null;
10
+ audioData = null;
11
+ constructor(fs, filePath) {
12
+ this.fs = fs;
13
+ this.filePath = filePath;
14
+ }
15
+
16
+ /**
17
+ * Read and parse the WAV file
18
+ */
19
+ async initialize() {
20
+ try {
21
+ // Check if file exists
22
+ const exists = await this.fs.exists(this.filePath);
23
+ if (!exists) {
24
+ throw new Error(`WAV file not found: ${this.filePath}`);
25
+ }
26
+
27
+ // Read the entire file
28
+ const fileContent = await this.fs.readFile(this.filePath, 'base64');
29
+ const fileData = (0, _common.base64ToUint8Array)(fileContent);
30
+
31
+ // Parse WAV header
32
+ this.header = WavFileReader.parseWavHeader(fileData);
33
+
34
+ // Extract audio data (skip the 44-byte header)
35
+ this.audioData = fileData.slice(44, 44 + this.header.dataSize);
36
+ console.log(`WAV file loaded: ${this.header.duration.toFixed(2)}s, ${this.header.sampleRate}Hz, ${this.header.channels}ch`);
37
+ } catch (error) {
38
+ throw new Error(`Failed to initialize WAV file reader: ${error}`);
39
+ }
40
+ }
41
+
42
+ /**
43
+ * Parse WAV file header
44
+ */
45
+ static parseWavHeader(data) {
46
+ const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
47
+
48
+ // Verify RIFF header
49
+ const riffHeader = String.fromCharCode(...data.slice(0, 4));
50
+ if (riffHeader !== 'RIFF') {
51
+ throw new Error('Invalid WAV file: Missing RIFF header');
52
+ }
53
+
54
+ // Verify WAVE format
55
+ const waveHeader = String.fromCharCode(...data.slice(8, 12));
56
+ if (waveHeader !== 'WAVE') {
57
+ throw new Error('Invalid WAV file: Missing WAVE header');
58
+ }
59
+
60
+ // Read format chunk
61
+ const fmtHeader = String.fromCharCode(...data.slice(12, 16));
62
+ if (fmtHeader !== 'fmt ') {
63
+ throw new Error('Invalid WAV file: Missing fmt chunk');
64
+ }
65
+ const audioFormat = view.getUint16(20, true);
66
+ if (audioFormat !== 1) {
67
+ throw new Error('Unsupported WAV format: Only PCM is supported');
68
+ }
69
+ const channels = view.getUint16(22, true);
70
+ const sampleRate = view.getUint32(24, true);
71
+ const bitsPerSample = view.getUint16(34, true);
72
+
73
+ // Find data chunk
74
+ let dataOffset = 36;
75
+ while (dataOffset < data.length - 8) {
76
+ const chunkId = String.fromCharCode(...data.slice(dataOffset, dataOffset + 4));
77
+ const chunkSize = view.getUint32(dataOffset + 4, true);
78
+ if (chunkId === 'data') {
79
+ const dataSize = chunkSize;
80
+ const duration = dataSize / (sampleRate * channels * (bitsPerSample / 8));
81
+ return {
82
+ sampleRate,
83
+ channels,
84
+ bitsPerSample,
85
+ dataSize,
86
+ duration
87
+ };
88
+ }
89
+ dataOffset += 8 + chunkSize;
90
+ }
91
+ throw new Error('Invalid WAV file: Missing data chunk');
92
+ }
93
+
94
+ /**
95
+ * Get audio data slice
96
+ */
97
+ getAudioSlice(startByte, lengthBytes) {
98
+ if (!this.audioData) {
99
+ return null;
100
+ }
101
+ const start = Math.max(0, startByte);
102
+ const end = Math.min(this.audioData.length, startByte + lengthBytes);
103
+ if (start >= end) {
104
+ return null;
105
+ }
106
+ return this.audioData.slice(start, end);
107
+ }
108
+ getAudioData() {
109
+ return this.audioData;
110
+ }
111
+
112
+ /**
113
+ * Get WAV file header information
114
+ */
115
+ getHeader() {
116
+ return this.header;
117
+ }
118
+
119
+ /**
120
+ * Get total audio data size
121
+ */
122
+ getTotalDataSize() {
123
+ var _this$header;
124
+ return ((_this$header = this.header) === null || _this$header === void 0 ? void 0 : _this$header.dataSize) || 0;
125
+ }
126
+
127
+ /**
128
+ * Convert byte position to time in seconds
129
+ */
130
+ byteToTime(bytePosition) {
131
+ if (!this.header) return 0;
132
+ const bytesPerSecond = this.header.sampleRate * this.header.channels * (this.header.bitsPerSample / 8);
133
+ return bytePosition / bytesPerSecond;
134
+ }
135
+
136
+ /**
137
+ * Convert time in seconds to byte position
138
+ */
139
+ timeToByte(timeSeconds) {
140
+ if (!this.header) return 0;
141
+ const bytesPerSecond = this.header.sampleRate * this.header.channels * (this.header.bitsPerSample / 8);
142
+ return Math.floor(timeSeconds * bytesPerSecond);
143
+ }
144
+
145
+ /**
146
+ * Get file statistics
147
+ */
148
+ getStatistics() {
149
+ return {
150
+ filePath: this.filePath,
151
+ header: this.header,
152
+ totalDataSize: this.getTotalDataSize(),
153
+ isInitialized: !!this.header
154
+ };
155
+ }
156
+ }
157
+ exports.WavFileReader = WavFileReader;
158
+ //# sourceMappingURL=WavFileReader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_common","require","WavFileReader","header","audioData","constructor","fs","filePath","initialize","exists","Error","fileContent","readFile","fileData","base64ToUint8Array","parseWavHeader","slice","dataSize","console","log","duration","toFixed","sampleRate","channels","error","data","view","DataView","buffer","byteOffset","byteLength","riffHeader","String","fromCharCode","waveHeader","fmtHeader","audioFormat","getUint16","getUint32","bitsPerSample","dataOffset","length","chunkId","chunkSize","getAudioSlice","startByte","lengthBytes","start","Math","max","end","min","getAudioData","getHeader","getTotalDataSize","_this$header","byteToTime","bytePosition","bytesPerSecond","timeToByte","timeSeconds","floor","getStatistics","totalDataSize","isInitialized","exports"],"sourceRoot":"../../../src","sources":["utils/WavFileReader.ts"],"mappings":"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"}