@coeiro-operator/audio 1.0.3 → 1.2.0

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 (62) hide show
  1. package/README.md +48 -0
  2. package/dist/audio-player.d.ts +32 -11
  3. package/dist/audio-player.d.ts.map +1 -1
  4. package/dist/audio-player.js +236 -210
  5. package/dist/audio-player.js.map +1 -1
  6. package/dist/audio-stream-controller.d.ts +27 -7
  7. package/dist/audio-stream-controller.d.ts.map +1 -1
  8. package/dist/audio-stream-controller.js +143 -40
  9. package/dist/audio-stream-controller.js.map +1 -1
  10. package/dist/audio-synthesizer.d.ts +5 -4
  11. package/dist/audio-synthesizer.d.ts.map +1 -1
  12. package/dist/audio-synthesizer.js +36 -23
  13. package/dist/audio-synthesizer.js.map +1 -1
  14. package/dist/chunk-generation-manager.d.ts +34 -2
  15. package/dist/chunk-generation-manager.d.ts.map +1 -1
  16. package/dist/chunk-generation-manager.js +237 -15
  17. package/dist/chunk-generation-manager.js.map +1 -1
  18. package/dist/debug-error-test.d.ts +5 -0
  19. package/dist/debug-error-test.d.ts.map +1 -0
  20. package/dist/debug-error-test.js +91 -0
  21. package/dist/debug-error-test.js.map +1 -0
  22. package/dist/index.d.ts +18 -6
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +30 -4
  25. package/dist/index.js.map +1 -1
  26. package/dist/open-promise.d.ts +18 -0
  27. package/dist/open-promise.d.ts.map +1 -0
  28. package/dist/open-promise.js +42 -0
  29. package/dist/open-promise.js.map +1 -0
  30. package/dist/queue/speech-queue.d.ts +34 -0
  31. package/dist/queue/speech-queue.d.ts.map +1 -0
  32. package/dist/queue/speech-queue.js +36 -0
  33. package/dist/queue/speech-queue.js.map +1 -0
  34. package/dist/queue/task-queue.d.ts +52 -0
  35. package/dist/queue/task-queue.d.ts.map +1 -0
  36. package/dist/queue/task-queue.js +259 -0
  37. package/dist/queue/task-queue.js.map +1 -0
  38. package/dist/queue/types.d.ts +42 -0
  39. package/dist/queue/types.d.ts.map +1 -0
  40. package/dist/queue/types.js +5 -0
  41. package/dist/queue/types.js.map +1 -0
  42. package/dist/speech-queue.d.ts +4 -49
  43. package/dist/speech-queue.d.ts.map +1 -1
  44. package/dist/speech-queue.js +3 -140
  45. package/dist/speech-queue.js.map +1 -1
  46. package/dist/speed-utils.d.ts +25 -0
  47. package/dist/speed-utils.d.ts.map +1 -0
  48. package/dist/speed-utils.js +77 -0
  49. package/dist/speed-utils.js.map +1 -0
  50. package/dist/synthesis-processor.d.ts.map +1 -1
  51. package/dist/synthesis-processor.js +34 -10
  52. package/dist/synthesis-processor.js.map +1 -1
  53. package/dist/test-helpers.d.ts +0 -9
  54. package/dist/test-helpers.d.ts.map +1 -1
  55. package/dist/test-helpers.js +1 -80
  56. package/dist/test-helpers.js.map +1 -1
  57. package/dist/types.d.ts +41 -10
  58. package/dist/types.d.ts.map +1 -1
  59. package/dist/voice-resolver.d.ts.map +1 -1
  60. package/dist/voice-resolver.js +33 -3
  61. package/dist/voice-resolver.js.map +1 -1
  62. package/package.json +4 -6
package/README.md CHANGED
@@ -6,6 +6,54 @@ COEIRO Operator音声合成・再生モジュール
6
6
 
7
7
  COEIROINK APIとの通信、音声ストリーミング、リサンプリング機能を提供します。
8
8
 
9
+ ## 機能
10
+
11
+ - COEIROINK APIとの音声合成通信
12
+ - 低レイテンシ音声ストリーミング
13
+ - 音声再生(@echogarden/audio-io使用)
14
+ - リアルタイムリサンプリング
15
+ - チャンク境界での停止制御
16
+ - クロスフェード処理
17
+ - ノイズリダクション(オプション)
18
+
19
+ ## 音声出力モジュール
20
+
21
+ 音声出力には`@echogarden/audio-io`を使用しています。以下の特徴があります:
22
+
23
+ - **プリコンパイル済みバイナリ**: node-gypによるビルドが不要
24
+ - **CI/CD対応**: GitHub ActionsなどのCI環境でも動作
25
+ - **低レイテンシ**: コールバックベースのAPIで効率的なバッファ管理
26
+ - **マルチプラットフォーム**: macOS、Windows、Linuxをサポート
27
+
28
+ ## パフォーマンス
29
+
30
+ @echogarden/audio-ioの採用により、以下のパフォーマンス改善を実現:
31
+
32
+ - 初期化時間: 約0.03ms(高速)
33
+ - チャンク処理: 平均1.47ms(低オーバーヘッド)
34
+ - メモリ使用量: 約130MB RSS(効率的)
35
+
36
+ ## ドキュメント
37
+
38
+ ### ドキュメント構成
39
+
40
+ ```
41
+ packages/audio/
42
+ ├── docs/
43
+ │ ├── architecture.md # アーキテクチャ概要
44
+ │ ├── task-orchestration.md # タスクキュー実装詳細
45
+ │ ├── chunk-generation-manager-spec.md # 並行生成仕様
46
+ │ └── architecture-improvement-proposal.md # 改善提案(未実施)
47
+ └── README.md # このファイル
48
+ ```
49
+
50
+ ### ドキュメント管理ルール
51
+
52
+ - **アーキテクチャドキュメント**: `docs/` に機能ごとに配置
53
+ - **複数ファイルにまたがる処理フロー**: 各ドキュメントに記述
54
+ - **コードで明らかな情報**: ドキュメント化しない
55
+ - **修正済みの内容**: ドキュメント内で ✅ マークで明示
56
+
9
57
  ## ライセンス
10
58
 
11
59
  MIT
@@ -1,11 +1,8 @@
1
1
  /**
2
2
  * src/say/audio-player.ts: 音声再生管理
3
- * speakerライブラリによるネイティブ音声出力を担当
3
+ * @echogarden/audio-ioによる音声出力を担当
4
4
  */
5
5
  import type { AudioResult, Config } from './types.js';
6
- export declare const forTests: {
7
- mockSpeakerInstance: any;
8
- };
9
6
  export declare class AudioPlayer {
10
7
  private synthesisRate;
11
8
  private playbackRate;
@@ -18,6 +15,11 @@ export declare class AudioPlayer {
18
15
  private isInitialized;
19
16
  private audioConfig;
20
17
  private config;
18
+ private shouldStop;
19
+ private audioOutput;
20
+ private chunkQueue;
21
+ private currentChunkOffset;
22
+ private completionPromise;
21
23
  /**
22
24
  * AudioPlayerの初期化
23
25
  */
@@ -57,7 +59,7 @@ export declare class AudioPlayer {
57
59
  playAudioStream(audioResult: AudioResult, bufferSize?: number): Promise<void>;
58
60
  /**
59
61
  * ストリーミング音声処理パイプライン
60
- * 処理順序: 1) リサンプリング 2) ローパスフィルター 3) ノイズリダクション 4) Speaker出力
62
+ * 処理順序: 1) リサンプリング 2) ローパスフィルター 3) ノイズリダクション 4) 出力
61
63
  */
62
64
  private processAudioStreamPipeline;
63
65
  /**
@@ -77,16 +79,23 @@ export declare class AudioPlayer {
77
79
  */
78
80
  playStreamingAudio(audioStream: AsyncGenerator<AudioResult>, bufferSize?: number): Promise<void>;
79
81
  /**
80
- * 並列ストリーミング再生(最初のチャンクから再生開始、以降は自動継続)
82
+ * キューが空になるまで待機(@echogarden/audio-io用)
81
83
  */
82
- playStreamingAudioParallel(audioStream: AsyncGenerator<AudioResult>): Promise<void>;
84
+ private waitForCompletion;
83
85
  /**
84
- * Speakerインスタンスを作成(環境変数によるモック対応)
86
+ * @echogarden/audio-io用のaudioOutputを遅延作成
85
87
  */
86
- private createSpeaker;
88
+ private ensureAudioOutput;
87
89
  /**
88
- * PCMデータを直接スピーカーに再生(改善版:Speakerインスタンス使い回し)
89
- * synthesis/playbackレートが異なる場合は適切なSpeaker設定を使用
90
+ * @echogarden/audio-io用のコールバックハンドラ
91
+ */
92
+ private audioOutputHandler;
93
+ /**
94
+ * Uint8ArrayからInt16Arrayに変換(リトルエンディアン)
95
+ */
96
+ private convertToInt16Array;
97
+ /**
98
+ * PCMデータを音声出力キューに追加
90
99
  */
91
100
  private playPCMData;
92
101
  /**
@@ -120,11 +129,23 @@ export declare class AudioPlayer {
120
129
  * @returns 無音のPCMデータ
121
130
  */
122
131
  generateSilentPCM(durationMs?: number, sampleRate?: number): Uint8Array;
132
+ /**
133
+ * 無音WAVデータを生成(句読点ポーズ用)
134
+ * @param durationMs 無音の長さ(ミリ秒)
135
+ * @param sampleRate サンプルレート(デフォルト:24000Hz)
136
+ * @returns WAVフォーマットの無音データ
137
+ */
138
+ generateSilenceWAV(durationMs: number, sampleRate?: number): ArrayBuffer;
123
139
  /**
124
140
  * ドライバーウォームアップ用の無音再生
125
141
  * 短い無音を再生してSpeakerドライバーを起動・安定化
126
142
  */
127
143
  warmupAudioDriver(): Promise<void>;
144
+ /**
145
+ * 音声再生の停止(チャンク境界で停止)
146
+ * 現在再生中のチャンクは最後まで再生され、次のチャンクから停止します
147
+ */
148
+ stopPlayback(): Promise<void>;
128
149
  /**
129
150
  * AudioPlayerのクリーンアップ(リソース解放)
130
151
  * 長時間運用やシャットダウン時に呼び出し
@@ -1 +1 @@
1
- {"version":3,"file":"audio-player.d.ts","sourceRoot":"","sources":["../src/audio-player.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,OAAO,KAAK,EAAE,WAAW,EAAS,MAAM,EAAe,MAAM,YAAY,CAAC;AAY1E,eAAO,MAAM,QAAQ;yBACU,GAAG;CACjC,CAAC;AAEF,qBAAa,WAAW;IACtB,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,YAAY,CAAiC;IACrD,OAAO,CAAC,QAAQ,CAAiC;IACjD,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,qBAAqB,CAAkB;IAC/C,OAAO,CAAC,qBAAqB,CAAoD;IACjF,OAAO,CAAC,oBAAoB,CAAmD;IAC/E,OAAO,CAAC,aAAa,CAA0C;IAC/D,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAS;IAEvB;;OAEG;gBACS,MAAM,EAAE,MAAM;IAK1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA0C7B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAgBlC;;OAEG;IACH,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAI7C;;OAEG;IACH,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAI3C;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIzC;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,GAAE,MAAuC,GAAG,IAAI;IAK7F;;OAEG;YACW,oBAAoB;IAW5B,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAkBpC;;OAEG;IACG,eAAe,CAAC,WAAW,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCnF;;;OAGG;YACW,0BAA0B;IAiDxC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAwD/B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAmB9B;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAoBrC;;OAEG;IACG,kBAAkB,CACtB,WAAW,EAAE,cAAc,CAAC,WAAW,CAAC,EACxC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;IAehB;;OAEG;IACG,0BAA0B,CAAC,WAAW,EAAE,cAAc,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAkCzF;;OAEG;YACW,aAAa;IAuI3B;;;OAGG;YACW,WAAW;IA2CzB;;OAEG;IACG,SAAS,CAAC,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ5E;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAqCjC;;OAEG;YACW,0BAA0B;IAqCxC;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,WAAW,GAAG,UAAU;IA2BrD;;OAEG;IACH,cAAc,CACZ,OAAO,EAAE,UAAU,EACnB,cAAc,EAAE,MAAM,EACtB,YAAY,GAAE,OAAe,GAC5B,UAAU;IA4Bb;;OAEG;IACH,OAAO,CAAC,UAAU;IAMlB;;;;;OAKG;IACH,iBAAiB,CACf,UAAU,GAAE,MAAY,EACxB,UAAU,GAAE,MAA+B,GAC1C,UAAU;IAMb;;;OAGG;IACG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBxC;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAgB/B"}
1
+ {"version":3,"file":"audio-player.d.ts","sourceRoot":"","sources":["../src/audio-player.ts"],"names":[],"mappings":"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"}