@mingxy/ocosay 1.0.20 → 1.0.21

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.
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Howler.js Backend - 基于 howler.js 的跨平台音频播放后端
3
+ * 支持流式播放(边收边播)
4
+ */
5
+ import { AudioBackend, BackendOptions } from './base';
6
+ export declare class HowlerBackend implements AudioBackend {
7
+ readonly name = "howler";
8
+ readonly supportsStreaming = true;
9
+ private howl;
10
+ private events?;
11
+ private _started;
12
+ private _paused;
13
+ private _stopped;
14
+ private volume;
15
+ private bytesWritten;
16
+ private blobUrl;
17
+ private format;
18
+ constructor(options?: BackendOptions);
19
+ start(_filePath: string): void;
20
+ write(chunk: Buffer): void;
21
+ end(): void;
22
+ pause(): void;
23
+ resume(): void;
24
+ stop(): void;
25
+ getCurrentTime(): number | undefined;
26
+ getDuration(): number | undefined;
27
+ setVolume(volume: number): void;
28
+ destroy(): void;
29
+ private handleError;
30
+ }
31
+ //# sourceMappingURL=howler-backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"howler-backend.d.ts","sourceRoot":"","sources":["../../../src/core/backends/howler-backend.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,YAAY,EAAsB,cAAc,EAAE,MAAM,QAAQ,CAAA;AAEzE,qBAAa,aAAc,YAAW,YAAY;IAChD,QAAQ,CAAC,IAAI,YAAW;IACxB,QAAQ,CAAC,iBAAiB,QAAO;IAEjC,OAAO,CAAC,IAAI,CAAoB;IAChC,OAAO,CAAC,MAAM,CAAC,CAAoB;IACnC,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,YAAY,CAAI;IACxB,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,MAAM,CAAwB;gBAE1B,OAAO,GAAE,cAAmB;IAMxC,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAyC9B,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IA6D1B,GAAG,IAAI,IAAI;IAIX,KAAK,IAAI,IAAI;IAUb,MAAM,IAAI,IAAI;IAUd,IAAI,IAAI,IAAI;IAwBZ,cAAc,IAAI,MAAM,GAAG,SAAS;IAOpC,WAAW,IAAI,MAAM,GAAG,SAAS;IAOjC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAO/B,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,WAAW;CAGpB"}
@@ -0,0 +1,183 @@
1
+ /**
2
+ * Howler.js Backend - 基于 howler.js 的跨平台音频播放后端
3
+ * 支持流式播放(边收边播)
4
+ */
5
+ import { Howl } from 'howler';
6
+ export class HowlerBackend {
7
+ name = 'howler';
8
+ supportsStreaming = true; // 支持流式播放
9
+ howl = null;
10
+ events;
11
+ _started = false;
12
+ _paused = false;
13
+ _stopped = false;
14
+ volume = 1.0;
15
+ bytesWritten = 0;
16
+ blobUrl = null;
17
+ format;
18
+ constructor(options = {}) {
19
+ this.events = options.events;
20
+ this.volume = options.volume ?? 1.0;
21
+ this.format = options.format || 'mp3';
22
+ }
23
+ start(_filePath) {
24
+ if (this._started) {
25
+ this.stop();
26
+ }
27
+ this._started = true;
28
+ this._stopped = false;
29
+ this._paused = false;
30
+ this.bytesWritten = 0;
31
+ // 创建空的 Howl 对象,稍后通过流式数据填充
32
+ this.howl = new Howl({
33
+ src: [''], // 初始为空
34
+ html5: true, // 启用 HTML5 Audio 模式支持流式
35
+ volume: this.volume,
36
+ format: [this.format],
37
+ onplay: () => {
38
+ this.events?.onStart?.();
39
+ },
40
+ onpause: () => {
41
+ if (!this._stopped) {
42
+ this.events?.onPause?.();
43
+ }
44
+ },
45
+ onstop: () => {
46
+ if (!this._stopped) {
47
+ this.events?.onStop?.();
48
+ }
49
+ },
50
+ onend: () => {
51
+ this.events?.onEnd?.();
52
+ },
53
+ onloaderror: (_id, error) => {
54
+ this.handleError(new Error(`Howler load error: ${error}`));
55
+ },
56
+ onplayerror: (_id, error) => {
57
+ this.handleError(new Error(`Howler play error: ${error}`));
58
+ }
59
+ });
60
+ }
61
+ write(chunk) {
62
+ if (!this._started || this._stopped)
63
+ return;
64
+ if (!this.howl)
65
+ return;
66
+ this.bytesWritten += chunk.length;
67
+ this.events?.onProgress?.(this.bytesWritten);
68
+ // Howler 不支持直接 Buffer 流式写入
69
+ // 对于流式播放,我们创建 Blob URL 并重新加载
70
+ const blob = new Blob([chunk], { type: `audio/${this.format}` });
71
+ // 清理旧的 blob URL
72
+ if (this.blobUrl) {
73
+ URL.revokeObjectURL(this.blobUrl);
74
+ }
75
+ this.blobUrl = URL.createObjectURL(blob);
76
+ // 停止当前播放并重新加载
77
+ const wasPlaying = this.howl.playing();
78
+ this.howl.stop();
79
+ this.howl.unload();
80
+ // 创建新的 Howl 实例
81
+ this.howl = new Howl({
82
+ src: [this.blobUrl],
83
+ html5: true,
84
+ volume: this.volume,
85
+ format: [this.format],
86
+ onplay: () => {
87
+ if (!wasPlaying) {
88
+ this.events?.onStart?.();
89
+ }
90
+ },
91
+ onpause: () => {
92
+ if (!this._stopped) {
93
+ this.events?.onPause?.();
94
+ }
95
+ },
96
+ onstop: () => {
97
+ if (!this._stopped) {
98
+ this.events?.onStop?.();
99
+ }
100
+ },
101
+ onend: () => {
102
+ this.events?.onEnd?.();
103
+ },
104
+ onloaderror: (_id, error) => {
105
+ this.handleError(new Error(`Howler load error: ${error}`));
106
+ },
107
+ onplayerror: (_id, error) => {
108
+ this.handleError(new Error(`Howler play error: ${error}`));
109
+ }
110
+ });
111
+ // 如果之前在播放或者需要自动播放
112
+ if (wasPlaying || this._started) {
113
+ this.howl.play();
114
+ }
115
+ }
116
+ end() {
117
+ // 流式写入结束,不停止播放,让其播完
118
+ }
119
+ pause() {
120
+ if (!this._started || this._paused || this._stopped)
121
+ return;
122
+ if (this.howl && this.howl.playing()) {
123
+ this.howl.pause();
124
+ this._paused = true;
125
+ this.events?.onPause?.();
126
+ }
127
+ }
128
+ resume() {
129
+ if (!this._paused || this._stopped)
130
+ return;
131
+ if (this.howl) {
132
+ this.howl.play();
133
+ this._paused = false;
134
+ this.events?.onResume?.();
135
+ }
136
+ }
137
+ stop() {
138
+ this._stopped = true;
139
+ this._started = false;
140
+ this._paused = false;
141
+ if (this.howl) {
142
+ try {
143
+ this.howl.stop();
144
+ this.howl.unload();
145
+ }
146
+ catch (e) {
147
+ // 忽略停止错误
148
+ }
149
+ this.howl = null;
150
+ }
151
+ if (this.blobUrl) {
152
+ URL.revokeObjectURL(this.blobUrl);
153
+ this.blobUrl = null;
154
+ }
155
+ this.bytesWritten = 0;
156
+ this.events?.onStop?.();
157
+ }
158
+ getCurrentTime() {
159
+ if (this.howl) {
160
+ return this.howl.seek();
161
+ }
162
+ return undefined;
163
+ }
164
+ getDuration() {
165
+ if (this.howl) {
166
+ return this.howl.duration();
167
+ }
168
+ return undefined;
169
+ }
170
+ setVolume(volume) {
171
+ this.volume = Math.max(0, Math.min(1, volume));
172
+ if (this.howl) {
173
+ this.howl.volume(this.volume);
174
+ }
175
+ }
176
+ destroy() {
177
+ this.stop();
178
+ }
179
+ handleError(error) {
180
+ this.events?.onError?.(error);
181
+ }
182
+ }
183
+ //# sourceMappingURL=howler-backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"howler-backend.js","sourceRoot":"","sources":["../../../src/core/backends/howler-backend.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ export { NaudiodonBackend } from './naudiodon-backend';
6
6
  export { AfplayBackend } from './afplay-backend';
7
7
  export { AplayBackend } from './aplay-backend';
8
8
  export { PowerShellBackend } from './powershell-backend';
9
+ export { HowlerBackend } from './howler-backend';
9
10
  import { AudioBackend, BackendOptions } from './base';
10
11
  /**
11
12
  * 后端类型枚举
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/backends/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAA;AAGzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAExD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAA;AAMrD;;GAEG;AACH,oBAAY,WAAW;IACrB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,UAAU,eAAe;IACzB,IAAI,SAAS;CACd;AA0BD,wBAAgB,KAAK,IAAI,OAAO,CAO/B;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,GAAE,WAA8B,EAAE,OAAO,GAAE,cAAmB,GAAG,YAAY,CA6B9G;AAiBD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAK5D;AAED,wBAAgB,qBAAqB,IAAI,WAAW,CAiBnD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/backends/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAA;AAGzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAEhD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAA;AAMrD;;GAEG;AACH,oBAAY,WAAW;IACrB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,UAAU,eAAe;IACzB,IAAI,SAAS;CACd;AA0BD,wBAAgB,KAAK,IAAI,OAAO,CAO/B;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,GAAE,WAA8B,EAAE,OAAO,GAAE,cAAmB,GAAG,YAAY,CA6B9G;AAiBD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAK5D;AAED,wBAAgB,qBAAqB,IAAI,WAAW,CAiBnD"}
@@ -6,6 +6,7 @@ export { NaudiodonBackend } from './naudiodon-backend';
6
6
  export { AfplayBackend } from './afplay-backend';
7
7
  export { AplayBackend } from './aplay-backend';
8
8
  export { PowerShellBackend } from './powershell-backend';
9
+ export { HowlerBackend } from './howler-backend';
9
10
  import { NaudiodonBackend } from './naudiodon-backend';
10
11
  import { AfplayBackend } from './afplay-backend';
11
12
  import { AplayBackend } from './aplay-backend';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/backends/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/backends/index.ts"],"names":[],"mappings":"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"}
@@ -37,7 +37,7 @@ export declare class AudioPlayer extends EventEmitter implements Player {
37
37
  protected events?: PlayerEvents | undefined;
38
38
  private _playing;
39
39
  private _paused;
40
- private currentProcess?;
40
+ private backend;
41
41
  private currentFile?;
42
42
  constructor(events?: PlayerEvents | undefined);
43
43
  /**
@@ -48,21 +48,11 @@ export declare class AudioPlayer extends EventEmitter implements Player {
48
48
  play(audioData: Buffer | ReadableStream, format: string): Promise<void>;
49
49
  /**
50
50
  * 播放音频文件
51
- * 优先使用 afplay (macOS), aplay (Linux), 否则用 PowerShell (Windows)
51
+ * 使用 AudioBackend 统一后端播放
52
52
  */
53
53
  private playFile;
54
- /**
55
- * 暂停播放
56
- * 注意: 目前通过 SIGSTOP 实现,真正的 pause 需要支持暂停的音频库
57
- */
58
54
  pause(): void;
59
- /**
60
- * 恢复播放
61
- */
62
55
  resume(): void;
63
- /**
64
- * 停止播放
65
- */
66
56
  stop(): Promise<void>;
67
57
  /**
68
58
  * 是否正在播放
@@ -1 +1 @@
1
- {"version":3,"file":"player.d.ts","sourceRoot":"","sources":["../../src/core/player.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAQrC;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,IAAI,CAAA;IAClB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAChC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IACnE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACvE,KAAK,IAAI,IAAI,CAAA;IACb,MAAM,IAAI,IAAI,CAAA;IACd,IAAI,IAAI,IAAI,CAAA;IACZ,SAAS,IAAI,OAAO,CAAA;IACpB,QAAQ,IAAI,OAAO,CAAA;CACpB;AAED;;;GAGG;AACH,qBAAa,WAAY,SAAQ,YAAa,YAAW,MAAM;IAMjD,SAAS,CAAC,MAAM,CAAC,EAAE,YAAY;IAL3C,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,cAAc,CAAC,CAAc;IACrC,OAAO,CAAC,WAAW,CAAC,CAAQ;gBAEN,MAAM,CAAC,EAAE,YAAY,YAAA;IAI3C;;;;OAIG;IACG,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmE7E;;;OAGG;IACH,OAAO,CAAC,QAAQ;IA2ChB;;;OAGG;IACH,KAAK,IAAI,IAAI;IAeb;;OAEG;IACH,MAAM,IAAI,IAAI;IAed;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB3B;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACH,OAAO,CAAC,OAAO;CAYhB;AAED;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,WAAW;IAC9C,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,cAAc,CAAI;gBAEd,MAAM,CAAC,EAAE,YAAY;IAIjC;;;;;OAKG;IACG,aAAa,CACjB,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC;CAoCjB;AAED,eAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"player.d.ts","sourceRoot":"","sources":["../../src/core/player.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AASrC;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,IAAI,CAAA;IAClB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAChC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IACnE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACvE,KAAK,IAAI,IAAI,CAAA;IACb,MAAM,IAAI,IAAI,CAAA;IACd,IAAI,IAAI,IAAI,CAAA;IACZ,SAAS,IAAI,OAAO,CAAA;IACpB,QAAQ,IAAI,OAAO,CAAA;CACpB;AAED;;;GAGG;AACH,qBAAa,WAAY,SAAQ,YAAa,YAAW,MAAM;IAMjD,SAAS,CAAC,MAAM,CAAC,EAAE,YAAY;IAL3C,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,WAAW,CAAC,CAAQ;gBAEN,MAAM,CAAC,EAAE,YAAY,YAAA;IAwC3C;;;;OAIG;IACG,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmE7E;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAMhB,KAAK,IAAI,IAAI;IAMb,MAAM,IAAI,IAAI;IAMR,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACH,OAAO,CAAC,OAAO;CAYhB;AAED;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,WAAW;IAC9C,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,cAAc,CAAI;gBAEd,MAAM,CAAC,EAAE,YAAY;IAIjC;;;;;OAKG;IACG,aAAa,CACjB,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC;CAoCjB;AAED,eAAe,WAAW,CAAA"}
@@ -3,12 +3,12 @@
3
3
  * 音频播放引擎 - 支持 pause/resume/stop 和流式播放
4
4
  */
5
5
  import { EventEmitter } from 'events';
6
- import { spawn } from 'child_process';
7
6
  import fs from 'fs';
8
7
  import { createWriteStream } from 'fs';
9
8
  import { tmpdir } from 'os';
10
9
  import { join } from 'path';
11
10
  import { TTSError, TTSErrorCode } from './types';
11
+ import { createBackend, BackendType } from './backends';
12
12
  /**
13
13
  * AudioPlayer - 基于系统播放器的音频播放实现
14
14
  * 支持 macOS (afplay), Linux (aplay), Windows (PowerShell)
@@ -17,11 +17,43 @@ export class AudioPlayer extends EventEmitter {
17
17
  events;
18
18
  _playing = false;
19
19
  _paused = false;
20
- currentProcess;
20
+ backend;
21
21
  currentFile;
22
22
  constructor(events) {
23
23
  super();
24
24
  this.events = events;
25
+ this.backend = createBackend(BackendType.AUTO, {
26
+ events: {
27
+ onStart: () => {
28
+ this.events?.onStart?.();
29
+ this.emit('start');
30
+ },
31
+ onEnd: () => {
32
+ this._playing = false;
33
+ this.events?.onEnd?.();
34
+ this.emit('end');
35
+ this.cleanup();
36
+ },
37
+ onError: (error) => {
38
+ this._playing = false;
39
+ const ttsError = new TTSError(error.message || 'Playback failed', TTSErrorCode.PLAYER_ERROR, 'player');
40
+ this.events?.onError?.(ttsError);
41
+ this.emit('error', ttsError);
42
+ },
43
+ onPause: () => {
44
+ this.events?.onPause?.();
45
+ this.emit('pause');
46
+ },
47
+ onResume: () => {
48
+ this.events?.onResume?.();
49
+ this.emit('resume');
50
+ },
51
+ onStop: () => {
52
+ this.events?.onStop?.();
53
+ this.emit('stop');
54
+ }
55
+ }
56
+ });
25
57
  }
26
58
  /**
27
59
  * 播放音频
@@ -86,104 +118,30 @@ export class AudioPlayer extends EventEmitter {
86
118
  }
87
119
  /**
88
120
  * 播放音频文件
89
- * 优先使用 afplay (macOS), aplay (Linux), 否则用 PowerShell (Windows)
121
+ * 使用 AudioBackend 统一后端播放
90
122
  */
91
- playFile(filePath, format) {
92
- const platform = process.platform;
93
- return new Promise((resolve, reject) => {
94
- let command;
95
- let args;
96
- if (platform === 'darwin') {
97
- // macOS
98
- command = 'afplay';
99
- args = [filePath];
100
- }
101
- else if (platform === 'linux') {
102
- // Linux
103
- command = 'aplay';
104
- args = [filePath];
105
- }
106
- else {
107
- // Windows 或其他
108
- command = 'powershell';
109
- args = ['-c', `(New-Object System.Media.SoundPlayer('${filePath.replace(/\\/g, '\\\\')}')).PlaySync()`];
110
- }
111
- this.currentProcess = spawn(command, args, {
112
- stdio: 'ignore',
113
- detached: false
114
- });
115
- this.currentProcess.on('exit', (code, signal) => {
116
- // 如果是被信号终止(如 SIGTERM),不当作错误
117
- if (signal === 'SIGTERM' || signal === 'SIGINT') {
118
- resolve();
119
- }
120
- else if (code === 0) {
121
- resolve();
122
- }
123
- else {
124
- reject(new Error(`Player exited with code ${code}`));
125
- }
126
- });
127
- this.currentProcess.on('error', (error) => {
128
- reject(error);
129
- });
123
+ playFile(filePath, _format) {
124
+ return new Promise((_resolve, _reject) => {
125
+ this.backend.start(filePath);
130
126
  });
131
127
  }
132
- /**
133
- * 暂停播放
134
- * 注意: 目前通过 SIGSTOP 实现,真正的 pause 需要支持暂停的音频库
135
- */
136
128
  pause() {
137
129
  if (!this._playing || this._paused)
138
130
  return;
139
- if (this.currentProcess) {
140
- try {
141
- this.currentProcess.kill('SIGSTOP');
142
- this._paused = true;
143
- this.events?.onPause?.();
144
- this.emit('pause');
145
- }
146
- catch (e) {
147
- // 如果 kill 失败,忽略
148
- }
149
- }
131
+ this.backend.pause();
132
+ this._paused = true;
150
133
  }
151
- /**
152
- * 恢复播放
153
- */
154
134
  resume() {
155
135
  if (!this._playing || !this._paused)
156
136
  return;
157
- if (this.currentProcess) {
158
- try {
159
- this.currentProcess.kill('SIGCONT');
160
- this._paused = false;
161
- this.events?.onResume?.();
162
- this.emit('resume');
163
- }
164
- catch (e) {
165
- // 如果 kill 失败,忽略
166
- }
167
- }
137
+ this.backend.resume();
138
+ this._paused = false;
168
139
  }
169
- /**
170
- * 停止播放
171
- */
172
140
  async stop() {
173
141
  this._playing = false;
174
142
  this._paused = false;
175
- if (this.currentProcess) {
176
- try {
177
- this.currentProcess.kill('SIGTERM');
178
- }
179
- catch (e) {
180
- // 忽略错误
181
- }
182
- this.currentProcess = undefined;
183
- }
143
+ this.backend.stop();
184
144
  this.cleanup();
185
- this.events?.onStop?.();
186
- this.emit('stop');
187
145
  }
188
146
  /**
189
147
  * 是否正在播放
@@ -1 +1 @@
1
- {"version":3,"file":"player.js","sourceRoot":"","sources":["../../src/core/player.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"player.js","sourceRoot":"","sources":["../../src/core/player.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
1
  /**
2
2
  * StreamPlayer - 真正的边收边播流式音频播放器
3
- * 接收音频 chunk,同时写入临时文件并立即启动播放器播放
3
+ * 使用 AudioBackend 实现真正的流式播放(不写临时文件)
4
4
  */
5
5
  import { EventEmitter } from 'events';
6
+ import { BackendType } from './backends';
6
7
  /**
7
8
  * StreamPlayer Events - 流式播放器事件回调接口
8
9
  */
@@ -21,19 +22,18 @@ export interface StreamPlayerEvents {
21
22
  export interface StreamPlayerOptions {
22
23
  format?: 'mp3' | 'wav' | 'flac';
23
24
  events?: StreamPlayerEvents;
25
+ backendType?: BackendType;
24
26
  }
25
27
  /**
26
28
  * StreamPlayer - 边收边播的流式音频播放器
27
29
  *
28
30
  * 特性:
29
- * - 写入临时文件的同时立即启动播放器
31
+ * - 使用 AudioBackend 实现真正的边收边播
32
+ * - 不写临时文件,直接流式播放
30
33
  * - 支持 pause/resume/stop 控制
31
- * - 跨平台支持:macOS (afplay), Linux (aplay), Windows (PowerShell)
32
34
  */
33
35
  export declare class StreamPlayer extends EventEmitter {
34
- private tempFile;
35
- private writeStream?;
36
- private playerProcess?;
36
+ private backend;
37
37
  private _bytesWritten;
38
38
  private _started;
39
39
  private _paused;
@@ -43,31 +43,26 @@ export declare class StreamPlayer extends EventEmitter {
43
43
  constructor(options?: StreamPlayerOptions);
44
44
  /**
45
45
  * 开始播放
46
- * 创建临时文件,创建写入流,启动播放器进程
46
+ * 初始化后端,准备接收音频数据
47
47
  */
48
48
  start(): void;
49
49
  /**
50
- * 启动播放器进程
51
- */
52
- private startPlayer;
53
- /**
54
- * 写入音频数据块(边收边写)
50
+ * 写入音频数据块(边收边播)
55
51
  * 如果尚未 start(),会自动调用
56
52
  */
57
53
  write(chunk: Buffer): void;
58
54
  /**
59
55
  * 结束写入
60
- * 关闭写入流,但不杀播放器进程,让它播完
56
+ * 通知后端写入完成,但保持播放直到结束
61
57
  */
62
58
  end(): void;
63
59
  /**
64
60
  * 停止播放
65
- * 杀死播放器进程,删除临时文件
61
+ * 立即停止播放并释放资源
66
62
  */
67
63
  stop(): void;
68
64
  /**
69
65
  * 暂停播放
70
- * 使用 SIGSTOP 暂停播放器进程
71
66
  */
72
67
  pause(): void;
73
68
  /**
@@ -90,18 +85,10 @@ export declare class StreamPlayer extends EventEmitter {
90
85
  * 获取已写入的字节数
91
86
  */
92
87
  getBytesWritten(): number;
93
- /**
94
- * 获取临时文件路径
95
- */
96
- getTempFile(): string;
97
88
  /**
98
89
  * 处理错误
99
90
  */
100
91
  private handleError;
101
- /**
102
- * 删除临时文件
103
- */
104
- private deleteTempFile;
105
92
  }
106
93
  export default StreamPlayer;
107
94
  //# sourceMappingURL=stream-player.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stream-player.d.ts","sourceRoot":"","sources":["../../src/core/stream-player.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAOrC;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,IAAI,CAAA;IAClB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAChC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAAA;IAC/B,MAAM,CAAC,EAAE,kBAAkB,CAAA;CAC5B;AAED;;;;;;;GAOG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,WAAW,CAAC,CAAa;IACjC,OAAO,CAAC,aAAa,CAAC,CAAc;IACpC,OAAO,CAAC,aAAa,CAAI;IACzB,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,MAAM,CAAC,CAAoB;gBAEvB,OAAO,GAAE,mBAAwB;IAM7C;;;OAGG;IACH,KAAK,IAAI,IAAI;IA6Bb;;OAEG;IACH,OAAO,CAAC,WAAW;IAkDnB;;;OAGG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IA6B1B;;;OAGG;IACH,GAAG,IAAI,IAAI;IAOX;;;OAGG;IACH,IAAI,IAAI,IAAI;IAgCZ;;;OAGG;IACH,KAAK,IAAI,IAAI;IAiBb;;OAEG;IACH,MAAM,IAAI,IAAI;IAiBd;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,eAAe,IAAI,MAAM;IAIzB;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB;;OAEG;IACH,OAAO,CAAC,WAAW;IAKnB;;OAEG;IACH,OAAO,CAAC,cAAc;CAYvB;AAED,eAAe,YAAY,CAAA"}
1
+ {"version":3,"file":"stream-player.d.ts","sourceRoot":"","sources":["../../src/core/stream-player.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,EAA+B,WAAW,EAAE,MAAM,YAAY,CAAA;AAErE;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,IAAI,CAAA;IAClB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAChC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAAA;IAC/B,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B;AAED;;;;;;;GAOG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,aAAa,CAAI;IACzB,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,MAAM,CAAC,CAAoB;gBAEvB,OAAO,GAAE,mBAAwB;IA2C7C;;;OAGG;IACH,KAAK,IAAI,IAAI;IAmBb;;;OAGG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAoB1B;;;OAGG;IACH,GAAG,IAAI,IAAI;IAMX;;;OAGG;IACH,IAAI,IAAI,IAAI;IAgBZ;;OAEG;IACH,KAAK,IAAI,IAAI;IAUb;;OAEG;IACH,MAAM,IAAI,IAAI;IAUd;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,eAAe,IAAI,MAAM;IAIzB;;OAEG;IACH,OAAO,CAAC,WAAW;CAIpB;AAED,eAAe,YAAY,CAAA"}