feat: WebブラウザTTS高速化基盤 — ベンチマーク・キャッシュ・WebGPU・ストリーミング (全97テストパス) - #246
Merged
Conversation
- WebGPU最適化計画ドキュメント・マイルストーン (M1-M12) 作成 - Phase 1-3 TDDテスト56本 (6ファイル) 作成、未実装分はスキップ - M1 BenchmarkRunner + RegressionDetector 実装 (12テストパス) - M2 CacheManager (IndexedDB, iOS 50MB制限, 優先度eviction) 実装 (13テストパス) - GitHub Actions CI (test-web-optimization.yml) でPhase別並列テスト
- DictionaryLoaderにオプションのcacheManager/dictVersionパラメータ追加 - 辞書ファイルをhigh優先度でIndexedDBにキャッシュし2回目以降はfetchスキップ - clearCache()メソッド追加 - 辞書キャッシュ統合テスト6本追加 (test-dictionary-cache.js)
M3: ORT 1.17.1→1.21.0 (13ファイル), graphOptimizationLevel='extended'統一 M4: SimpleResampler (線形補間, 22kHz→48kHz) M5: AudioWorkletProcessor + AudioBackendFactory (3段フォールバック) M6: WebGPUSessionManager (webgpu→wasm-simd→wasm, WebGL除外) M7: Phase2統合テスト10本 + ブラウザ互換性マトリックス + デモ統合計画 M8: StreamingTTSPipeline + TextChunker + ChunkCrossfader + RingBuffer (前倒し) M9: TypedArrayPool (MAX_POOL_SIZE/TTL/ゼロクリア) (前倒し) レビュー指摘修正: - CRITICAL: RegressionDetector除算ゼロ防止、HTMLAudioBackend URLリーク修正、 getOrFetch TOCTOU競合解消 - HIGH: WebGPU失敗時エラー詳細表示、requestAdapter nullガード、 AudioNode再生時リーク防止、test-dictionary-cacheをPhase1に追加 - MEDIUM: ChunkCrossfader戻り値統一、コールバック型検証、 returnArrayバリデーション、タイミングテスト安定化、リサンプラーJSDoc追加
There was a problem hiding this comment.
Pull request overview
Webブラウザ向け OpenJTalk/Piper TTS の最適化基盤(WebGPUフォールバック、IndexedDBキャッシュ、ストリーミング再生、メモリプール、ベンチマーク)を追加し、関連テスト/CI/ドキュメントを整備するPRです。src/wasm/openjtalk-web/ 配下の性能・互換性改善を段階的に進めるための土台になります。
Changes:
- 最適化コンポーネント群(Benchmark/Cache/WebGPU session/Resampler/Streaming/Memory pool/Audio backend)を新規追加
- Node
node:testによるTDDテスト群と統合テスト、GitHub Actions ワークフローを追加 - デモ/テスト用HTMLで ORT CDN を 1.21.0 へ更新し、セッションオプションを更新
Reviewed changes
Copilot reviewed 38 out of 38 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| src/wasm/openjtalk-web/test_synthesis_comparison.html | ORT CDN更新 + session options更新 |
| src/wasm/openjtalk-web/test_padding_fix.html | ORT CDN更新 + session options更新 |
| src/wasm/openjtalk-web/test_audio_length.html | ORT CDN更新 + session options更新 |
| src/wasm/openjtalk-web/test/multilingual-demo/simple-multilingual.html | ORT CDN更新 + session options更新 |
| src/wasm/openjtalk-web/test/multilingual-demo/piper-espeak-english.html | ORT CDN更新 + session options更新 |
| src/wasm/openjtalk-web/test/multilingual-demo/piper-espeak-complete.html | ORT CDN更新 + session options更新 |
| src/wasm/openjtalk-web/test/multilingual-demo/multilingual.html | ORT CDN更新 + session options更新 |
| src/wasm/openjtalk-web/test/multilingual-demo/index.html | ORT CDN更新 + session options更新 |
| src/wasm/openjtalk-web/test/js/test-webgpu-session.js | WebGPUSessionManager のテスト追加 |
| src/wasm/openjtalk-web/test/js/test-streaming-pipeline.js | StreamingTTSPipeline/TextChunker等のテスト追加 |
| src/wasm/openjtalk-web/test/js/test-resampler.js | SimpleResampler のテスト追加 |
| src/wasm/openjtalk-web/test/js/test-phase2-integration.js | 最適化コンポーネント横断の統合テスト追加 |
| src/wasm/openjtalk-web/test/js/test-memory-pool.js | TypedArrayPool のテスト追加 |
| src/wasm/openjtalk-web/test/js/test-dictionary-cache.js | DictionaryLoader × CacheManager 統合テスト追加 |
| src/wasm/openjtalk-web/test/js/test-cache-manager.js | CacheManager のテスト追加 |
| src/wasm/openjtalk-web/test/js/test-benchmark-runner.js | BenchmarkRunner/RegressionDetector のテスト追加 |
| src/wasm/openjtalk-web/test/js/test-audio-backend.js | AudioBackendFactory/各Backendのテスト追加 |
| src/wasm/openjtalk-web/test/js/openjtalk-piper-integration-lazy.js | ORT session options更新 |
| src/wasm/openjtalk-web/src/webgpu-session-manager.js | WebGPU→wasm-simd→wasm フォールバック実装 |
| src/wasm/openjtalk-web/src/streaming-pipeline.js | TextChunker/RingBuffer/Crossfader/Streaming pipeline 実装 |
| src/wasm/openjtalk-web/src/resampler.js | 線形補間リサンプラー実装 |
| src/wasm/openjtalk-web/src/memory-pool.js | TypedArrayPool(上限/TTL/ゼロクリア)実装 |
| src/wasm/openjtalk-web/src/dictionary-loader.js | CacheManager統合(辞書ファイルのキャッシュ) |
| src/wasm/openjtalk-web/src/cache-manager.js | IndexedDBキャッシュ + eviction/versioning 実装 |
| src/wasm/openjtalk-web/src/benchmark.js | BenchmarkRunner/RegressionDetector 実装 |
| src/wasm/openjtalk-web/src/audio-worklet-processor.js | push型 AudioWorkletProcessor 実装 |
| src/wasm/openjtalk-web/src/audio-backend-factory.js | AudioWorklet→ScriptProcessor→HTMLAudio フォールバック実装 |
| src/wasm/openjtalk-web/package.json | 最適化テスト用npm scripts追加 |
| src/wasm/openjtalk-web/demo/simple-multilingual.html | ORT CDN更新 + session options更新 |
| src/wasm/openjtalk-web/demo/piper-espeak-english.html | ORT CDN更新 + session options更新 |
| src/wasm/openjtalk-web/demo/piper-espeak-complete.html | ORT CDN更新 + session options更新 |
| src/wasm/openjtalk-web/demo/multilingual.html | ORT CDN更新 + session options更新 |
| src/wasm/openjtalk-web/demo/index.html | ORT CDN更新 + session options更新 |
| docs/webgpu-optimization-plan.md | 最適化計画ドキュメント追加 |
| docs/milestones/webgpu-optimization-milestones.md | マイルストーン/テスト状況ドキュメント追加 |
| docs/demo-integration-plan.md | 既存デモへの統合計画ドキュメント追加 |
| docs/browser-compatibility-matrix.md | ブラウザ互換性マトリックス追加 |
| .github/workflows/test-web-optimization.yml | 最適化テスト用CIワークフロー追加 |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- CacheManager: dbFactory必須チェック追加、objectStore(name)呼び出し修正、 _wrap()をMock/実IDBで正しく分岐(_mockフラグ方式) - AudioBackendFactory: Workletフォールバック時にAudioContextをclose()、 HTMLAudioBackend.play()で既存再生を停止してからBlob生成 - ChunkCrossfader: クロスフェード係数をactualFadeLenで正規化(0..1保証) - DictionaryLoader: getOrFetch()にpriority引数追加、冗長なset()削除 - テストコメント修正、MockIndexedDB 4箇所を_mock対応に統一
ソース修正: - WebGPUSessionManager: 無効なwasm-simd EP削除、maxStorageBufferBindingSize チェック追加、エラーメッセージ安全化 - CacheManager: 実IDB対応のstatic async create()追加、getOrFetch()の インフライト重複排除、dbFactory戻り値検証、_wrap()ハングガード - ChunkCrossfader: 空チャンクガード追加、1サンプル50/50ブレンド修正 - AudioBackendFactory: dispose()をasync化、play()失敗時blob URLクリーンアップ、 onaudioprocess null化 - DictionaryLoader: キャッシュ時の逐次ロード化(TOCTOU解消)、 loadFromArchive dead code削除、_loadSingleFile()抽出 テスト改善: - MockIndexedDB を test/helpers/ に共通化 (DRY違反解消) - 18テスト追加: eviction動作、コンストラクタ検証、priority伝播、 インフライト重複排除、空チャンク、短チャンク、1サンプルcrossfade、 dispose Promise、onaudioprocess null化、double-play、null adapter等
Ubuntu Debugビルドでapt-get installが10分を超えタイムアウトするケースがあったため。
削除: webgpu-optimization-plan.md, milestones/, demo-integration-plan.md, usability-issues-2026-03.md, browser-compatibility-matrix.md, license-compliance.md, cli-enhancements.md, custom_dictionary.md, gpu-configuration.md, streaming-mode.md, multi-gpu-training.md, model-size-impact-analysis-ja.md, arm64-optimization.md, japanese-usage.md, features/README.md, getting-started/README.md docs/README.md のリンクを現存ファイルのみに修正。
This was referenced Mar 17, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
WebブラウザTTSの高速化・最適化基盤を構築。TDD方針で全97テストを先行作成し、以下の機能を実装。
実装内容
新規ファイル (実装)
src/benchmark.js— パフォーマンス計測 + リグレッション検知src/cache-manager.js— IndexedDBキャッシュ (優先度ベースeviction)src/resampler.js— サンプルレート変換src/webgpu-session-manager.js— WebGPU/WASMフォールバック管理src/streaming-pipeline.js— ストリーミングTTSパイプラインsrc/memory-pool.js— TypedArray再利用プールsrc/audio-worklet-processor.js— AudioWorkletプロセッサsrc/audio-backend-factory.js— AudioWorklet→ScriptProcessor→HTMLAudio フォールバック新規ファイル (テスト: 9本, 97テスト)
test-benchmark-runner.js,test-cache-manager.js,test-dictionary-cache.jstest-resampler.js,test-webgpu-session.js,test-audio-backend.jstest-streaming-pipeline.js,test-memory-pool.js,test-phase2-integration.js新規ファイル (ドキュメント)
docs/webgpu-optimization-plan.md— 最適化計画docs/browser-compatibility-matrix.md— ブラウザ互換性マトリックスdocs/demo-integration-plan.md— デモ統合計画コードレビュー指摘対応 (13件)
Test plan
npm run test:optimization— 91テストパスnode --test test/js/test-dictionary-cache.js— 6テストパス