@mcptoolshop/voice-soundboard-core 1.0.0 → 1.1.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.
- package/CHANGELOG.md +172 -0
- package/LICENSE +21 -0
- package/README.md +4 -4
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/orchestrator/concat.d.ts.map +1 -1
- package/dist/orchestrator/concat.js +37 -48
- package/dist/orchestrator/concat.js.map +1 -1
- package/dist/presets.d.ts +50 -2
- package/dist/presets.d.ts.map +1 -1
- package/dist/presets.js +92 -4
- package/dist/presets.js.map +1 -1
- package/dist/schemas.d.ts +1 -0
- package/dist/schemas.d.ts.map +1 -1
- package/dist/sfx/parser.d.ts.map +1 -1
- package/dist/sfx/parser.js +1 -0
- package/dist/sfx/parser.js.map +1 -1
- package/package.json +50 -44
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [1.0.2] - 2026-03-25
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- `--version` / `-V` flag to print version and exit
|
|
12
|
+
- `--help` / `-h` flag with full CLI usage documentation
|
|
13
|
+
- CHANGELOG.md and LICENSE included in npm tarballs
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
- Health endpoint version was hardcoded at 0.1.2 — now reads from package.json
|
|
17
|
+
- SECURITY.md version table updated from 0.x to 1.0.x
|
|
18
|
+
|
|
19
|
+
## [1.0.0] - 2026-02-27
|
|
20
|
+
|
|
21
|
+
### Overview
|
|
22
|
+
|
|
23
|
+
**First stable release.** Structured error contract, Ship Gate audit (46/50), version alignment, and v1 README.
|
|
24
|
+
|
|
25
|
+
### Added
|
|
26
|
+
|
|
27
|
+
- **Structured error contract** — all errors now carry `hint` (actionable guidance) and `retryable` (safe to retry?) fields
|
|
28
|
+
- `SoundboardError` base class in core — extends `Error` with `code`, `hint`, `retryable`, `cause`
|
|
29
|
+
- `fromError()` helper — converts any caught error into a `VoiceErrorResponse`, extracting hint + retryable from `SoundboardError` subclasses
|
|
30
|
+
- `toToolError()` pattern in MCP server — converts errors into MCP tool error responses with structured fields, never exposes stack traces
|
|
31
|
+
- `wrapError()` utility — wraps unknown thrown values into `SoundboardError`
|
|
32
|
+
- `pnpm verify` script (build + test in one command)
|
|
33
|
+
- Explicit "No telemetry" privacy statement in README
|
|
34
|
+
- SHIP_GATE.md and SCORECARD.md for product quality tracking
|
|
35
|
+
|
|
36
|
+
### Changed
|
|
37
|
+
|
|
38
|
+
- All 11 error classes across core and server now extend `SoundboardError`
|
|
39
|
+
- `VoiceErrorResponse` schema now includes `hint: string` and `retryable: boolean`
|
|
40
|
+
- `voiceSpeak` and `voiceDialogue` handlers migrated from manual `instanceof` chains to `fromError()`
|
|
41
|
+
- Golden-contract tests now verify `hint` and `retryable` fields in error responses
|
|
42
|
+
- MCP server version string aligned with package version
|
|
43
|
+
- Repo description and topics updated (48 voices, 9 languages)
|
|
44
|
+
|
|
45
|
+
### Fixed
|
|
46
|
+
|
|
47
|
+
- MCP handshake version was stuck at `0.2.1` — now aligned at `1.0.0`
|
|
48
|
+
- Error responses from `BusyError`, `RateLimitError`, `TimeoutError` now correctly report `retryable: true`
|
|
49
|
+
- Stale v2.x git tags deleted
|
|
50
|
+
- Dependabot cleaned (removed stale pip ecosystem entry)
|
|
51
|
+
|
|
52
|
+
## [0.2.1] - 2026-02-18
|
|
53
|
+
|
|
54
|
+
### Fixed
|
|
55
|
+
|
|
56
|
+
- README in `@mcptoolshop/voice-soundboard-core` npm tarball still showed 12 voices — corrected to 48 voices, 9 languages
|
|
57
|
+
- Broken Development section in root README (stray `> Part of MCP Tool Shop` line inside code block)
|
|
58
|
+
|
|
59
|
+
## [0.2.0] - 2026-02-18
|
|
60
|
+
|
|
61
|
+
### Overview
|
|
62
|
+
|
|
63
|
+
**Multilingual expansion** — 48 voices across 9 languages.
|
|
64
|
+
|
|
65
|
+
### Added
|
|
66
|
+
|
|
67
|
+
- **48 voices** — expanded from 12 English-only to 48 across 9 languages
|
|
68
|
+
- **9 languages** — English US, English UK, Japanese, Mandarin Chinese, Spanish, French, Hindi, Italian, Brazilian Portuguese
|
|
69
|
+
- **`getVoicesByLanguage(language)`** — new helper in `@mcptoolshop/voice-soundboard-core` to filter voices by language code
|
|
70
|
+
- Language is auto-inferred by the synthesis backend from the voice ID prefix — no caller changes required
|
|
71
|
+
|
|
72
|
+
### Changed
|
|
73
|
+
|
|
74
|
+
- `VoiceInfo.accent` field widened from `"american" | "british"` to `string` to accommodate new languages
|
|
75
|
+
- `VoiceInfo.language` values now use BCP-47 style codes (`"en-us"`, `"en-gb"`, `"ja"`, `"zh"`, etc.) instead of `"en"`
|
|
76
|
+
- Server version string updated to `0.2.0`
|
|
77
|
+
- Package descriptions updated to reflect 48 voices and 9 languages
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## [0.1.0] - 2026-02-13
|
|
82
|
+
|
|
83
|
+
### Overview
|
|
84
|
+
|
|
85
|
+
**Initial release** — Node.js/TypeScript MCP server for text-to-speech.
|
|
86
|
+
|
|
87
|
+
Complete rewrite from the original Python prototype into a pnpm monorepo with two
|
|
88
|
+
publishable npm packages: `@mcp-tool-shop/voice-soundboard-core` and
|
|
89
|
+
`@mcp-tool-shop/voice-soundboard-mcp`.
|
|
90
|
+
|
|
91
|
+
### Packages
|
|
92
|
+
|
|
93
|
+
- **@mcp-tool-shop/voice-soundboard-core** (v0.1.0) — Backend-agnostic core library
|
|
94
|
+
- **@mcp-tool-shop/voice-soundboard-mcp** (v0.1.0) — MCP server with CLI
|
|
95
|
+
|
|
96
|
+
### Added
|
|
97
|
+
|
|
98
|
+
#### MCP Tools
|
|
99
|
+
- `voice_speak` — Synthesize speech from text with voice, speed, format options
|
|
100
|
+
- `voice_dialogue` — Multi-speaker dialogue synthesis with cast mapping
|
|
101
|
+
- `voice_status` — Engine health, available voices, presets, backend info
|
|
102
|
+
- `voice_interrupt` — Stop/rollback active synthesis
|
|
103
|
+
- `voice_inner_monologue` — Ephemeral micro-utterances (ambient system, opt-in)
|
|
104
|
+
|
|
105
|
+
#### Core Features
|
|
106
|
+
- 12 approved voices (4 American female, 4 American male, 3 British female, 2 British male)
|
|
107
|
+
- 5 voice presets (narrator, announcer, whisper, storyteller, assistant)
|
|
108
|
+
- 8 emotion spans via `[happy]...[/happy]` inline markup
|
|
109
|
+
- SSML-lite parser (`<break>`, `<emphasis>`, `<prosody>`)
|
|
110
|
+
- SFX tags (`[ding]`, `[chime]`, `[whoosh]`, `[tada]`, `[error]`, `[click]`)
|
|
111
|
+
- Text chunking with sentence/paragraph boundaries
|
|
112
|
+
- WAV concatenation for multi-segment output
|
|
113
|
+
- Base64 and file-path artifact delivery modes
|
|
114
|
+
- Output directory sandboxing with path traversal protection
|
|
115
|
+
|
|
116
|
+
#### Security & Guardrails
|
|
117
|
+
- `SynthesisSemaphore` — configurable max concurrent synthesis (default 1)
|
|
118
|
+
- `ToolRateLimiter` — per-tool sliding window rate limit (30 calls/60s)
|
|
119
|
+
- `withTimeout` — per-request timeout (default 20s)
|
|
120
|
+
- Path traversal protection (resolveOutputDir with symlink checks)
|
|
121
|
+
- Secret/PII redaction in logs and error messages
|
|
122
|
+
- Synthesis result validation (WAV header, duration, file size)
|
|
123
|
+
- Output file retention cleanup (default 4 hours)
|
|
124
|
+
|
|
125
|
+
#### Backend System
|
|
126
|
+
- `Backend` interface with `synthesize()`, `voices()`, `health()`
|
|
127
|
+
- MockBackend (built-in, deterministic WAV generation)
|
|
128
|
+
- HTTP proxy backend (delegate to external TTS service)
|
|
129
|
+
- Python bridge backend (connect to Python Kokoro/Piper engines)
|
|
130
|
+
|
|
131
|
+
#### Developer Experience
|
|
132
|
+
- 342 tests (252 core + 90 server)
|
|
133
|
+
- Abuse battery (adversarial input testing)
|
|
134
|
+
- CI pipeline: Node.js 20+22 matrix, type-check, npm pack dry-run
|
|
135
|
+
- Dependabot for npm dependency updates
|
|
136
|
+
- Architecture invariant enforcement (engine never imports compiler)
|
|
137
|
+
|
|
138
|
+
### Architecture
|
|
139
|
+
|
|
140
|
+
```
|
|
141
|
+
@mcp-tool-shop/voice-soundboard-core
|
|
142
|
+
limits.ts SHIP_LIMITS consolidation
|
|
143
|
+
schemas.ts VoiceRequest, VoiceResponse, error codes
|
|
144
|
+
voices.ts Approved voice registry + presets
|
|
145
|
+
emotion.ts Emotion span parser
|
|
146
|
+
ssml/ SSML-lite parser
|
|
147
|
+
chunking/ Text chunker
|
|
148
|
+
sfx/ SFX tag parser
|
|
149
|
+
artifact.ts Output directory sandboxing
|
|
150
|
+
sandbox.ts Safe filenames, symlink checks
|
|
151
|
+
ambient.ts AmbientEmitter
|
|
152
|
+
redact.ts PII/secret redaction
|
|
153
|
+
|
|
154
|
+
@mcp-tool-shop/voice-soundboard-mcp
|
|
155
|
+
server.ts MCP tool registration + guardrails
|
|
156
|
+
cli.ts CLI entrypoint (stdio transport)
|
|
157
|
+
backend.ts Backend abstraction
|
|
158
|
+
concurrency.ts SynthesisSemaphore
|
|
159
|
+
rateLimit.ts ToolRateLimiter
|
|
160
|
+
timeout.ts withTimeout
|
|
161
|
+
retention.ts Output cleanup timer
|
|
162
|
+
validation.ts Result validation
|
|
163
|
+
redact.ts Server-level redaction
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## Pre-0.1.0 (Python)
|
|
169
|
+
|
|
170
|
+
The original Python implementation (`voice_soundboard/`) with Compiler-Graph-Engine
|
|
171
|
+
architecture is preserved in the repository but is not part of the npm packages.
|
|
172
|
+
See git history for the full Python changelog.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 mcp-tool-shop
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
</p>
|
|
18
18
|
|
|
19
19
|
<p align="center">
|
|
20
|
-
|
|
20
|
+
46 voices • 9 languages • 5 presets • 8 emotions • SSML-lite • SFX tags • multi-speaker dialogue<br>
|
|
21
21
|
Swappable TTS backends. Guardrails built in. Ships as a single <code>npx</code> command.
|
|
22
22
|
</p>
|
|
23
23
|
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
|
|
28
28
|
- **MCP native** — stdio transport, works with Claude Desktop, Cursor, and any MCP client
|
|
29
29
|
- **5 tools** — `voice_speak`, `voice_dialogue`, `voice_status`, `voice_interrupt`, `voice_inner_monologue`
|
|
30
|
-
- **
|
|
30
|
+
- **46 approved voices, 9 languages** — English (American + British), Japanese, Mandarin, Spanish, French, Hindi, Italian, Brazilian Portuguese. Curated presets: `narrator`, `announcer`, `whisper`, `storyteller`, `assistant`
|
|
31
31
|
- **Emotion spans** — 8 emotions via `[happy]...[/happy]` inline markup
|
|
32
32
|
- **SSML-lite** — `<break>`, `<emphasis>`, `<prosody>` without full SSML complexity
|
|
33
33
|
- **SFX tags** — `[ding]`, `[chime]`, `[whoosh]`, `[tada]`, `[error]`, `[click]` inline sound effects
|
|
@@ -133,7 +133,7 @@ category?: "thinking" # general | thinking | observation | debug
|
|
|
133
133
|
|
|
134
134
|
## Voices
|
|
135
135
|
|
|
136
|
-
|
|
136
|
+
46 voices across 9 languages. Language is auto-inferred from the voice ID prefix — no configuration required.
|
|
137
137
|
|
|
138
138
|
| Prefix | Language |
|
|
139
139
|
|--------|----------|
|
|
@@ -147,7 +147,7 @@ category?: "thinking" # general | thinking | observation | debug
|
|
|
147
147
|
| `if_` / `im_` | Italian |
|
|
148
148
|
| `pf_` / `pm_` | Brazilian Portuguese |
|
|
149
149
|
|
|
150
|
-
See the [full voice list](https://github.com/mcp-tool-shop-org/mcp-voice-soundboard#voices) for all
|
|
150
|
+
See the [full voice list](https://github.com/mcp-tool-shop-org/mcp-voice-soundboard#voices) for all 46 voices with names and styles.
|
|
151
151
|
|
|
152
152
|
### Presets
|
|
153
153
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { SoundboardError, wrapError, } from "./errors.js";
|
|
2
2
|
export { type VoiceInfo, DEFAULT_VOICE, VOICES, APPROVED_VOICE_IDS, getVoice, isApprovedVoice, } from "./voices.js";
|
|
3
|
-
export { type PresetConfig, PRESETS, PRESET_NAMES, getPreset, } from "./presets.js";
|
|
3
|
+
export { type PresetConfig, type ProsodyConfig, type PiperProsodyConfig, type HumorMood, PRESETS, PRESET_NAMES, HUMOR_PRESETS, HUMOR_MOODS, getPreset, getHumorPreset, wrapWithProsody, } from "./presets.js";
|
|
4
4
|
export { VoiceValidationError, type ResolvedVoice, assertApprovedVoice, resolveVoiceOrPreset, } from "./validate.js";
|
|
5
5
|
export { type BackendInfo, type VoiceStatusResponse, type VoiceSpeakResponse, type ArtifactMode, type VoiceInterruptResponse, type VoiceStreamResponse, type VoiceErrorResponse, type VoiceErrorCode, } from "./schemas.js";
|
|
6
6
|
export { LIMITS, SHIP_LIMITS, LimitError, validateText, validateSpeed, } from "./limits.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,eAAe,EACf,SAAS,GACV,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,KAAK,SAAS,EACd,aAAa,EACb,MAAM,EACN,kBAAkB,EAClB,QAAQ,EACR,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,KAAK,YAAY,EACjB,OAAO,EACP,YAAY,EACZ,SAAS,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Backend-agnostic voice soundboard core library
|
|
3
3
|
export { SoundboardError, wrapError, } from "./errors.js";
|
|
4
4
|
export { DEFAULT_VOICE, VOICES, APPROVED_VOICE_IDS, getVoice, isApprovedVoice, } from "./voices.js";
|
|
5
|
-
export { PRESETS, PRESET_NAMES, getPreset, } from "./presets.js";
|
|
5
|
+
export { PRESETS, PRESET_NAMES, HUMOR_PRESETS, HUMOR_MOODS, getPreset, getHumorPreset, wrapWithProsody, } from "./presets.js";
|
|
6
6
|
export { VoiceValidationError, assertApprovedVoice, resolveVoiceOrPreset, } from "./validate.js";
|
|
7
7
|
export { LIMITS, SHIP_LIMITS, LimitError, validateText, validateSpeed, } from "./limits.js";
|
|
8
8
|
export { DEFAULT_ARTIFACT_MODE, DEFAULT_OUTPUT_FORMAT, buildArtifactConfig, OutputDirError, defaultOutputRoot, resolveOutputDir, } from "./artifact.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,iDAAiD;AAEjD,OAAO,EACL,eAAe,EACf,SAAS,GACV,MAAM,aAAa,CAAC;AAErB,OAAO,EAEL,aAAa,EACb,MAAM,EACN,kBAAkB,EAClB,QAAQ,EACR,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,iDAAiD;AAEjD,OAAO,EACL,eAAe,EACf,SAAS,GACV,MAAM,aAAa,CAAC;AAErB,OAAO,EAEL,aAAa,EACb,MAAM,EACN,kBAAkB,EAClB,QAAQ,EACR,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EAKL,OAAO,EACP,YAAY,EACZ,aAAa,EACb,WAAW,EACX,SAAS,EACT,cAAc,EACd,eAAe,GAChB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,oBAAoB,EAEpB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AAavB,OAAO,EACL,MAAM,EACN,WAAW,EACX,UAAU,EACV,YAAY,EACZ,aAAa,GACd,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EAGrB,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAGL,qBAAqB,EACrB,aAAa,EACb,SAAS,GACV,MAAM,cAAc,CAAC;AAEtB,OAAO,EAYL,WAAW,EACX,aAAa,EACb,aAAa,EACb,cAAc,GACf,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAIL,YAAY,EACZ,SAAS,GACV,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAOL,OAAO,EAIP,cAAc,EACd,cAAc,EACd,eAAe,EACf,YAAY,GACb,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAOL,aAAa,EACb,kBAAkB,GAEnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,eAAe,EAMf,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,QAAQ,EAQR,YAAY,EACZ,cAAc,EACd,UAAU,EACV,YAAY,EACZ,cAAc,EACd,gBAAgB,EAGhB,eAAe,EACf,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,kBAAkB,EAOlB,eAAe,EACf,cAAc,GACf,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,SAAS,GACV,MAAM,cAAc,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"concat.d.ts","sourceRoot":"","sources":["../../src/orchestrator/concat.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAK7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"concat.d.ts","sourceRoot":"","sources":["../../src/orchestrator/concat.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAK7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA+ChD;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAS/C;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,SAAS,aAAa,EAAE,GAC/B,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAKjD;AAuCD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAyBxE"}
|
|
@@ -3,14 +3,12 @@ import { readFile, writeFile } from "node:fs/promises";
|
|
|
3
3
|
import { join } from "node:path";
|
|
4
4
|
import { randomUUID } from "node:crypto";
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* Returns the path to the concatenated file.
|
|
6
|
+
* Extract raw WAV buffers from chunk artifacts, validating sample rate consistency.
|
|
7
|
+
* Shared logic for both file-based and base64 concatenation paths.
|
|
9
8
|
*/
|
|
10
|
-
|
|
9
|
+
async function concatWavBuffers(chunks) {
|
|
11
10
|
const buffers = [];
|
|
12
|
-
let
|
|
13
|
-
let sampleRate = 24000;
|
|
11
|
+
let sampleRate = null;
|
|
14
12
|
for (const chunk of chunks) {
|
|
15
13
|
let wav;
|
|
16
14
|
if (chunk.audioPath) {
|
|
@@ -22,61 +20,45 @@ export async function concatWavFiles(chunks, outputDir) {
|
|
|
22
20
|
else {
|
|
23
21
|
continue;
|
|
24
22
|
}
|
|
25
|
-
// Parse WAV header to extract data portion
|
|
26
23
|
const parsed = parseWavData(wav);
|
|
27
24
|
if (parsed) {
|
|
25
|
+
if (sampleRate === null) {
|
|
26
|
+
sampleRate = parsed.sampleRate;
|
|
27
|
+
}
|
|
28
|
+
else if (parsed.sampleRate !== sampleRate) {
|
|
29
|
+
throw new Error(`Sample rate mismatch: expected ${sampleRate} Hz but got ${parsed.sampleRate} Hz`);
|
|
30
|
+
}
|
|
28
31
|
buffers.push(parsed.data);
|
|
29
|
-
totalDataSize += parsed.data.length;
|
|
30
|
-
sampleRate = parsed.sampleRate;
|
|
31
32
|
}
|
|
32
33
|
}
|
|
33
|
-
if (buffers.length === 0) {
|
|
34
|
+
if (buffers.length === 0 || sampleRate === null) {
|
|
34
35
|
throw new Error("No valid WAV data to concatenate");
|
|
35
36
|
}
|
|
36
|
-
// Build new WAV file
|
|
37
37
|
const dataChunk = Buffer.concat(buffers);
|
|
38
|
+
const bytesPerSample = 2; // 16-bit
|
|
39
|
+
const numSamples = dataChunk.length / bytesPerSample;
|
|
40
|
+
const durationMs = Math.round((numSamples / sampleRate) * 1000);
|
|
41
|
+
return { dataChunk, sampleRate, durationMs };
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Concatenate multiple WAV chunk artifacts into a single WAV file.
|
|
45
|
+
* All chunks must be the same sample rate and format (16-bit PCM mono).
|
|
46
|
+
* Returns the path to the concatenated file.
|
|
47
|
+
*/
|
|
48
|
+
export async function concatWavFiles(chunks, outputDir) {
|
|
49
|
+
const { dataChunk, sampleRate, durationMs } = await concatWavBuffers(chunks);
|
|
38
50
|
const wavFile = buildWavFile(dataChunk, sampleRate);
|
|
39
51
|
const filename = `vsmcp_concat_${randomUUID().slice(0, 8)}.wav`;
|
|
40
52
|
const outPath = join(outputDir, filename);
|
|
41
53
|
await writeFile(outPath, wavFile);
|
|
42
|
-
const bytesPerSample = 2; // 16-bit
|
|
43
|
-
const numSamples = dataChunk.length / bytesPerSample;
|
|
44
|
-
const durationMs = Math.round((numSamples / sampleRate) * 1000);
|
|
45
54
|
return { path: outPath, durationMs };
|
|
46
55
|
}
|
|
47
56
|
/**
|
|
48
57
|
* Concatenate multiple WAV chunk artifacts into a single base64 string.
|
|
49
58
|
*/
|
|
50
59
|
export async function concatWavBase64(chunks) {
|
|
51
|
-
const
|
|
52
|
-
let totalDataSize = 0;
|
|
53
|
-
let sampleRate = 24000;
|
|
54
|
-
for (const chunk of chunks) {
|
|
55
|
-
let wav;
|
|
56
|
-
if (chunk.audioPath) {
|
|
57
|
-
wav = await readFile(chunk.audioPath);
|
|
58
|
-
}
|
|
59
|
-
else if (chunk.audioBytesBase64) {
|
|
60
|
-
wav = Buffer.from(chunk.audioBytesBase64, "base64");
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
continue;
|
|
64
|
-
}
|
|
65
|
-
const parsed = parseWavData(wav);
|
|
66
|
-
if (parsed) {
|
|
67
|
-
buffers.push(parsed.data);
|
|
68
|
-
totalDataSize += parsed.data.length;
|
|
69
|
-
sampleRate = parsed.sampleRate;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
if (buffers.length === 0) {
|
|
73
|
-
throw new Error("No valid WAV data to concatenate");
|
|
74
|
-
}
|
|
75
|
-
const dataChunk = Buffer.concat(buffers);
|
|
60
|
+
const { dataChunk, sampleRate, durationMs } = await concatWavBuffers(chunks);
|
|
76
61
|
const wavFile = buildWavFile(dataChunk, sampleRate);
|
|
77
|
-
const bytesPerSample = 2;
|
|
78
|
-
const numSamples = dataChunk.length / bytesPerSample;
|
|
79
|
-
const durationMs = Math.round((numSamples / sampleRate) * 1000);
|
|
80
62
|
return { base64: wavFile.toString("base64"), durationMs };
|
|
81
63
|
}
|
|
82
64
|
function parseWavData(wav) {
|
|
@@ -86,20 +68,27 @@ function parseWavData(wav) {
|
|
|
86
68
|
return null;
|
|
87
69
|
if (wav.toString("ascii", 8, 12) !== "WAVE")
|
|
88
70
|
return null;
|
|
89
|
-
|
|
90
|
-
|
|
71
|
+
// Walk chunks iteratively to find 'fmt ' and 'data'
|
|
72
|
+
let sampleRate = null;
|
|
73
|
+
let dataBuffer = null;
|
|
91
74
|
let offset = 12;
|
|
92
75
|
while (offset < wav.length - 8) {
|
|
93
76
|
const chunkId = wav.toString("ascii", offset, offset + 4);
|
|
94
77
|
const chunkSize = wav.readUInt32LE(offset + 4);
|
|
95
|
-
if (chunkId === "
|
|
78
|
+
if (chunkId === "fmt " && chunkSize >= 16) {
|
|
79
|
+
sampleRate = wav.readUInt32LE(offset + 12); // bytes 4-7 of fmt payload
|
|
80
|
+
}
|
|
81
|
+
else if (chunkId === "data") {
|
|
96
82
|
const dataStart = offset + 8;
|
|
97
83
|
const dataEnd = Math.min(dataStart + chunkSize, wav.length);
|
|
98
|
-
|
|
84
|
+
dataBuffer = wav.subarray(dataStart, dataEnd);
|
|
99
85
|
}
|
|
100
|
-
|
|
86
|
+
// RIFF spec: chunks are word-aligned (pad odd sizes to next even boundary)
|
|
87
|
+
offset += 8 + chunkSize + (chunkSize % 2);
|
|
101
88
|
}
|
|
102
|
-
|
|
89
|
+
if (sampleRate === null || dataBuffer === null)
|
|
90
|
+
return null;
|
|
91
|
+
return { sampleRate, data: dataBuffer };
|
|
103
92
|
}
|
|
104
93
|
export function buildWavFile(pcmData, sampleRate) {
|
|
105
94
|
const bytesPerSample = 2;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"concat.js","sourceRoot":"","sources":["../../src/orchestrator/concat.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAE7D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC
|
|
1
|
+
{"version":3,"file":"concat.js","sourceRoot":"","sources":["../../src/orchestrator/concat.ts"],"names":[],"mappings":"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"}
|
package/dist/presets.d.ts
CHANGED
|
@@ -1,10 +1,46 @@
|
|
|
1
1
|
/** Voice presets — named configurations mapping to approved voices. */
|
|
2
|
+
/** Prosody configuration for fine-grained speech control (SSML-based backends). */
|
|
3
|
+
export interface ProsodyConfig {
|
|
4
|
+
/** Pitch adjustment (e.g. "+5%", "-8%", "0%"). Maps to SSML <prosody pitch="...">. */
|
|
5
|
+
readonly pitch?: string;
|
|
6
|
+
/** Rate multiplier as string (e.g. "0.92", "1.05"). Maps to SSML <prosody rate="...">. */
|
|
7
|
+
readonly rate?: string;
|
|
8
|
+
/** Volume level. Maps to SSML <prosody volume="...">. */
|
|
9
|
+
readonly volume?: "x-soft" | "soft" | "medium" | "loud" | "x-loud";
|
|
10
|
+
/** Emphasis level for punch words. Maps to SSML <emphasis level="...">. */
|
|
11
|
+
readonly emphasis?: "none" | "reduced" | "moderate" | "strong";
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Piper-native prosody config — maps directly to Piper's SynthesisConfig params.
|
|
15
|
+
* Used when VOICE_SOUNDBOARD_ENGINE=piper for real prosody control
|
|
16
|
+
* (length_scale, noise_scale, noise_w_scale, volume).
|
|
17
|
+
*/
|
|
18
|
+
export interface PiperProsodyConfig {
|
|
19
|
+
/** Phoneme length scale (>1 = slower, <1 = faster). Default 1.0. */
|
|
20
|
+
readonly length_scale: number;
|
|
21
|
+
/** Generator noise scale (lower = flatter/more monotone, higher = more expressive). 0–1. */
|
|
22
|
+
readonly noise_scale: number;
|
|
23
|
+
/** Phoneme width noise scale (lower = metronomic, higher = erratic timing). 0–1. */
|
|
24
|
+
readonly noise_w_scale: number;
|
|
25
|
+
/** Volume multiplier (0.5–1.5). Default 1.0. */
|
|
26
|
+
readonly volume: number;
|
|
27
|
+
/** Piper voice model name (e.g. "en_GB-alan-medium"). */
|
|
28
|
+
readonly piper_voice: string;
|
|
29
|
+
}
|
|
2
30
|
export interface PresetConfig {
|
|
3
31
|
readonly name: string;
|
|
4
32
|
readonly voice: string;
|
|
5
33
|
readonly speed: number;
|
|
6
34
|
readonly description: string;
|
|
35
|
+
/** Optional prosody overrides for backends that support SSML. */
|
|
36
|
+
readonly prosody?: ProsodyConfig;
|
|
37
|
+
/** Optional Piper-native prosody config (used when engine=piper). */
|
|
38
|
+
readonly piperProsody?: PiperProsodyConfig;
|
|
7
39
|
}
|
|
40
|
+
/** Humor mood identifiers for sensor-humor integration. */
|
|
41
|
+
export type HumorMood = "dry" | "roast" | "chaotic" | "cheeky" | "cynic" | "zoomer";
|
|
42
|
+
/** All valid humor mood names. */
|
|
43
|
+
export declare const HUMOR_MOODS: readonly HumorMood[];
|
|
8
44
|
/**
|
|
9
45
|
* Built-in presets. All voices reference the approved roster.
|
|
10
46
|
*
|
|
@@ -13,8 +49,20 @@ export interface PresetConfig {
|
|
|
13
49
|
* to the closest approved alternatives.
|
|
14
50
|
*/
|
|
15
51
|
export declare const PRESETS: ReadonlyMap<string, PresetConfig>;
|
|
16
|
-
/**
|
|
52
|
+
/**
|
|
53
|
+
* Humor mood presets — voice + prosody tuned for comedic delivery styles.
|
|
54
|
+
* Used by sensor-humor MCP tool for spoken comedy integration.
|
|
55
|
+
*/
|
|
56
|
+
export declare const HUMOR_PRESETS: ReadonlyMap<string, PresetConfig>;
|
|
57
|
+
/** All preset names as a set (includes humor presets). */
|
|
17
58
|
export declare const PRESET_NAMES: ReadonlySet<string>;
|
|
18
|
-
/** Get a preset by name, or undefined if not found. */
|
|
59
|
+
/** Get a preset by name, or undefined if not found. Searches both standard and humor presets. */
|
|
19
60
|
export declare function getPreset(name: string): PresetConfig | undefined;
|
|
61
|
+
/** Get a humor preset by mood name (e.g. "dry" → humor_dry preset). */
|
|
62
|
+
export declare function getHumorPreset(mood: HumorMood): PresetConfig | undefined;
|
|
63
|
+
/**
|
|
64
|
+
* Wrap text in SSML prosody tags based on a ProsodyConfig.
|
|
65
|
+
* Returns the original text unchanged if no prosody is defined.
|
|
66
|
+
*/
|
|
67
|
+
export declare function wrapWithProsody(text: string, prosody?: ProsodyConfig): string;
|
|
20
68
|
//# sourceMappingURL=presets.d.ts.map
|
package/dist/presets.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../src/presets.ts"],"names":[],"mappings":"AAAA,uEAAuE;AAEvE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../src/presets.ts"],"names":[],"mappings":"AAAA,uEAAuE;AAEvE,mFAAmF;AACnF,MAAM,WAAW,aAAa;IAC5B,sFAAsF;IACtF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,0FAA0F;IAC1F,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,yDAAyD;IACzD,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;IACnE,2EAA2E;IAC3E,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;CAChE;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,oEAAoE;IACpE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,4FAA4F;IAC5F,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,oFAAoF;IACpF,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,gDAAgD;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,yDAAyD;IACzD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,iEAAiE;IACjE,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC;IACjC,qEAAqE;IACrE,QAAQ,CAAC,YAAY,CAAC,EAAE,kBAAkB,CAAC;CAC5C;AAED,2DAA2D;AAC3D,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEpF,kCAAkC;AAClC,eAAO,MAAM,WAAW,EAAE,SAAS,SAAS,EAElC,CAAC;AAEX;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAMpD,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAiD1D,CAAC;AAQH,0DAA0D;AAC1D,eAAO,MAAM,YAAY,EAAE,WAAW,CAAC,MAAM,CAA+B,CAAC;AAE7E,iGAAiG;AACjG,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAEhE;AAED,uEAAuE;AACvE,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,YAAY,GAAG,SAAS,CAExE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,CAe7E"}
|
package/dist/presets.js
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
/** Voice presets — named configurations mapping to approved voices. */
|
|
2
|
+
/** All valid humor mood names. */
|
|
3
|
+
export const HUMOR_MOODS = [
|
|
4
|
+
"dry", "roast", "chaotic", "cheeky", "cynic", "zoomer",
|
|
5
|
+
];
|
|
2
6
|
/**
|
|
3
7
|
* Built-in presets. All voices reference the approved roster.
|
|
4
8
|
*
|
|
@@ -13,10 +17,94 @@ export const PRESETS = new Map([
|
|
|
13
17
|
["storyteller", { name: "storyteller", voice: "bf_emma", speed: 0.9, description: "Expressive, varied pacing" }],
|
|
14
18
|
["whisper", { name: "whisper", voice: "af_sky", speed: 0.85, description: "Soft, intimate, gentle" }],
|
|
15
19
|
]);
|
|
16
|
-
/**
|
|
17
|
-
|
|
18
|
-
|
|
20
|
+
/**
|
|
21
|
+
* Humor mood presets — voice + prosody tuned for comedic delivery styles.
|
|
22
|
+
* Used by sensor-humor MCP tool for spoken comedy integration.
|
|
23
|
+
*/
|
|
24
|
+
export const HUMOR_PRESETS = new Map([
|
|
25
|
+
["humor_dry", {
|
|
26
|
+
name: "humor_dry",
|
|
27
|
+
voice: "bm_george",
|
|
28
|
+
speed: 0.92,
|
|
29
|
+
description: "Deadpan British flat — understated devastation",
|
|
30
|
+
prosody: { pitch: "-8%", rate: "0.92", volume: "medium", emphasis: "none" },
|
|
31
|
+
piperProsody: { piper_voice: "en_GB-alan-medium", length_scale: 1.15, noise_scale: 0.3, noise_w_scale: 0.3, volume: 0.9 },
|
|
32
|
+
}],
|
|
33
|
+
["humor_roast", {
|
|
34
|
+
name: "humor_roast",
|
|
35
|
+
voice: "am_eric",
|
|
36
|
+
speed: 1.05,
|
|
37
|
+
description: "Warm sarcasm — slight energy on verdict labels",
|
|
38
|
+
prosody: { pitch: "+5%", rate: "1.05", volume: "medium", emphasis: "moderate" },
|
|
39
|
+
piperProsody: { piper_voice: "en_US-ryan-high", length_scale: 0.95, noise_scale: 0.667, noise_w_scale: 0.8, volume: 1.0 },
|
|
40
|
+
}],
|
|
41
|
+
["humor_chaotic", {
|
|
42
|
+
name: "humor_chaotic",
|
|
43
|
+
voice: "am_liam",
|
|
44
|
+
speed: 1.05,
|
|
45
|
+
description: "News anchor goes off-script — grounded start, absurd pivot, total confidence",
|
|
46
|
+
prosody: { pitch: "+5%", rate: "1.05", volume: "medium", emphasis: "moderate" },
|
|
47
|
+
piperProsody: { piper_voice: "en_US-lessac-high", length_scale: 0.95, noise_scale: 0.7, noise_w_scale: 0.8, volume: 1.05 },
|
|
48
|
+
}],
|
|
49
|
+
["humor_cheeky", {
|
|
50
|
+
name: "humor_cheeky",
|
|
51
|
+
voice: "af_jessica",
|
|
52
|
+
speed: 1.0,
|
|
53
|
+
description: "Playful teasing — warm opener, gentle mockery with a wink",
|
|
54
|
+
prosody: { pitch: "+3%", rate: "1.0", volume: "medium", emphasis: "moderate" },
|
|
55
|
+
piperProsody: { piper_voice: "en_GB-cori-high", length_scale: 1.0, noise_scale: 0.6, noise_w_scale: 0.65, volume: 1.0 },
|
|
56
|
+
}],
|
|
57
|
+
["humor_cynic", {
|
|
58
|
+
name: "humor_cynic",
|
|
59
|
+
voice: "bm_george",
|
|
60
|
+
speed: 0.90,
|
|
61
|
+
description: "Bitter jaded realism — flat, cold, quietly vicious",
|
|
62
|
+
prosody: { pitch: "-5%", rate: "0.90", volume: "soft", emphasis: "none" },
|
|
63
|
+
piperProsody: { piper_voice: "en_GB-alan-medium", length_scale: 1.20, noise_scale: 0.25, noise_w_scale: 0.25, volume: 0.85 },
|
|
64
|
+
}],
|
|
65
|
+
["humor_zoomer", {
|
|
66
|
+
name: "humor_zoomer",
|
|
67
|
+
voice: "am_fenrir",
|
|
68
|
+
speed: 1.12,
|
|
69
|
+
description: "Terminally online streamer — brisk, mocking, one caps hit",
|
|
70
|
+
prosody: { pitch: "+8%", rate: "1.12", volume: "loud", emphasis: "strong" },
|
|
71
|
+
piperProsody: { piper_voice: "en_US-ryan-high", length_scale: 0.90, noise_scale: 0.85, noise_w_scale: 0.9, volume: 1.15 },
|
|
72
|
+
}],
|
|
73
|
+
]);
|
|
74
|
+
/** Combined map: standard presets + humor presets. */
|
|
75
|
+
const ALL_PRESETS = new Map([
|
|
76
|
+
...PRESETS,
|
|
77
|
+
...HUMOR_PRESETS,
|
|
78
|
+
]);
|
|
79
|
+
/** All preset names as a set (includes humor presets). */
|
|
80
|
+
export const PRESET_NAMES = new Set(ALL_PRESETS.keys());
|
|
81
|
+
/** Get a preset by name, or undefined if not found. Searches both standard and humor presets. */
|
|
19
82
|
export function getPreset(name) {
|
|
20
|
-
return
|
|
83
|
+
return ALL_PRESETS.get(name);
|
|
84
|
+
}
|
|
85
|
+
/** Get a humor preset by mood name (e.g. "dry" → humor_dry preset). */
|
|
86
|
+
export function getHumorPreset(mood) {
|
|
87
|
+
return HUMOR_PRESETS.get(`humor_${mood}`);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Wrap text in SSML prosody tags based on a ProsodyConfig.
|
|
91
|
+
* Returns the original text unchanged if no prosody is defined.
|
|
92
|
+
*/
|
|
93
|
+
export function wrapWithProsody(text, prosody) {
|
|
94
|
+
if (!prosody)
|
|
95
|
+
return text;
|
|
96
|
+
const attrs = [];
|
|
97
|
+
if (prosody.pitch)
|
|
98
|
+
attrs.push(`pitch="${prosody.pitch}"`);
|
|
99
|
+
if (prosody.rate)
|
|
100
|
+
attrs.push(`rate="${prosody.rate}"`);
|
|
101
|
+
if (prosody.volume)
|
|
102
|
+
attrs.push(`volume="${prosody.volume}"`);
|
|
103
|
+
if (attrs.length === 0)
|
|
104
|
+
return text;
|
|
105
|
+
const inner = prosody.emphasis && prosody.emphasis !== "none"
|
|
106
|
+
? `<emphasis level="${prosody.emphasis}">${text}</emphasis>`
|
|
107
|
+
: text;
|
|
108
|
+
return `<speak><prosody ${attrs.join(" ")}>${inner}</prosody></speak>`;
|
|
21
109
|
}
|
|
22
110
|
//# sourceMappingURL=presets.js.map
|
package/dist/presets.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presets.js","sourceRoot":"","sources":["../src/presets.ts"],"names":[],"mappings":"AAAA,uEAAuE;
|
|
1
|
+
{"version":3,"file":"presets.js","sourceRoot":"","sources":["../src/presets.ts"],"names":[],"mappings":"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"}
|
package/dist/schemas.d.ts
CHANGED
package/dist/schemas.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA,oDAAoD;AAEpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAIjD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;CAC/B;AAID,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,QAAQ,CAAC;AAI7C,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA,oDAAoD;AAEpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAIjD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;CAC/B;AAID,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,QAAQ,CAAC;AAI7C,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAID,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,aAAa,CAAC;CAC1D;AAID,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC5C;AAED,uCAAuC;AACvC,MAAM,MAAM,cAAc,GACtB,oBAAoB,GACpB,2BAA2B,GAC3B,eAAe,GACf,YAAY,GACZ,oBAAoB,GACpB,mBAAmB,GACnB,qBAAqB,GACrB,iBAAiB,GACjB,sBAAsB,GACtB,qBAAqB,GACrB,kBAAkB,GAClB,kBAAkB,GAClB,oBAAoB,GACpB,gBAAgB,GAEhB,gBAAgB,GAChB,MAAM,GACN,iBAAiB,GACjB,cAAc,GACd,mBAAmB,CAAC"}
|
package/dist/sfx/parser.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/sfx/parser.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAEzE,OAAO,EAA2D,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAW1G,0DAA0D;AAC1D,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/sfx/parser.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAEzE,OAAO,EAA2D,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAW1G,0DAA0D;AAC1D,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGhD;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,OAAe,GACvB,cAAc,CAkFhB"}
|
package/dist/sfx/parser.js
CHANGED
package/dist/sfx/parser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/sfx/parser.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/sfx/parser.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,44 +1,50 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@mcptoolshop/voice-soundboard-core",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "Backend-agnostic core library for MCP Voice Soundboard — 48 voices, 9 languages, validation, SSML-lite, chunking, emotion spans, SFX tags, and schemas.",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "dist/index.js",
|
|
7
|
-
"types": "dist/index.d.ts",
|
|
8
|
-
"files": [
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
"
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
"
|
|
17
|
-
|
|
18
|
-
"url": "https://github.com/mcp-tool-shop-org/mcp-voice-soundboard
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
"
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
"
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
"
|
|
38
|
-
},
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
}
|
|
44
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "@mcptoolshop/voice-soundboard-core",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "Backend-agnostic core library for MCP Voice Soundboard — 48 voices, 9 languages, validation, SSML-lite, chunking, emotion spans, SFX tags, and schemas.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist",
|
|
10
|
+
"README.md",
|
|
11
|
+
"CHANGELOG.md",
|
|
12
|
+
"LICENSE"
|
|
13
|
+
],
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"author": "mcp-tool-shop <64996768+mcp-tool-shop@users.noreply.github.com>",
|
|
16
|
+
"repository": {
|
|
17
|
+
"type": "git",
|
|
18
|
+
"url": "https://github.com/mcp-tool-shop-org/mcp-voice-soundboard.git",
|
|
19
|
+
"directory": "packages/core"
|
|
20
|
+
},
|
|
21
|
+
"homepage": "https://github.com/mcp-tool-shop-org/mcp-voice-soundboard/tree/main/packages/core#readme",
|
|
22
|
+
"bugs": {
|
|
23
|
+
"url": "https://github.com/mcp-tool-shop-org/mcp-voice-soundboard/issues"
|
|
24
|
+
},
|
|
25
|
+
"keywords": [
|
|
26
|
+
"mcp",
|
|
27
|
+
"voice",
|
|
28
|
+
"tts",
|
|
29
|
+
"text-to-speech",
|
|
30
|
+
"soundboard",
|
|
31
|
+
"ssml",
|
|
32
|
+
"speech-synthesis",
|
|
33
|
+
"ai-agent",
|
|
34
|
+
"model-context-protocol"
|
|
35
|
+
],
|
|
36
|
+
"engines": {
|
|
37
|
+
"node": ">=20.0.0"
|
|
38
|
+
},
|
|
39
|
+
"scripts": {
|
|
40
|
+
"build": "tsc",
|
|
41
|
+
"test": "vitest run",
|
|
42
|
+
"clean": "rm -rf dist"
|
|
43
|
+
},
|
|
44
|
+
"devDependencies": {
|
|
45
|
+
"@types/node": "^22.0.0",
|
|
46
|
+
"@vitest/coverage-v8": "3",
|
|
47
|
+
"typescript": "^5.7.0",
|
|
48
|
+
"vitest": "^3.0.0"
|
|
49
|
+
}
|
|
50
|
+
}
|