Merge the MicroslopSam engine into the repository
This commit is contained in:
@@ -4,10 +4,10 @@ build/
|
||||
*.so
|
||||
*.exe
|
||||
*.dll
|
||||
!third_party/**/*.exe
|
||||
!third_party/**/*.dll
|
||||
setup/out-*.reg
|
||||
*.wav
|
||||
# Generated per-checkout configuration.
|
||||
setup/microslopsam.env
|
||||
third_party/flextalk/extracted/
|
||||
__pycache__/
|
||||
# Engine DLLs and voice data are proprietary; never commit them.
|
||||
third_party/
|
||||
|
||||
+15
-13
@@ -22,8 +22,6 @@ pure-native build, and keep a path to a fully portable engine.
|
||||
- AT&T Flextalk: Keith Bell, Kerry Watson
|
||||
- Test output: `build/test_sam.wav` (22.05 kHz), `build/test_Keith_Bell.wav`,
|
||||
`build/test_Kerry_Watson.wav` (11.025 kHz).
|
||||
- Wrapper contract test (no Wine needed, stubs wine and the engine host):
|
||||
`sh setup/test-wrapper.sh`.
|
||||
|
||||
## Build
|
||||
|
||||
@@ -61,12 +59,6 @@ without editing scripts:
|
||||
|
||||
Refresh the file after moving the tree: `MICROSLOP_UPDATE_ENV=1 setup/install.sh`.
|
||||
|
||||
In the Veskslop tree the `third_party/` assets are **not committed** (licensing; see
|
||||
`docs/TTS-DESIGN.md`). This checkout has a local `setup/microslopsam.env` (gitignored) that
|
||||
points `MICROSLOP_ASSETS`, `MICROSLOP_FLEXTALK_DIR`, and `MICROSLOP_SPEECH_H_DIR` at the
|
||||
MicroslopSam development checkout. A manual host build needs the same override, or a local
|
||||
`third_party/` with `speech.h`.
|
||||
|
||||
## Usage
|
||||
|
||||
setup/run.sh -l
|
||||
@@ -97,6 +89,14 @@ command environment (`VESKSLOP_TTS_VOX_CLEAN=1` omits the `\!wH1/\!wH0` stutter
|
||||
wrapper). Line-leading `/rate N` and `/pitch N` controls are also handled by the
|
||||
wrapper, so the WebUI does not need to implement them. See `docs/TTS-DESIGN.md`.
|
||||
|
||||
A short low-level leading hum (80 ms, 75 Hz, -48 dBFS) primes Discord's audio pipeline
|
||||
so the first word is not gated; tune with `VESKSLOP_TTS_HUM_MS` (0 = off),
|
||||
`VESKSLOP_TTS_HUM_HZ`, and `VESKSLOP_TTS_HUM_DB`.
|
||||
|
||||
**Half-Life presets** (Keith Bell): `VESKSLOP_TTS_PRESET=vox` applies the approximated
|
||||
Valve VOX profile and enables VOX prosody; `VESKSLOP_TTS_PRESET=hev` is a starting point
|
||||
for the HEV suit voice. Values are in `docs/TTS-DESIGN.md`.
|
||||
|
||||
## Layout
|
||||
|
||||
- `host/sapi4host.c` — host: voice select, pitch/speed, text -> WAV
|
||||
@@ -118,12 +118,14 @@ wrapper, so the WebUI does not need to implement them. See `docs/TTS-DESIGN.md`.
|
||||
windows.
|
||||
- Flextalk numeric speaker settings must be `REG_DWORD` (the installer script handles
|
||||
this); `REG_SZ` values cause a monotone buzz. Pitch and speed work on all voices.
|
||||
- The Flextalk archive lacks `data2.cab`; `unshield -O` extracts `data1.cab`
|
||||
but one tail file (`WatsonUNInstall.dll`) is incomplete.
|
||||
- Flextalk extraction needs `unshield -O` (old compression). The installer is
|
||||
single-volume: the new decompressor reports a phantom `data2.cab`, but `-O` extracts
|
||||
all 450 entries with exact sizes and valid PE files (the original 1997 upload log lists
|
||||
`data1.cab` only).
|
||||
|
||||
## Reference material
|
||||
|
||||
- The MicroslopSam development checkout (`third_party/`): SAPI4 runtime, MSTTS voices,
|
||||
Flextalk cabinet, `speech.h`, NetTTS parser source. Referenced through
|
||||
`setup/microslopsam.env`; not committed here.
|
||||
- `third_party/` — vendored dependencies; see `third_party/README.md`. Everything the
|
||||
tool needs is in the repo (SAPI4 runtime, MSTTS voices, Flextalk cabinet, `speech.h`,
|
||||
NetTTS parser source).
|
||||
- `/mnt/ghidra/decomp/{msttssyn.dll,speech.dll}/` — decompiled corpora (external, optional)
|
||||
|
||||
@@ -47,8 +47,32 @@ From `msttsl/mstts.inf` (`[TTSReg]`):
|
||||
`.COD` codebook, plus shared `DICT_CI.*`, `phondef`, `AMPRULES`, `ENDINGS`.
|
||||
|
||||
Extraction: `unshield -O -d extracted x installer/flextalk/data1.cab`
|
||||
(`-O` = old compression; the archive.org package has no `data2.cab`, so the
|
||||
final file `WatsonUNInstall.dll` is incomplete).
|
||||
(`-O` = old compression). The package is single-volume: the original 1997 upload log
|
||||
(`WS_FTP.LOG`) lists `data1.cab` only, and `-O` extracts all 450 entries with exact
|
||||
sizes. Without `-O`, unshield's new decompressor reports a phantom "volume 2" and fails
|
||||
on `MSVCRT.DLL` / `WatsonUNInstall.dll`; with `-O` both are complete, valid PE files.
|
||||
|
||||
The `.ENV` files the engine probes (`ae1m11lc.ENV`) were never shipped; synthesis works
|
||||
without them.
|
||||
|
||||
## Latency and output shape (measured 2026-09-16)
|
||||
|
||||
- Warm wrapper time: ~410-425 ms per short line (engine call 190-220 ms, ffmpeg measure
|
||||
~110 ms, apply ~90 ms, profile write ~57 ms when it runs). First (cold) call ~730 ms.
|
||||
- The Flextalk profile write is cached per voice in the Wine prefix
|
||||
(`~/.wine-microslopsam/.microslopsam-profile<GUID>.reg`): unchanged profiles skip
|
||||
`wine reg import`. Recreating the prefix invalidates the cache.
|
||||
- Fades: the 8 ms fade-in/out is applied to the trimmed file whose 25-30 ms padding
|
||||
silence is retained, so it shapes silence, not speech. Measured head: first sample
|
||||
>30 at 22.6 ms, speech (>500) at 29.6 ms, natural ~15 ms attack; tail decays over
|
||||
~18 ms. No click, no attenuation of the first word.
|
||||
- Leading hum (default on): 80 ms of 75 Hz at -48 dBFS peak before the engine padding,
|
||||
to prime Discord's pipeline. Verified 75.0 Hz / -48.0 dBFS, speech onset ~110 ms,
|
||||
final -18.6 LUFS / -3.0 dBFS, apply pass +~10 ms. `VESKSLOP_TTS_HUM_MS=0` disables and
|
||||
reproduces the previous output byte-for-byte. Tuning: `_HUM_HZ` (30-200), `_HUM_DB`
|
||||
(-80..-6; raise toward -36 if a client still gates the start).
|
||||
The hum bypasses the high-pass/trim chain, so `VESKSLOP_TTS_HIGHPASS` (up to 400 Hz)
|
||||
cannot remove it (verified at 200 and 400 Hz).
|
||||
|
||||
## SAPI4 runtime engine discovery (`speech.dll`)
|
||||
|
||||
@@ -105,6 +129,16 @@ final file `WatsonUNInstall.dll` is incomplete).
|
||||
- VOX mode is Flextalk-only. The wrapper enables it with `VESKSLOP_TTS_VOX=1`
|
||||
(`VESKSLOP_TTS_VOX_CLEAN=1` drops the stutter wrapper) and it takes precedence
|
||||
over `VESKSLOP_TTS_WORDS`.
|
||||
- Half-Life presets (`VESKSLOP_TTS_PRESET=vox|hev`) target Keith Bell only. VOX values
|
||||
come from NetTTS `nettts_flextalk_vox_profile.reg`: pitch 3, rate 17, prominences 22,
|
||||
head size 52, volume 70 (factory: 27/33/17/46/100); `vox` also implies VOX prosody.
|
||||
`hev` (pitch 15, rate 24) is an unverified starting point - HL1 credits the suit
|
||||
sounds to Kelly Bailey with no published settings.
|
||||
- Flextalk rate/pitch are applied as **vendor tags** (`\!R` = duration factor,
|
||||
`\!%` = pitch multiplier), never `-s`/`-p`, because ITTSAttributes override the
|
||||
registry profile. Neutral values emit no tag, so Veskslop's default sliders
|
||||
(1.0 / 0) reproduce the preset byte-for-byte. Presets write the full 26-value NetTTS
|
||||
profile plus `Default Speaker` into both HKCU and HKLM.
|
||||
- Line-leading `/rate N` and `/pitch N` controls are consumed by the wrapper
|
||||
(percent, 100 = normal; `<= 2.0` means multiplier). They override the env
|
||||
speed/pitch and are not spoken; a controls-only line yields 100 ms of silence.
|
||||
|
||||
@@ -229,6 +229,22 @@ record what the engine needs to interpret, add, or hide._
|
||||
- Verified: Keith Bell -18.4 LUFS, Kerry Watson -17.9 LUFS, Sam -20.6 LUFS; every file is
|
||||
48 kHz mono s16le at -3.0 dBFS true peak. The WAV handed to Veskslop is compliant; the
|
||||
"Veskslop does not normalize" rule holds.
|
||||
- Fades: the 8 ms fade-in/out is applied to the trimmed file, and the retained 25-30 ms
|
||||
padding silence sits at the edges, so the fade shapes silence, not the first phoneme.
|
||||
Measured on a Keith Bell line: first sample >30 at 22.6 ms, speech (>500) at 29.6 ms,
|
||||
attack rising naturally over about 15 ms, tail decaying over about 18 ms. No click and
|
||||
no attenuation of the first word; Veskslop's 150 ms playback lead-in sits on top.
|
||||
- Leading hum (on by default): 80 ms of a 75 Hz sine at -48 dBFS peak is prepended
|
||||
before the engine padding, to keep Discord's audio pipeline open so the first word is
|
||||
not gated. Configurable: `VESKSLOP_TTS_HUM_MS` (0 disables), `_HUM_HZ` (30-200),
|
||||
`_HUM_DB` (-80..-6). It sits about 45 dB under the speech peak; raise `_HUM_DB` toward
|
||||
-36 if a client still gates the start, lower it for stealth. Generated in the same
|
||||
ffmpeg pass (no extra process) and not part of the EBU measurement, so the documented
|
||||
loudness/peak targets still hold. The hum is mixed on its own chain and bypasses the
|
||||
high-pass/trim chain, so raising `VESKSLOP_TTS_HIGHPASS` (40-400 Hz) never removes it
|
||||
(verified at 200 and 400 Hz: still 75.0 Hz / -48.0 dBFS). Measured: hum 75.0 Hz /
|
||||
-48.0 dBFS, speech onset at about 110 ms, final -18.6 LUFS / -3.0 dBFS; `HUM_MS=0`
|
||||
reproduces the previous output byte-for-byte.
|
||||
|
||||
### Voice IDs
|
||||
|
||||
@@ -371,6 +387,94 @@ Other NetTTS features and their relevance:
|
||||
our prefix runs the engines with builtin Wine libraries.
|
||||
- Win32 GUI and preset sliders: Veskslop provides the UI.
|
||||
|
||||
### Half-Life VOX / HEV presets
|
||||
|
||||
The Half-Life announcement voice (VOX / Black Mesa Announcement System) is the Flextalk
|
||||
engine's **Keith Bell** voice with an adjusted speaker profile. NetTTS publishes an
|
||||
approximation of Valve's settings (`scripts/winetricks/nettts_flextalk_vox_profile.reg`,
|
||||
see its issues #53/#54/#67): the profile targets Keith Bell's speaker key and leaves
|
||||
Kerry Watson at factory values. The wrapper implements it as a preset:
|
||||
|
||||
VESKSLOP_TTS_PRESET=vox # implies VOX prosody unless VESKSLOP_TTS_VOX is set
|
||||
VESKSLOP_TTS_PRESET=hev # HEV suit starting point (see note below)
|
||||
|
||||
| Profile value | Factory (Keith) | VOX preset | HEV preset (approx.) |
|
||||
| --- | --- | --- | --- |
|
||||
| Pitch | 27 | 3 | 15 |
|
||||
| Speaking Rate | 33 | 17 | 24 |
|
||||
| Prominences | 17 | 22 | 22 |
|
||||
| Head Size | 46 | 52 | 52 |
|
||||
| Lowering | 40 | 40 | 40 |
|
||||
| Volume | 100 | 70 | 70 |
|
||||
| Expression | 59 | 59 | 59 |
|
||||
|
||||
- Presets apply only to `keith-bell`; every other voice keeps its defaults.
|
||||
- Precedence: preset < `VESKSLOP_TTS_PROFILE` < `VESKSLOP_TTS_EXPRESSION`.
|
||||
- Equivalent explicit override:
|
||||
`VESKSLOP_TTS_PROFILE='pitch:3,rate:17,volume:70,prominences:22,head_size:52,lowering:40'`.
|
||||
- HEV suit: Half-Life 1 credits the suit sounds to Kelly Bailey; no settings were ever
|
||||
published. The `hev` preset is a starting point (less extreme than VOX); tune pitch and
|
||||
rate to taste. VOX prosody is optional there (`VESKSLOP_TTS_VOX=1`).
|
||||
|
||||
#### How NetTTS applies the settings (reference behaviour)
|
||||
|
||||
Checked against the NetTTS sources (`src/main.cpp`, `src/tts_engine.cpp`,
|
||||
`scripts/winetricks/nettts_flextalk_vox_profile.reg`):
|
||||
|
||||
1. **Voice**: the imported profile points `Default Speaker` at Keith Bell's GUID, and
|
||||
NetTTS selects the default mode (empty `TTSMODEINFO`) rather than a voice name.
|
||||
2. **Speaker profile**: the full key set is imported into **both** hives
|
||||
(`HKEY_CURRENT_USER` and `HKEY_LOCAL_MACHINE`) at prefix setup; every numeric value is
|
||||
`REG_DWORD`.
|
||||
3. **Rate and pitch are never set through `ITTSAttributes`.** NetTTS keeps UI percentages
|
||||
and prepends sticky vendor tags to the utterance text:
|
||||
- `\!R<factor>` = duration factor. Smaller is faster: `0.30` very fast, `1.00` 1.0x,
|
||||
`1.60` slow. No tag at 100%.
|
||||
- `\!%<factor>` = pitch multiplier. `0.85` lower, `1.20` higher. No tag at 100%.
|
||||
4. **Volume** goes through `ITTSAttributes::VolumeSet(percent * 65535 / 100)` (Flextalk
|
||||
scale; MSTTS uses 0..0xFFFFFFFF).
|
||||
5. **Prosody**: the VOX parser output wrapped in `\!wH1 ... \!wH0`.
|
||||
6. The tags are sticky inside an engine instance; NetTTS sends the neutral tag only to
|
||||
reset. Our wrapper starts a fresh engine per line, so stickiness cannot leak.
|
||||
|
||||
#### How to implement it correctly (and the bug this fixed)
|
||||
|
||||
Earlier wrapper versions mapped `VESKSLOP_TTS_SPEED`/`_PITCH` to `ITTSAttributes`
|
||||
`-s`/`-p`. Measured with the VOX profile loaded, Veskslop's neutral slider values
|
||||
(`speed=1.0, pitch=0`) sent `-s 150 -p 106`, which overrode the registry profile: F0
|
||||
jumped from 87 Hz back to 120 Hz and the line shortened from 5.83 s to 5.10 s. That is
|
||||
the "too fast, not deep enough" report.
|
||||
|
||||
The correct implementation for Flextalk:
|
||||
|
||||
1. Write the speaker profile first (both hives, `REG_DWORD`, full key set for presets;
|
||||
`Default Speaker` for presets).
|
||||
2. Translate rate/pitch to vendor tags, **not** attributes:
|
||||
- speed multiplier `m` -> `\!R(1/m)` (clamp 0.25-4.0)
|
||||
- pitch semitones `st` -> `\!%(2^(st/12))` (clamp 0.5-2.0)
|
||||
3. Emit **no tag when neutral** (`m == 1`, `st == 0`). `\!R1.00` is a literal 1.0x rate,
|
||||
not the profile rate, so emitting it defeats the preset.
|
||||
4. Prepend the tags to the text (`\!R0.77 \!%1.19 Attention all personnel.`); for word
|
||||
mode, prepend to each word because every word is a separate engine instance.
|
||||
5. Keep `-s`/`-p` only for MSTTS voices, which have no vendor tags.
|
||||
6. Verify with F0 and duration, not by ear: factory Keith ~3.35 s / ~123 Hz; VOX preset
|
||||
~5.83 s / ~87 Hz; neutral sliders must reproduce the preset byte-for-byte.
|
||||
|
||||
Verified matrix (same line, Keith Bell):
|
||||
|
||||
| Run | Duration | F0 median |
|
||||
| --- | --- | --- |
|
||||
| factory, no adjustments | 3.35 s | 123 Hz |
|
||||
| VOX preset, no adjustments | 5.83 s | 87 Hz |
|
||||
| VOX preset + `speed=1.0 pitch=0` | 5.83 s, byte-identical | 87 Hz |
|
||||
| VOX preset + `speed=1.3` | 4.02 s | 84 Hz |
|
||||
| VOX preset + `pitch=+3` | 5.83 s | 88 Hz |
|
||||
| HEV preset, no adjustments | 3.79 s | - |
|
||||
|
||||
Registry inspection after a preset run: 26 values in the Keith speaker key in both
|
||||
hives, `Pitch=0x3`, `Speaking Rate=0x11`, `Gender=0x2`, `Line Mode=0x1`,
|
||||
`Default Speaker={11260610-C84A-11CE-AEC4-0000C0E9CB87}`.
|
||||
|
||||
### Inline rate/pitch controls (engine-side)
|
||||
|
||||
The wrapper consumes NetTTS-style, line-leading controls, so Veskslop and the WebUI do
|
||||
@@ -437,8 +541,10 @@ This tree is written to survive a copy into the Veskslop repository next to its
|
||||
(`VESKSLOP_TTS_*`, `{out}`, `{text_file}`, voice/speed/pitch/expression/profile/
|
||||
highpass/echo/words/word_gap_ms). New features are additive and default off.
|
||||
3. Optional Veskslop-side follow-up: a `tts.vox` preference that exports
|
||||
`VESKSLOP_TTS_VOX` (like `words`) and a line in the TTS panel help. The inline
|
||||
`/rate` and `/pitch` controls need no UI work at all.
|
||||
`VESKSLOP_TTS_VOX` (like `words`) and a line in the TTS panel help. If presets are
|
||||
exposed, also export `VESKSLOP_TTS_PRESET` and have the voice metadata defaults reflect
|
||||
the preset values so the UI's "default" snap points match. The inline `/rate` and
|
||||
`/pitch` controls need no UI work at all.
|
||||
|
||||
### Transport and latency
|
||||
|
||||
@@ -451,11 +557,15 @@ This tree is written to survive a copy into the Veskslop repository next to its
|
||||
text file, transliterates UTF-8 to CP1252, starts or reuses an Xvfb when `DISPLAY` is
|
||||
unset, calls the engine, then post-processes (trim, fades, measured fixed gain, 48 kHz
|
||||
mono s16le). A stale private Xvfb is retried once.
|
||||
- Measured on the dev host: engine-only synthesis is about 290 ms wall for Sam and about
|
||||
40 ms for Flextalk, including process start; the full wrapper adds the ffmpeg
|
||||
measure/apply passes, about 630-880 ms per short line. That is above the 500 ms target;
|
||||
the known optimization is a per-voice static gain (skip the measurement pass), expected
|
||||
to land around 400-500 ms.
|
||||
- Measured on the dev host (warm): engine call about 190 ms (Flextalk) to 220 ms (Sam)
|
||||
including Wine start, ffmpeg measure about 110 ms, ffmpeg apply about 90 ms, profile
|
||||
registry write about 57 ms when it runs. Full wrapper: about 410-425 ms per short line
|
||||
warm, about 730 ms for the first (cold) call. The 500 ms target is met warm; Veskslop's
|
||||
"Start engine" warm-up covers the cold case.
|
||||
- Latency optimization implemented: the Flextalk profile write is cached per voice inside
|
||||
the Wine prefix (`.microslopsam-profile<GUID>.reg`); an unchanged profile skips the
|
||||
`wine reg import` round-trip (about 57 ms warm, 300 ms cold). Recreating the prefix
|
||||
invalidates the cache automatically.
|
||||
- Manual checks: `setup/run.sh -l`, `setup/run.sh -v "Keith Bell" -t "Hello." -o out.wav`
|
||||
(raw engine WAV), and the wrapper above for normalized output.
|
||||
- HTTP provider (later): a persistent process returning `audio/wav` bytes and `/voices`,
|
||||
@@ -465,6 +575,10 @@ This tree is written to survive a copy into the Veskslop repository next to its
|
||||
|
||||
- Flextalk numeric speaker settings must be `REG_DWORD`; `REG_SZ` values make the engine
|
||||
synthesize a buzz. `setup/setup-flextalk.sh` writes them correctly.
|
||||
- Flextalk cabinet is single-volume: `unshield -O` extracts all 450 entries with exact
|
||||
sizes. Without `-O`, the new decompressor reports a phantom "volume 2" and fails on
|
||||
`MSVCRT.DLL` / `WatsonUNInstall.dll`; both are complete with `-O` (verified against the
|
||||
original 1997 upload log, which lists `data1.cab` only).
|
||||
- The mode list includes TruVoice names with no installed voice data; filter those out of
|
||||
`/voices` (or mark them `unavailable`).
|
||||
- Wine needs a working X display; the project helper starts a persistent Xvfb.
|
||||
|
||||
@@ -78,7 +78,7 @@ check "neutral flextalk has no attributes" "0" "$(attr_count)"
|
||||
# Adjustments ride as tags; attributes stay out even at non-neutral values.
|
||||
VESKSLOP_TTS_VOICE=keith-bell VESKSLOP_TTS_VOX=0 \
|
||||
VESKSLOP_TTS_SPEED=1.3 VESKSLOP_TTS_PITCH=3 run_wrapper
|
||||
check "flextalk rate tag" "\!R0.769 \!%1.189 Attention all personnel." "$(text_for)"
|
||||
check "flextalk rate tag" "\!R0.77 \!%1.19 Attention all personnel." "$(text_for)"
|
||||
check "flextalk has no attributes" "0" "$(attr_count)"
|
||||
|
||||
# MSTTS has no vendor tags and keeps the attributes.
|
||||
@@ -109,7 +109,7 @@ VESKSLOP_TTS_VOICE=keith-bell VESKSLOP_TTS_PRESET=vox VESKSLOP_TTS_VOX=1 \
|
||||
check "word mode with preset synthesizes every word" "3" "$(grep -c '^ARGV:' "$STUB_LOG")"
|
||||
check "word mode skips the VOX parser" "0" "$(grep -c 'wH1' "$STUB_LOG")"
|
||||
check "word mode tags every word" "3" \
|
||||
"$(sed -n 's/.*\[-t\] \[\(.*\)\] \[-o\].*/\1/p' "$STUB_LOG" | grep -c '^\\!R0.800 ')"
|
||||
"$(sed -n 's/.*\[-t\] \[\(.*\)\] \[-o\].*/\1/p' "$STUB_LOG" | grep -c '^\\!R0.80 ')"
|
||||
check "word mode keeps the preset profile" "2" "$(grep -c '"Pitch"=dword:00000003' "$STUB_REG")"
|
||||
check "word mode emits no attributes" "0" "$(attr_count)"
|
||||
|
||||
|
||||
@@ -19,9 +19,13 @@
|
||||
# VESKSLOP_TTS_WORDS 1 = synthesize each word, merge (Flextalk);
|
||||
# combines with a preset and wins over VOX prosody
|
||||
# VESKSLOP_TTS_WORD_GAP_MS silence between words in ms (0-500)
|
||||
# VESKSLOP_TTS_PRESET vox | hev (Keith Bell profile preset; vox implies VOX)
|
||||
# VESKSLOP_TTS_VOX 1 = VOX prosody, NetTTS-style (Flextalk)
|
||||
# VESKSLOP_TTS_VOX_CLEAN 1 = VOX without the \!wH1/\!wH0 stutter
|
||||
# VESKSLOP_TTS_HUM_MS leading low hum in ms, 0 = off (default 80)
|
||||
# VESKSLOP_TTS_HUM_HZ hum frequency, 30-200 (default 75)
|
||||
# VESKSLOP_TTS_HUM_DB hum peak level, -80..-6 (default -48)
|
||||
# VESKSLOP_TTS_PRESET vox | hev (Half-Life profiles, Keith Bell;
|
||||
# vox also enables VOX prosody)
|
||||
#
|
||||
# Output: 48 kHz mono s16le WAV, trimmed, faded, loudness-normalized.
|
||||
set -eu
|
||||
@@ -30,17 +34,18 @@ HERE=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
|
||||
. "$HERE/config.sh"
|
||||
ROOT=$MICROSLOP_ROOT
|
||||
|
||||
# VESKSLOP_TTS_VOICES entries: id|Name|gender|language[|flags]
|
||||
# `expression=NN` marks a Flextalk voice with an Expression profile parameter and
|
||||
# its registry default. Expression is applied at voice load, so the wrapper writes
|
||||
# it into the Wine registry before synthesis.
|
||||
# The Keith Bell defaults follow the active preset so the UI's "default" snap points match
|
||||
# the values the preset actually writes.
|
||||
# The Keith Bell defaults follow the active preset so the UI's "default" snap points
|
||||
# match the values the preset actually writes.
|
||||
case "${VESKSLOP_TTS_PRESET:-}" in
|
||||
vox) KB_DEFAULTS="pitch:3:rate:17:prominences:22:head_size:52:lowering:40:expression:59" ;;
|
||||
hev) KB_DEFAULTS="pitch:15:rate:24:prominences:22:head_size:52:lowering:40:expression:59" ;;
|
||||
*) KB_DEFAULTS="pitch:27:rate:33:prominences:17:head_size:46:lowering:40:expression:59" ;;
|
||||
esac
|
||||
|
||||
# VESKSLOP_TTS_VOICES entries: id|Name|gender|language[|flags]
|
||||
# `expression=NN` marks a Flextalk voice with an Expression profile parameter and
|
||||
# its registry default. Expression is applied at voice load, so the wrapper writes
|
||||
# it into the Wine registry before synthesis.
|
||||
VOICES="sam|Sam|male|en,mary|Mary|female|en,mike|Mike|male|en,keith-bell|Keith Bell|male|en|expression=59+defaults=$KB_DEFAULTS,kerry-watson|Kerry Watson|female|en|expression=100+defaults=pitch:65:rate:32:prominences:17:head_size:45:lowering:40:expression:100,mike-telephone|Mike (for Telephone)|male|en,mary-telephone|Mary (for Telephone)|female|en,mike-hall|Mike in Hall|male|en,mike-stadium|Mike in Stadium|male|en,mike-space|Mike in Space|male|en,mary-hall|Mary in Hall|female|en,mary-stadium|Mary in Stadium|female|en,mary-space|Mary in Space|female|en"
|
||||
|
||||
if [ "${1:-}" = "--voices" ]; then
|
||||
@@ -62,11 +67,14 @@ WORD_GAP=${VESKSLOP_TTS_WORD_GAP_MS:-120}
|
||||
VOX=${VESKSLOP_TTS_VOX:-0}
|
||||
VOX_CLEAN=${VESKSLOP_TTS_VOX_CLEAN:-0}
|
||||
PRESET=${VESKSLOP_TTS_PRESET:-}
|
||||
|
||||
# The vox preset implies VOX prosody unless the caller set VESKSLOP_TTS_VOX explicitly.
|
||||
if [ "$PRESET" = "vox" ] && [ -z "${VESKSLOP_TTS_VOX+x}" ]; then
|
||||
# The VOX preset is the Half-Life announcement voice: it implies VOX prosody
|
||||
# unless the caller explicitly disables it.
|
||||
if [ "$PRESET" = "vox" ] && [ -z "${VESKSLOP_TTS_VOX:-}" ]; then
|
||||
VOX=1
|
||||
fi
|
||||
HUM_MS=${VESKSLOP_TTS_HUM_MS:-80}
|
||||
HUM_HZ=${VESKSLOP_TTS_HUM_HZ:-75}
|
||||
HUM_DB=${VESKSLOP_TTS_HUM_DB:--48}
|
||||
|
||||
case "$VOICE" in
|
||||
sam) ENGVOICE="Sam" ;;
|
||||
@@ -160,20 +168,24 @@ if [ -f "$TEXTFILE" ]; then
|
||||
fi
|
||||
fi
|
||||
|
||||
# Build the engine arguments from the (possibly command-overridden) speed/pitch.
|
||||
# Flextalk: rate and pitch ride as sticky vendor tags. Setting them through
|
||||
# ITTSAttributes (-s/-p) overrides the speaker profile, which is the bug that made
|
||||
# presets sound "too fast and not deep enough". MSTTS has no tags, so it keeps -s/-p.
|
||||
# Build the engine controls from the (possibly command-overridden) speed/pitch.
|
||||
# Flextalk voices take sticky vendor tags relative to the registry profile, the
|
||||
# way NetTTS does it: \!R is a duration factor (smaller = faster, 1.0 neutral)
|
||||
# and \!% is a pitch multiplier (1.0 neutral). ITTSAttributes -s/-p would
|
||||
# override the profile and make presets sound fast and shallow, so tags are used
|
||||
# for Flextalk. MSTTS has no vendor tags and keeps -s/-p.
|
||||
SET_ARGS=""
|
||||
TAG_PREFIX=""
|
||||
if [ -n "$SPEAKER_GUID" ]; then
|
||||
if [ -n "$SPEED" ]; then
|
||||
R=$(awk -v m="$SPEED" 'BEGIN{ if (m==1) exit; v=1/m; if (v<0.25) v=0.25; if (v>4.0) v=4.0; printf "%.3f", v }')
|
||||
[ -n "$R" ] && TAG_PREFIX="${TAG_PREFIX}\\!R${R} "
|
||||
# A neutral multiplier must not emit a tag: \!R1.00 means a 1.0x rate,
|
||||
# which would override the profile's own speaking rate.
|
||||
R=$(awk -v m="$SPEED" 'BEGIN{ if (m<=0) m=1; if (m==1) { exit } f=1/m; if (f<0.25) f=0.25; if (f>4) f=4; printf "%.2f", f }')
|
||||
[ -n "$R" ] && TAG_PREFIX="$TAG_PREFIX\\!R$R "
|
||||
fi
|
||||
if [ -n "$PITCH" ]; then
|
||||
P=$(awk -v st="$PITCH" 'BEGIN{ if (st==0) exit; v=exp(log(2)*st/12); if (v<0.5) v=0.5; if (v>2.0) v=2.0; printf "%.3f", v }')
|
||||
[ -n "$P" ] && TAG_PREFIX="${TAG_PREFIX}\\!%${P} "
|
||||
PCT=$(awk -v st="$PITCH" 'BEGIN{ if (st==0) { exit } f=exp(log(2)*st/12); if (f<0.5) f=0.5; if (f>2) f=2; printf "%.2f", f }')
|
||||
[ -n "$PCT" ] && TAG_PREFIX="$TAG_PREFIX\\!%$PCT "
|
||||
fi
|
||||
else
|
||||
if [ -n "$SPEED" ]; then
|
||||
@@ -203,14 +215,24 @@ if [ -n "$SPEAKER_GUID" ]; then
|
||||
P_LOWER=40
|
||||
P_EXPR=""
|
||||
|
||||
# Half-Life presets target Keith Bell only. Precedence: preset < VESKSLOP_TTS_PROFILE
|
||||
# < VESKSLOP_TTS_EXPRESSION.
|
||||
if [ "$ENGVOICE" = "Keith Bell" ]; then
|
||||
case "$PRESET" in
|
||||
vox) P_PITCH=3; P_RATE=17; P_PROM=22; P_HEAD=52; P_LOWER=40; P_VOLUME=70; P_EXPR=59 ;;
|
||||
hev) P_PITCH=15; P_RATE=24; P_PROM=22; P_HEAD=52; P_LOWER=40; P_VOLUME=70; P_EXPR=59 ;;
|
||||
esac
|
||||
fi
|
||||
# Half-Life presets for Keith Bell (the game's announcement voice).
|
||||
# "vox" is the approximated Valve VOX profile published by NetTTS
|
||||
# (scripts/winetricks/nettts_flextalk_vox_profile.reg); "hev" is a starting
|
||||
# point for the HEV suit voice, which has no published profile.
|
||||
case "$PRESET" in
|
||||
vox)
|
||||
if [ "$ENGVOICE" = "Keith Bell" ]; then
|
||||
P_PITCH=3; P_RATE=17; P_VOLUME=70
|
||||
P_PROM=22; P_HEAD=52; P_LOWER=40
|
||||
fi
|
||||
;;
|
||||
hev)
|
||||
if [ "$ENGVOICE" = "Keith Bell" ]; then
|
||||
P_PITCH=15; P_RATE=24; P_VOLUME=70
|
||||
P_PROM=22; P_HEAD=52; P_LOWER=40
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -n "$PROFILE" ]; then
|
||||
OLDIFS=$IFS
|
||||
@@ -250,21 +272,27 @@ if [ -n "$SPEAKER_GUID" ]; then
|
||||
esac
|
||||
done
|
||||
|
||||
IS_PRESET=0
|
||||
if [ "$ENGVOICE" = "Keith Bell" ]; then
|
||||
case "$PRESET" in
|
||||
vox|hev) IS_PRESET=1 ;;
|
||||
esac
|
||||
# NetTTS's VOX profile also carries Gender, Line Mode, the text-class
|
||||
# switches and the default-speaker pointer. Write the full set for presets,
|
||||
# exactly like its nettts_flextalk_vox_profile.reg, in both hives.
|
||||
FULL_PROFILE=0
|
||||
if [ "$PRESET" = "vox" ] || [ "$PRESET" = "hev" ]; then
|
||||
if [ "$ENGVOICE" = "Keith Bell" ]; then FULL_PROFILE=1; fi
|
||||
fi
|
||||
|
||||
REG_ROOT='Software\AT&T\Watson\2.0\FlexTalk\2.0'
|
||||
# Use printf, not echo: dash's echo interprets \2 in the key path as an
|
||||
# escape (STX), which corrupts the key and makes the import a silent no-op.
|
||||
# NetTTS parity: the audible profile goes to both hives. Presets also write the
|
||||
# informational keys from Valve's setup, and point Default Speaker at Keith Bell.
|
||||
{
|
||||
printf 'Windows Registry Editor Version 5.00\n\n'
|
||||
for HIVE in 'HKEY_LOCAL_MACHINE' 'HKEY_CURRENT_USER'; do
|
||||
printf '[%s\\Software\\AT&T\\Watson\\2.0\\FlexTalk\\2.0\\Speakers\\%s]\n' "$HIVE" "$SPEAKER_GUID"
|
||||
if [ "$FULL_PROFILE" = "1" ]; then
|
||||
printf '[HKEY_LOCAL_MACHINE\\%s]\n' "$REG_ROOT"
|
||||
printf '"Default Speaker"="%s"\n\n' "$SPEAKER_GUID"
|
||||
printf '[HKEY_CURRENT_USER\\%s]\n' "$REG_ROOT"
|
||||
printf '"Default Speaker"="%s"\n\n' "$SPEAKER_GUID"
|
||||
fi
|
||||
for hive in HKEY_LOCAL_MACHINE HKEY_CURRENT_USER; do
|
||||
printf '[%s\\%s\\Speakers\\%s]\n' "$hive" "$REG_ROOT" "$SPEAKER_GUID"
|
||||
printf '"Pitch"=dword:%08x\n' "$P_PITCH"
|
||||
printf '"Speaking Rate"=dword:%08x\n' "$P_RATE"
|
||||
printf '"Volume"=dword:%08x\n' "$P_VOLUME"
|
||||
@@ -272,19 +300,29 @@ if [ -n "$SPEAKER_GUID" ]; then
|
||||
printf '"Prominences"=dword:%08x\n' "$P_PROM"
|
||||
printf '"Head Size"=dword:%08x\n' "$P_HEAD"
|
||||
printf '"Lowering"=dword:%08x\n' "$P_LOWER"
|
||||
if [ "$IS_PRESET" = "1" ]; then
|
||||
if [ "$FULL_PROFILE" = "1" ]; then
|
||||
printf '"Abbreviation Expansion"=dword:00000001\n'
|
||||
printf '"Address Class"=dword:00000001\n'
|
||||
printf '"Age"=dword:0000001e\n'
|
||||
printf '"Alphabetic Hyphen"=dword:00000000\n'
|
||||
printf '"Case Significance"=dword:00000001\n'
|
||||
printf '"Date Class"=dword:00000001\n'
|
||||
printf '"Fraction Class"=dword:00000001\n'
|
||||
printf '"Gender"=dword:00000002\n'
|
||||
printf '"Line Mode"=dword:00000001\n'
|
||||
printf '"Math Mode"=dword:00000000\n'
|
||||
printf '"Measurements Class"=dword:00000001\n'
|
||||
printf '"Money Class"=dword:00000001\n'
|
||||
printf '"Numerical Hyphen"=dword:00000000\n'
|
||||
printf '"Ordinal Numbers Class"=dword:00000001\n'
|
||||
printf '"ProofRead Mode"=dword:00000000\n'
|
||||
printf '"Proper Names Class"=dword:00000001\n'
|
||||
printf '"Spell Mode"=dword:00000000\n'
|
||||
printf '"Telephone Numbers Class"=dword:00000001\n'
|
||||
printf '"Time Class"=dword:00000001\n'
|
||||
fi
|
||||
printf '\n'
|
||||
done
|
||||
|
||||
if [ "$IS_PRESET" = "1" ]; then
|
||||
for HIVE in 'HKEY_LOCAL_MACHINE' 'HKEY_CURRENT_USER'; do
|
||||
printf '[%s\\Software\\AT&T\\Watson\\2.0\\FlexTalk\\2.0\\Speakers]\n' "$HIVE"
|
||||
printf '"Default Speaker"="%s"\n\n' "$SPEAKER_GUID"
|
||||
done
|
||||
fi
|
||||
} > "$TMP/profile.reg"
|
||||
|
||||
# Guard against silent reg-import failures (a malformed key would corrupt
|
||||
@@ -294,21 +332,34 @@ if [ -n "$SPEAKER_GUID" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! command -v "$MICROSLOP_WINE" >/dev/null 2>&1; then
|
||||
echo "wine is required to set the Flextalk profile" >&2
|
||||
exit 1
|
||||
# Skip the wine round-trip when this voice's profile was already applied.
|
||||
# The cache lives inside the prefix, so recreating the prefix invalidates
|
||||
# it automatically.
|
||||
PROFILE_CACHE="$WINEPREFIX/.microslopsam-profile$SPEAKER_GUID.reg"
|
||||
if [ -f "$PROFILE_CACHE" ] && cmp -s "$TMP/profile.reg" "$PROFILE_CACHE"; then
|
||||
PROFILE_APPLIED=1
|
||||
else
|
||||
PROFILE_APPLIED=0
|
||||
fi
|
||||
if ! "$MICROSLOP_WINE" reg import "$TMP/profile.reg" >/dev/null 2>&1; then
|
||||
echo "could not write the Flextalk profile" >&2
|
||||
exit 1
|
||||
|
||||
if [ "$PROFILE_APPLIED" != "1" ]; then
|
||||
if ! command -v "$MICROSLOP_WINE" >/dev/null 2>&1; then
|
||||
echo "wine is required to set the Flextalk profile" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! "$MICROSLOP_WINE" reg import "$TMP/profile.reg" >/dev/null 2>&1; then
|
||||
echo "could not write the Flextalk profile" >&2
|
||||
exit 1
|
||||
fi
|
||||
cp -f "$TMP/profile.reg" "$PROFILE_CACHE" 2>/dev/null || true
|
||||
fi
|
||||
fi
|
||||
|
||||
# SAPI4 is ANSI/CP1252. VOX mode (Flextalk only) first transforms the text into
|
||||
# vendor tags (\!wH1/\!wH0, \!br, \!sfNN) with setup/vox_parser.py; the parser
|
||||
# works on UTF-8, so it runs before the CP1252 transliteration. Word mode builds
|
||||
# its own cadence from single-word instances, so the parser is skipped there: the
|
||||
# VOX tags cannot survive a word split.
|
||||
# its own cadence from single-word instances, so the parser is skipped there: VOX
|
||||
# tags cannot survive a word split.
|
||||
TEXT_SRC="$TEXT_IN"
|
||||
if [ "$VOX" = "1" ] && [ -n "$SPEAKER_GUID" ] && [ "$WORDS" != "1" ]; then
|
||||
if command -v "$MICROSLOP_PYTHON" >/dev/null 2>&1 && [ -f "$MICROSLOP_ROOT/setup/vox_parser.py" ]; then
|
||||
@@ -370,7 +421,7 @@ if [ "$WORDS" = "1" ] && [ -n "$SPEAKER_GUID" ]; then
|
||||
INDEX=0
|
||||
for word in $(cat "$TXT"); do
|
||||
INDEX=$((INDEX + 1))
|
||||
try_run_host "$TMP/w$INDEX.wav" "${TAG_PREFIX}${word}"
|
||||
try_run_host "$TMP/w$INDEX.wav" "$TAG_PREFIX$word"
|
||||
echo "file '$TMP/w$INDEX.wav'" >> "$TMP/list.txt"
|
||||
|
||||
if [ "$GAP" -gt 0 ]; then
|
||||
@@ -388,7 +439,7 @@ if [ "$WORDS" = "1" ] && [ -n "$SPEAKER_GUID" ]; then
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
try_run_host "$RAW" "${TAG_PREFIX}$(cat "$TXT")"
|
||||
try_run_host "$RAW" "$TAG_PREFIX$(cat "$TXT")"
|
||||
fi
|
||||
[ -s "$RAW" ] || { echo "engine produced no audio" >&2; exit 1; }
|
||||
|
||||
@@ -428,7 +479,31 @@ else
|
||||
fi
|
||||
|
||||
TMPOUT="$TMP/out.wav"
|
||||
if ! "$MICROSLOP_FFMPEG" -hide_banner -nostats -y -i "$RAW" -af "$PRE,volume=${GAIN}dB" \
|
||||
# Leading hum: a quiet low tone in the pre-speech padding, to prime Discord's
|
||||
# audio pipeline so the first syllable is not gated. Level/frequency/duration
|
||||
# are configurable; 0 ms disables it.
|
||||
case "$HUM_MS" in *[!0-9]*|"") HUM_MS=80 ;; esac
|
||||
[ "$HUM_MS" -gt 2000 ] && HUM_MS=2000
|
||||
case "$HUM_HZ" in *[!0-9.]*|"") HUM_HZ=75 ;; esac
|
||||
case "$HUM_DB" in *[!0-9.-]*|""|"."|"-") HUM_DB=-48 ;; esac
|
||||
if [ "$HUM_MS" -gt 0 ]; then
|
||||
HUM_S=$(awk -v ms="$HUM_MS" 'BEGIN{printf "%.3f", ms/1000}')
|
||||
HUM_HZ=$(awk -v v="$HUM_HZ" 'BEGIN{ if (v<30) v=30; if (v>200) v=200; printf "%.1f", v }')
|
||||
HUM_DB=$(awk -v v="$HUM_DB" 'BEGIN{ if (v>-6) v=-6; if (v<-80) v=-80; printf "%.1f", v }')
|
||||
HUM_AMP=$(awk -v db="$HUM_DB" 'BEGIN{printf "%.6f", 10^(db/20)}')
|
||||
HUM_FADE=$(awk -v s="$HUM_S" 'BEGIN{ f=s/4; if (f>0.02) f=0.02; if (f<0.005) f=0.005; printf "%.3f", f }')
|
||||
HUM_FADE_OUT=$(awk -v s="$HUM_S" -v f="$HUM_FADE" 'BEGIN{printf "%.3f", s-f}')
|
||||
# The hum is mixed on its own chain and deliberately bypasses $PRE (highpass,
|
||||
# trim, fades): VESKSLOP_TTS_HIGHPASS must never remove it.
|
||||
if ! "$MICROSLOP_FFMPEG" -hide_banner -nostats -y \
|
||||
-f lavfi -i "aevalsrc=exprs='$HUM_AMP*sin(2*PI*$HUM_HZ*t)':s=48000:d=$HUM_S" \
|
||||
-i "$RAW" \
|
||||
-filter_complex "[0:a]afade=t=in:st=0:d=$HUM_FADE,afade=t=out:st=$HUM_FADE_OUT:d=$HUM_FADE,aformat=sample_fmts=s16:channel_layouts=mono:sample_rates=48000[h];[1:a]$PRE,volume=${GAIN}dB,aresample=48000,aformat=sample_fmts=s16:channel_layouts=mono[a];[h][a]concat=n=2:v=0:a=1[out]" \
|
||||
-map "[out]" -c:a pcm_s16le "$TMPOUT" >/dev/null 2>"$TMP/ff"; then
|
||||
head -c 400 "$TMP/ff" >&2
|
||||
exit 1
|
||||
fi
|
||||
elif ! "$MICROSLOP_FFMPEG" -hide_banner -nostats -y -i "$RAW" -af "$PRE,volume=${GAIN}dB" \
|
||||
-ar 48000 -ac 1 -c:a pcm_s16le "$TMPOUT" >/dev/null 2>"$TMP/ff"; then
|
||||
head -c 400 "$TMP/ff" >&2
|
||||
exit 1
|
||||
|
||||
Vendored
+39
@@ -0,0 +1,39 @@
|
||||
# third_party
|
||||
|
||||
Vendored dependencies. Everything the tool needs to run is kept here so the project
|
||||
does not depend on external downloads that can disappear. Only toolchain packages
|
||||
(Wine, Winelib, ffmpeg, python3, unshield, mingw) are installed by the system.
|
||||
|
||||
## speech.h
|
||||
|
||||
`speech.h` — Microsoft Speech API 4.0 SDK header. Used by `host/sapi4host.c`. Copied
|
||||
from the public SAPI4 header published in the community gist referenced by the asset
|
||||
repository (see `docs/NOTES.md`).
|
||||
|
||||
## sapi4/
|
||||
|
||||
The SAPI4 runtime and the MSTTS (Sam/Mary/Mike) voices, extracted from the original
|
||||
Microsoft installers. Private archival copies; do not redistribute.
|
||||
|
||||
- `spchapi/SPEECH.DLL`, `spchapi/SPCHAPI.INF` — SAPI4 runtime and its registration INF.
|
||||
- `msttsl/msttssyn.dll`, `msttsl/*.vce`, `msttsl/*.cfg`, `msttsl/mstts.inf` — MSTTS
|
||||
engine, voice data and registration.
|
||||
- `installers/spchapi.exe`, `installers/msttsl.exe` — original installers, kept for
|
||||
completeness (the extracted files above are what `setup-prefix.sh` uses).
|
||||
|
||||
## flextalk/
|
||||
|
||||
- `data1.cab` — InstallShield cabinet with the AT&T Flextalk 2.1 engine and the
|
||||
"Keith Bell" / "Kerry Watson" voices (the archive.org package).
|
||||
`setup/install.sh` extracts it with `unshield -O` into `flextalk/extracted/`
|
||||
(gitignored).
|
||||
|
||||
## nettts-reference/
|
||||
|
||||
- `vox_parser.cpp`, `vox_parser.hpp` — the VOX prosody encoder from
|
||||
[h4rm0n1c/NetTTS](https://github.com/h4rm0n1c/NetTTS), kept as the reference for
|
||||
validating `setup/vox_parser.py`. Upstream declares no license; these files are
|
||||
reference-only and are not linked into anything we ship.
|
||||
|
||||
- `nettts_flextalk_vox_profile.reg` — NetTTS's approximated Valve VOX speaker profile
|
||||
for Keith Bell (the source of the `vox`/`hev` presets in `setup/veskslop-tts.sh`).
|
||||
BIN
Binary file not shown.
@@ -0,0 +1,127 @@
|
||||
Windows Registry Editor Version 5.00
|
||||
|
||||
[HKEY_CURRENT_USER\Software\AT&T\Watson\2.0\FlexTalk\2.0]
|
||||
"Default Speaker"="{11260610-C84A-11CE-AEC4-0000C0E9CB87}"
|
||||
|
||||
[HKEY_CURRENT_USER\Software\AT&T\Watson\2.0\FlexTalk\2.0\Speakers\{000031CB-3699-551F-AED0-6B4893382D57}]
|
||||
"Abbreviation Expansion"=dword:00000001
|
||||
"Address Class"=dword:00000001
|
||||
"Age"=dword:0000001e
|
||||
"Alphabetic Hyphen"=dword:00000000
|
||||
"Case Significance"=dword:00000001
|
||||
"Date Class"=dword:00000001
|
||||
"Expression"=dword:00000064
|
||||
"Fraction Class"=dword:00000001
|
||||
"Gender"=dword:00000001
|
||||
"Head Size"=dword:0000002d
|
||||
"Line Mode"=dword:00000000
|
||||
"Lowering"=dword:00000028
|
||||
"Math Mode"=dword:00000000
|
||||
"Measurements Class"=dword:00000001
|
||||
"Mode Name"="Kerry Watson"
|
||||
"Money Class"=dword:00000001
|
||||
"Numerical Hyphen"=dword:00000001
|
||||
"Ordinal Numbers Class"=dword:00000001
|
||||
"Pitch"=dword:00000041
|
||||
"Prominences"=dword:00000011
|
||||
"ProofRead Mode"=dword:00000000
|
||||
"Proper Names Class"=dword:00000001
|
||||
"Speaker Name"="Kerry Watson"
|
||||
"Speaking Rate"=dword:00000020
|
||||
"Spell Mode"=dword:00000000
|
||||
"Telephone Numbers Class"=dword:00000001
|
||||
"Time Class"=dword:00000001
|
||||
"Volume"=dword:00000064
|
||||
|
||||
[HKEY_CURRENT_USER\Software\AT&T\Watson\2.0\FlexTalk\2.0\Speakers\{11260610-C84A-11CE-AEC4-0000C0E9CB87}]
|
||||
"Abbreviation Expansion"=dword:00000001
|
||||
"Address Class"=dword:00000001
|
||||
"Age"=dword:0000001e
|
||||
"Alphabetic Hyphen"=dword:00000000
|
||||
"Case Significance"=dword:00000001
|
||||
"Date Class"=dword:00000001
|
||||
"Expression"=dword:0000003b
|
||||
"Fraction Class"=dword:00000001
|
||||
"Gender"=dword:00000002
|
||||
"Head Size"=dword:00000034
|
||||
"Line Mode"=dword:00000001
|
||||
"Lowering"=dword:00000028
|
||||
"Math Mode"=dword:00000000
|
||||
"Measurements Class"=dword:00000001
|
||||
"Mode Name"="Keith Bell"
|
||||
"Money Class"=dword:00000001
|
||||
"Numerical Hyphen"=dword:00000000
|
||||
"Ordinal Numbers Class"=dword:00000001
|
||||
"Pitch"=dword:00000003
|
||||
"Prominences"=dword:00000016
|
||||
"ProofRead Mode"=dword:00000000
|
||||
"Proper Names Class"=dword:00000001
|
||||
"Speaker Name"="Keith Bell"
|
||||
"Speaking Rate"=dword:00000011
|
||||
"Spell Mode"=dword:00000000
|
||||
"Telephone Numbers Class"=dword:00000001
|
||||
"Time Class"=dword:00000001
|
||||
"Volume"=dword:00000046
|
||||
|
||||
[HKEY_LOCAL_MACHINE\Software\AT&T\Watson\2.0\FlexTalk\2.0]
|
||||
"Default Speaker"="{11260610-C84A-11CE-AEC4-0000C0E9CB87}"
|
||||
|
||||
[HKEY_LOCAL_MACHINE\Software\AT&T\Watson\2.0\FlexTalk\2.0\Speakers\{000031CB-3699-551F-AED0-6B4893382D57}]
|
||||
"Abbreviation Expansion"=dword:00000001
|
||||
"Address Class"=dword:00000001
|
||||
"Age"=dword:0000001e
|
||||
"Alphabetic Hyphen"=dword:00000000
|
||||
"Case Significance"=dword:00000001
|
||||
"Date Class"=dword:00000001
|
||||
"Expression"=dword:00000064
|
||||
"Fraction Class"=dword:00000001
|
||||
"Gender"=dword:00000001
|
||||
"Head Size"=dword:0000002d
|
||||
"Line Mode"=dword:00000000
|
||||
"Lowering"=dword:00000028
|
||||
"Math Mode"=dword:00000000
|
||||
"Measurements Class"=dword:00000001
|
||||
"Mode Name"="Kerry Watson"
|
||||
"Money Class"=dword:00000001
|
||||
"Numerical Hyphen"=dword:00000001
|
||||
"Ordinal Numbers Class"=dword:00000001
|
||||
"Pitch"=dword:00000041
|
||||
"Prominences"=dword:00000011
|
||||
"ProofRead Mode"=dword:00000000
|
||||
"Proper Names Class"=dword:00000001
|
||||
"Speaker Name"="Kerry Watson"
|
||||
"Speaking Rate"=dword:00000020
|
||||
"Spell Mode"=dword:00000000
|
||||
"Telephone Numbers Class"=dword:00000001
|
||||
"Time Class"=dword:00000001
|
||||
"Volume"=dword:00000064
|
||||
|
||||
[HKEY_LOCAL_MACHINE\Software\AT&T\Watson\2.0\FlexTalk\2.0\Speakers\{11260610-C84A-11CE-AEC4-0000C0E9CB87}]
|
||||
"Abbreviation Expansion"=dword:00000001
|
||||
"Address Class"=dword:00000001
|
||||
"Age"=dword:0000001e
|
||||
"Alphabetic Hyphen"=dword:00000000
|
||||
"Case Significance"=dword:00000001
|
||||
"Date Class"=dword:00000001
|
||||
"Expression"=dword:0000003b
|
||||
"Fraction Class"=dword:00000001
|
||||
"Gender"=dword:00000002
|
||||
"Head Size"=dword:00000034
|
||||
"Line Mode"=dword:00000001
|
||||
"Lowering"=dword:00000028
|
||||
"Math Mode"=dword:00000000
|
||||
"Measurements Class"=dword:00000001
|
||||
"Mode Name"="Keith Bell"
|
||||
"Money Class"=dword:00000001
|
||||
"Numerical Hyphen"=dword:00000000
|
||||
"Ordinal Numbers Class"=dword:00000001
|
||||
"Pitch"=dword:00000003
|
||||
"Prominences"=dword:00000016
|
||||
"ProofRead Mode"=dword:00000000
|
||||
"Proper Names Class"=dword:00000001
|
||||
"Speaker Name"="Keith Bell"
|
||||
"Speaking Rate"=dword:00000011
|
||||
"Spell Mode"=dword:00000000
|
||||
"Telephone Numbers Class"=dword:00000001
|
||||
"Time Class"=dword:00000001
|
||||
"Volume"=dword:00000046
|
||||
@@ -0,0 +1,744 @@
|
||||
#include "vox_parser.hpp"
|
||||
#include <vector>
|
||||
#include <regex>
|
||||
#include <cwctype>
|
||||
#include <sstream>
|
||||
#include <algorithm>
|
||||
|
||||
static inline std::wstring trim(const std::wstring& s){
|
||||
size_t a=0,b=s.size();
|
||||
while(a<b && iswspace(s[a])) ++a;
|
||||
while(b>a && iswspace(s[b-1])) --b;
|
||||
return s.substr(a,b-a);
|
||||
}
|
||||
static inline std::wstring to_lower(std::wstring s){
|
||||
for(auto& c: s) c=(wchar_t)towlower(c);
|
||||
return s;
|
||||
}
|
||||
static inline bool is_all_digits(const std::wstring& t){
|
||||
if(t.empty()) return false;
|
||||
for(wchar_t c: t) if(!iswdigit(c)) return false;
|
||||
return true;
|
||||
}
|
||||
static inline bool is_titlecase_word(const std::wstring& t){
|
||||
if(t.empty()) return false;
|
||||
if(!iswalpha(t[0]) || !iswupper(t[0])) return false;
|
||||
return true;
|
||||
}
|
||||
static inline std::wstring strip_trailing_punct(std::wstring t){
|
||||
while(!t.empty()){
|
||||
wchar_t c = t.back();
|
||||
if(c==L','||c==L'.'||c==L';'||c==L':'||c==L'!'||c==L'?'||c==L'"'||c==L'\'') t.pop_back();
|
||||
else break;
|
||||
}
|
||||
return t;
|
||||
}
|
||||
static inline bool ends_with_br(const std::wstring& s){
|
||||
size_t n = s.size();
|
||||
return n >= 5 && s.compare(n-5, 5, L" \\!br") == 0;
|
||||
}
|
||||
|
||||
// Sentence splitter (keeps terminator punctuation attached)
|
||||
static std::vector<std::wstring> split_sentences(const std::wstring& in){
|
||||
std::vector<std::wstring> out;
|
||||
std::wstring cur;
|
||||
for(size_t i=0;i<in.size();++i){
|
||||
wchar_t c = in[i];
|
||||
cur.push_back(c);
|
||||
if(c==L'.' || c==L'!' || c==L'?'){
|
||||
size_t j=i+1;
|
||||
while(j<in.size() && (in[j]==L'"' || in[j]==L'\'')) { cur.push_back(in[j]); ++j; }
|
||||
out.push_back(trim(cur));
|
||||
cur.clear();
|
||||
i = j-1;
|
||||
}
|
||||
}
|
||||
std::wstring tail = trim(cur);
|
||||
if(!tail.empty()) out.push_back(tail);
|
||||
return out;
|
||||
}
|
||||
|
||||
// Lead-in break after short opening phrases
|
||||
static void apply_leadin_break(std::wstring& s){
|
||||
static const std::wregex r(LR"(^\s*((?:Now|Please|A\s+reminder|On\s+behalf\s+of|Good\s+(?:morning|evening)|This\s+(?:automated\s+train|tram)))\b)",
|
||||
std::regex_constants::icase);
|
||||
std::wsmatch m;
|
||||
if(std::regex_search(s, m, r)){
|
||||
std::wstring head = trim(m.str(0));
|
||||
std::wstring rest = trim(s.substr(m.length()));
|
||||
s = head + L" \\!br " + rest;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// “the” -> “thee”
|
||||
// - Backward rule: after preps (to/for/of/in/on/at) or "on behalf of"
|
||||
// - NEW Forward rule: before TitleCase, single letter (X or X:), or a number
|
||||
// Robust across \!br tags; preserves trailing punctuation.
|
||||
static void apply_thee_rule(std::wstring& s){
|
||||
// tokenize by whitespace; keep tags as tokens
|
||||
std::wstringstream ss(s);
|
||||
std::vector<std::wstring> tok; std::wstring t;
|
||||
while (ss >> t) tok.push_back(t);
|
||||
if (tok.empty()) return;
|
||||
|
||||
auto is_tag = [](const std::wstring& w){
|
||||
return (w==L"\\!br" || w==L"\\!wH1" || w==L"\\!wH0");
|
||||
};
|
||||
auto to_lower_copy = [](std::wstring v){ for (auto& c: v) c=(wchar_t)towlower(c); return v; };
|
||||
|
||||
// split trailing punctuation; return (core, punctTail)
|
||||
auto split_tail = [](const std::wstring& x)->std::pair<std::wstring,std::wstring>{
|
||||
std::wstring core=x, tail;
|
||||
while (!core.empty()){
|
||||
wchar_t c = core.back();
|
||||
if (c==L','||c==L'.'||c==L';'||c==L':'||c==L'!'||c==L'?'||c==L'"'||c==L'\''){
|
||||
tail.insert(tail.begin(), c);
|
||||
core.pop_back();
|
||||
} else break;
|
||||
}
|
||||
return {core, tail};
|
||||
};
|
||||
|
||||
auto clean_lower = [&](const std::wstring& x)->std::wstring{
|
||||
auto p = split_tail(x);
|
||||
return to_lower_copy(p.first);
|
||||
};
|
||||
auto bare = [&](const std::wstring& x)->std::wstring{
|
||||
return split_tail(x).first;
|
||||
};
|
||||
|
||||
auto prev_word = [&](int i, int nth)->std::wstring{
|
||||
for (int k=i-1; k>=0; --k){
|
||||
if (is_tag(tok[k])) continue;
|
||||
if (--nth==0) return clean_lower(tok[k]);
|
||||
}
|
||||
return L"";
|
||||
};
|
||||
auto next_word = [&](int i, int nth)->std::wstring{
|
||||
for (int k=i+1; k<(int)tok.size(); ++k){
|
||||
if (is_tag(tok[k])) continue;
|
||||
if (--nth==0) return tok[k]; // not lowered; we want case info
|
||||
}
|
||||
return L"";
|
||||
};
|
||||
|
||||
auto is_prep = [&](const std::wstring& w)->bool{
|
||||
std::wstring tl = to_lower_copy(w);
|
||||
return (tl==L"to"||tl==L"for"||tl==L"of"||tl==L"in"||tl==L"on"||tl==L"at");
|
||||
};
|
||||
auto is_title = [&](const std::wstring& w)->bool{
|
||||
auto b = bare(w);
|
||||
return !b.empty() && iswalpha(b[0]) && iswupper(b[0]);
|
||||
};
|
||||
auto is_single_letter = [&](const std::wstring& w)->bool{
|
||||
auto b = bare(w);
|
||||
if (b.size()==1 && iswalpha(b[0]) && iswupper(b[0])) return true;
|
||||
if (b.size()==2 && iswalpha(b[0]) && iswupper(b[0]) && b[1]==L':') return true;
|
||||
return false;
|
||||
};
|
||||
auto is_number = [&](const std::wstring& w)->bool{
|
||||
auto b = bare(w);
|
||||
if (b.empty()) return false;
|
||||
for (wchar_t c: b) if (!iswdigit(c)) return false;
|
||||
return true;
|
||||
};
|
||||
|
||||
for (int i=0; i<(int)tok.size(); ++i){
|
||||
if (is_tag(tok[i])) continue;
|
||||
|
||||
auto [core, tail] = split_tail(tok[i]);
|
||||
std::wstring cl = to_lower_copy(core);
|
||||
if (cl != L"the") { tok[i] = core + tail; continue; }
|
||||
|
||||
bool make_thee = false;
|
||||
|
||||
// Backward (prepositions, incl. "on behalf of")
|
||||
std::wstring p1 = prev_word(i, 1);
|
||||
if (!p1.empty()){
|
||||
if (is_prep(p1)) make_thee = true;
|
||||
else if (to_lower_copy(p1) == L"of"){
|
||||
std::wstring p2 = prev_word(i, 2);
|
||||
std::wstring p3 = prev_word(i, 3);
|
||||
if (to_lower_copy(p2)==L"behalf" && to_lower_copy(p3)==L"on") make_thee = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Forward (before proper names / letters / numbers)
|
||||
if (!make_thee){
|
||||
std::wstring n1 = next_word(i, 1);
|
||||
if (!n1.empty()){
|
||||
if (is_title(n1) || is_single_letter(n1) || is_number(n1)){
|
||||
make_thee = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tok[i] = (make_thee ? L"thee" : core) + tail;
|
||||
}
|
||||
|
||||
// rebuild
|
||||
std::wstring out;
|
||||
for (size_t i=0;i<tok.size();++i){
|
||||
if (!out.empty()) out.push_back(L' ');
|
||||
out += tok[i];
|
||||
}
|
||||
s.swap(out);
|
||||
}
|
||||
|
||||
|
||||
// Times, degrees, and 3-digit decomposition
|
||||
static void apply_time_numbers_degrees(std::wstring& s){
|
||||
// 12h time like 8:47 AM / A.M. / PM … (eat any trailing dot after meridiem)
|
||||
{
|
||||
std::wregex t12(LR"(\b(\d{1,2})[:.](\d{2})\s*((?:A\.?M\.?)|(?:P\.?M\.?))(?:\.)?\b)", std::regex_constants::icase);
|
||||
std::wstring out; out.reserve(s.size()+32);
|
||||
std::wsregex_iterator it(s.begin(), s.end(), t12), end;
|
||||
size_t last = 0;
|
||||
for(; it!=end; ++it){
|
||||
auto m = *it;
|
||||
out.append(s, last, m.position()-last);
|
||||
std::wstring hh = m.str(1);
|
||||
std::wstring mm = m.str(2);
|
||||
std::wstring ap = to_lower(m.str(3));
|
||||
std::wstring ap1 = (ap[0]==L'p') ? L"P:" : L"Ay:";
|
||||
out += hh + L" \\!br " + mm + L" \\!br " + ap1 + L" \\!br M:";
|
||||
last = m.position() + m.length();
|
||||
}
|
||||
out.append(s, last, std::wstring::npos);
|
||||
s.swap(out);
|
||||
}
|
||||
// “The time is 8 …” -> break before the hour
|
||||
s = std::regex_replace(s,
|
||||
std::wregex(LR"((\b[Tt]he\s+time\s+is)\s+(\d+))"),
|
||||
L"$1 \\!br $2");
|
||||
|
||||
// 24h “HH00 hours” -> “HH \!br hundred \!br hours”
|
||||
s = std::regex_replace(s,
|
||||
std::wregex(LR"(\b(\d{2})00\s+hours\b)", std::regex_constants::icase),
|
||||
L"$1 \\!br hundred \\!br hours");
|
||||
|
||||
// Three-digit non-round numbers: 105 -> “100 \!br and \!br 5” (strip leading zero in remainder)
|
||||
{
|
||||
std::wregex n3(LR"(\b([1-9])(\d)(\d)\b)");
|
||||
std::wstring out; out.reserve(s.size()+32);
|
||||
std::wsregex_iterator it(s.begin(), s.end(), n3), end;
|
||||
size_t last = 0;
|
||||
for(; it!=end; ++it){
|
||||
auto m = *it;
|
||||
std::wstring yz = m.str(2)+m.str(3);
|
||||
if (yz == L"00") continue; // round, leave as-is
|
||||
size_t nz = 0; while (nz < yz.size() && yz[nz]==L'0') ++nz;
|
||||
std::wstring rem = yz.substr(nz);
|
||||
out.append(s, last, m.position()-last);
|
||||
out += m.str(1)+L"00 \\!br and \\!br " + (rem.empty()? yz : rem);
|
||||
last = m.position() + m.length();
|
||||
}
|
||||
out.append(s, last, std::wstring::npos);
|
||||
s.swap(out);
|
||||
}
|
||||
|
||||
// Degrees: “93 degrees” -> “93 \!br degrees \!br”
|
||||
s = std::regex_replace(s,
|
||||
std::wregex(LR"(\b(\d+)\s+degrees\b)", std::regex_constants::icase),
|
||||
L"$1 \\!br degrees \\!br");
|
||||
|
||||
// Fix any lingering "M:." -> "M:" (meridiem shouldn’t carry a period)
|
||||
s = std::regex_replace(s, std::wregex(LR"(M:\s*\.)"), L"M:");
|
||||
}
|
||||
|
||||
|
||||
// Syllable heuristic
|
||||
static int syllables(const std::wstring& w){
|
||||
if(w.empty()) return 0;
|
||||
std::wstring s; s.reserve(w.size());
|
||||
for(wchar_t c: w) s.push_back((wchar_t)towlower(c));
|
||||
auto isv=[&](wchar_t c){ return c==L'a'||c==L'e'||c==L'i'||c==L'o'||c==L'u'||c==L'y'; };
|
||||
int count=0; bool in=false;
|
||||
for(wchar_t c: s){ if(isv(c)){ if(!in){ ++count; in=true; } } else in=false; }
|
||||
if(count>1 && s.size()>1 && s.back()==L'e' && !(s.size()>2 && s[s.size()-2]==L'l')) --count; // silent 'e' (not "...le")
|
||||
if(s.size()>2 && s.back()==L'e' && s[s.size()-2]==L'l') ++count; // “…le”
|
||||
return std::max(1,count);
|
||||
}
|
||||
|
||||
enum Wt { LIGHT, MEDIUM, HEAVY };
|
||||
|
||||
static bool is_stop(const std::wstring& tl){
|
||||
static const wchar_t* sw[] = {
|
||||
L"the",L"thee",L"a",L"an",L"to",L"for",L"of",L"in",L"on",L"at",L"by",L"with",L"from",
|
||||
L"as",L"is",L"are",L"was",L"were",L"this",L"that"
|
||||
};
|
||||
for(auto* w: sw) if(tl==w) return true;
|
||||
return false;
|
||||
}
|
||||
static bool is_lightverb(const std::wstring& tl){
|
||||
static const wchar_t* vw[] = {
|
||||
L"welcome",L"wait",L"stand",L"provide",L"provided",L"return",L"remain",L"maintain",
|
||||
L"maintained",L"verify",L"contact",L"board",L"arriving",L"inbound",L"bound",
|
||||
L"commence",L"commences"
|
||||
};
|
||||
for(auto* w: vw) if(tl==w) return true;
|
||||
return false;
|
||||
}
|
||||
static bool is_unit(const std::wstring& tl){
|
||||
static const wchar_t* uw[] = { L"degrees", L"hours", L"percent", L"%" };
|
||||
for(auto* w: uw) if(tl==w) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
static Wt weight(const std::wstring& tok){
|
||||
if(tok.empty()) return LIGHT;
|
||||
std::wstring pfree = strip_trailing_punct(tok);
|
||||
std::wstring tl = to_lower(pfree);
|
||||
if(is_stop(tl) || is_lightverb(tl)) return LIGHT;
|
||||
if(is_all_digits(pfree)) return HEAVY;
|
||||
if(pfree.find(L'-')!=std::wstring::npos) return HEAVY;
|
||||
if(is_titlecase_word(pfree)) return HEAVY;
|
||||
if(is_unit(tl)) return HEAVY;
|
||||
int syl = syllables(pfree);
|
||||
if(syl>=3 || pfree.size()>=8) return HEAVY; // long or many-syllable content words
|
||||
return MEDIUM;
|
||||
}
|
||||
|
||||
static bool is_and(const std::wstring& t){ return to_lower(strip_trailing_punct(t))==L"and"; }
|
||||
static bool starts_with_punct(const std::wstring& t){
|
||||
if(t.empty()) return false;
|
||||
wchar_t c = t.front();
|
||||
return (c==L'.'||c==L','||c==L';'||c==L':'||c==L'!'||c==L'?'||c==L')');
|
||||
}
|
||||
static bool is_open_punct(const std::wstring& t){
|
||||
if(t.empty()) return false;
|
||||
wchar_t c=t.front(); return (c==L'('||c==L'"'||c==L'\'');
|
||||
}
|
||||
|
||||
// Tokenize on whitespace (keep punctuation with token)
|
||||
static std::vector<std::wstring> tokenize_ws(const std::wstring& s){
|
||||
std::wstringstream ss(s);
|
||||
std::vector<std::wstring> v; std::wstring t;
|
||||
while(ss >> t) v.push_back(t);
|
||||
return v;
|
||||
}
|
||||
|
||||
// Insert TitleCase run breaks and Area/Level/Sector blocks
|
||||
static void emit_titlecase_run(const std::vector<std::wstring>& v, size_t i, size_t j, std::wstring& out){
|
||||
// place a break before the run
|
||||
if(!out.empty() && !ends_with_br(out)) out += L" \\!br";
|
||||
for(size_t k=i;k<j;++k){
|
||||
out += L" " + v[k] + L" \\!br";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Core beat builder (single pass), generic prosody.
|
||||
// Keeps: TitleCase runs, Area/Level/Sector, "and" join, soft head span,
|
||||
// comma/semicolon boundary, symmetric linker isolation [BR] linker [BR],
|
||||
// heavy-gate, 3-beat limiter.
|
||||
// NEW: Split hyphenated/en-dash/em-dash compounds into parts with breaks.
|
||||
// Standalone -, –, — act as hard breaks (not spoken).
|
||||
static std::wstring build_beats(const std::wstring& sentence){
|
||||
auto v = tokenize_ws(sentence);
|
||||
if(v.empty()) return sentence;
|
||||
|
||||
std::wstring out;
|
||||
bool since_break_all_light = true;
|
||||
Wt prev_w = LIGHT;
|
||||
int content_run = 0; // consecutive MEDIUM/HEAVY since last break
|
||||
|
||||
auto reset_after_break = [&](){
|
||||
since_break_all_light = true;
|
||||
content_run = 0;
|
||||
prev_w = LIGHT;
|
||||
};
|
||||
|
||||
auto bare = [](const std::wstring& w){ return strip_trailing_punct(w); };
|
||||
auto is_area_head = [&](const std::wstring& w){ return w==L"Area"||w==L"Level"||w==L"Sector"; };
|
||||
auto is_tag = [&](const std::wstring& w){ return (w==L"\\!br" || w==L"\\!wH1" || w==L"\\!wH0"); };
|
||||
auto lower = [&](std::wstring s){ return to_lower(std::move(s)); };
|
||||
|
||||
auto is_single_letter = [&](const std::wstring& w)->bool{
|
||||
std::wstring b = bare(w);
|
||||
if (b.size()==1 && iswalpha(b[0]) && iswupper(b[0])) return true; // C
|
||||
if (b.size()==2 && iswalpha(b[0]) && iswupper(b[0]) && b[1]==L':') return true; // C:
|
||||
return false;
|
||||
};
|
||||
|
||||
// split trailing punctuation; return (core, punctTail)
|
||||
auto split_tail = [](const std::wstring& x)->std::pair<std::wstring,std::wstring>{
|
||||
std::wstring core=x, tail;
|
||||
while (!core.empty()){
|
||||
wchar_t c = core.back();
|
||||
if (c==L','||c==L'.'||c==L';'||c==L':'||c==L'!'||c==L'?'||c==L'"'||c==L'\''){
|
||||
tail.insert(tail.begin(), c);
|
||||
core.pop_back();
|
||||
} else break;
|
||||
}
|
||||
return {core, tail};
|
||||
};
|
||||
|
||||
// emit hyphen/dash-split parts with breaks between them; keep tail on last part
|
||||
auto emit_dash_split = [&](const std::wstring& tok)->bool{
|
||||
auto [core, tail] = split_tail(tok);
|
||||
// find internal separators
|
||||
std::vector<size_t> cuts;
|
||||
for(size_t p=0;p<core.size();++p){
|
||||
wchar_t c = core[p];
|
||||
if (c==L'-' || c==0x2013 /*–*/ || c==0x2014 /*—*/){
|
||||
// only split if letters on both sides (avoid leading/trailing)
|
||||
if (p>0 && p+1<core.size() && iswalpha(core[p-1]) && iswalpha(core[p+1]))
|
||||
cuts.push_back(p);
|
||||
else
|
||||
return false; // treat as punctuation case elsewhere
|
||||
}
|
||||
}
|
||||
if (cuts.empty()) return false;
|
||||
|
||||
size_t start = 0;
|
||||
for(size_t idx=0; idx<=cuts.size(); ++idx){
|
||||
size_t end = (idx<cuts.size() ? cuts[idx] : core.size());
|
||||
std::wstring part = core.substr(start, end-start);
|
||||
// spacing before part
|
||||
if(!out.empty() && !ends_with_br(out) && !starts_with_punct(part) && !is_open_punct(part))
|
||||
out.push_back(L' ');
|
||||
// last part gets the tail
|
||||
if (idx == cuts.size()) part += tail;
|
||||
out += part;
|
||||
// break after each part
|
||||
if(!ends_with_br(out)) out += L" \\!br";
|
||||
reset_after_break();
|
||||
start = end + (idx<cuts.size() ? 1 : 0);
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
for(size_t i=0;i<v.size();){
|
||||
// ---- Proper-noun blocks ----
|
||||
if (is_area_head(v[i])){
|
||||
size_t j=i+1;
|
||||
while(j<v.size()){
|
||||
std::wstring wj = bare(v[j]);
|
||||
if(is_all_digits(wj) || is_titlecase_word(wj)) ++j;
|
||||
else break;
|
||||
}
|
||||
if(j>i+1){
|
||||
emit_titlecase_run(v,i,j,out);
|
||||
i=j;
|
||||
reset_after_break();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (is_titlecase_word(bare(v[i]))){
|
||||
size_t j=i;
|
||||
while(j<v.size() && is_titlecase_word(bare(v[j]))) ++j;
|
||||
if(j>=i+2){
|
||||
emit_titlecase_run(v,i,j,out);
|
||||
i=j;
|
||||
reset_after_break();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// ---- "and" between heavier items ----
|
||||
if(is_and(v[i]) && i>0 && i+1<v.size()){
|
||||
Wt lw = weight(v[i-1]);
|
||||
Wt rw = weight(v[i+1]);
|
||||
if(lw>=MEDIUM && rw>=MEDIUM){
|
||||
if(!ends_with_br(out)) out += L" \\!br";
|
||||
out += L" and \\!br";
|
||||
++i;
|
||||
reset_after_break();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// ---- Standalone dash ( -, –, — ) => hard boundary ----
|
||||
if (v[i]==L"-" || v[i]==L"\u2013" || v[i]==L"\u2014"){
|
||||
if(!ends_with_br(out)) out += L" \\!br";
|
||||
reset_after_break();
|
||||
++i;
|
||||
continue;
|
||||
}
|
||||
|
||||
// ---- Symmetric linker isolation: [BR] linker [BR] ----
|
||||
{
|
||||
std::wstring tok = v[i];
|
||||
std::wstring tl = lower(bare(tok));
|
||||
bool in_head_span = (i < 2);
|
||||
if (!in_head_span && (tl==L"at" || tl==L"in" || tl==L"on" || tl==L"to"
|
||||
|| tl==L"of" || tl==L"for"|| tl==L"from"|| tl==L"by")){
|
||||
if(!ends_with_br(out)) out += L" \\!br"; // BEFORE linker
|
||||
reset_after_break();
|
||||
|
||||
if(!out.empty() && !starts_with_punct(tok) && !is_open_punct(tok)) out.push_back(L' ');
|
||||
out += tok;
|
||||
|
||||
if(!ends_with_br(out)) out += L" \\!br"; // AFTER linker
|
||||
reset_after_break();
|
||||
|
||||
++i;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// ---- Pre-copula break: put a beat BEFORE "is" when followed by determiner/contenty ----
|
||||
{
|
||||
std::wstring tl_is = to_lower(bare(v[i]));
|
||||
bool in_head_span = (i < 2);
|
||||
auto is_tag_local = [&](const std::wstring& w){ return (w==L"\\!br" || w==L"\\!wH1" || w==L"\\!wH0"); };
|
||||
|
||||
auto is_single_letter = [&](const std::wstring& w)->bool{
|
||||
std::wstring b = strip_trailing_punct(w);
|
||||
if (b.size()==1 && iswalpha(b[0]) && iswupper(b[0])) return true; // C
|
||||
if (b.size()==2 && iswalpha(b[0]) && iswupper(b[0]) && b[1]==L':') return true; // C:
|
||||
return false;
|
||||
};
|
||||
|
||||
auto is_determiner = [&](const std::wstring& w)->bool{
|
||||
std::wstring b = to_lower(strip_trailing_punct(w));
|
||||
return (b==L"the"||b==L"thee"||b==L"a"||b==L"an"||
|
||||
b==L"this"||b==L"that"||b==L"these"||b==L"those"||
|
||||
b==L"some"||b==L"any"||b==L"each"||b==L"every"||b==L"no");
|
||||
};
|
||||
|
||||
if (!in_head_span && tl_is == L"is") {
|
||||
// peek next non-tag token
|
||||
size_t k = i + 1;
|
||||
while (k < v.size() && is_tag_local(v[k])) ++k;
|
||||
|
||||
bool trigger = false;
|
||||
if (k < v.size()) {
|
||||
const std::wstring& n1 = v[k];
|
||||
if (is_determiner(n1) ||
|
||||
is_titlecase_word(strip_trailing_punct(n1)) ||
|
||||
is_all_digits(strip_trailing_punct(n1)) ||
|
||||
is_single_letter(n1) ||
|
||||
weight(n1) == HEAVY)
|
||||
{
|
||||
trigger = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (trigger && !ends_with_br(out)) {
|
||||
out += L" \\!br";
|
||||
// reset run state like a real boundary
|
||||
since_break_all_light = true;
|
||||
content_run = 0;
|
||||
prev_w = LIGHT;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ---- Hyphenated / en-dash / em-dash compounds inside token ----
|
||||
if (emit_dash_split(v[i])) { ++i; continue; }
|
||||
|
||||
// ---- Generic token logic ----
|
||||
std::wstring tok = v[i];
|
||||
Wt w_eff = weight(tok); // effective weight; may be softened at sentence start
|
||||
|
||||
// Soft-start: first two tokens—avoid pre-breaks unless necessary.
|
||||
bool in_head_span = (i < 2);
|
||||
if (i==0 && is_titlecase_word(bare(tok))) {
|
||||
bool next_is_title = (i+1 < v.size()) && is_titlecase_word(bare(v[i+1]));
|
||||
if (!next_is_title && w_eff == HEAVY) w_eff = MEDIUM; // e.g., "Good evening"
|
||||
}
|
||||
|
||||
// ---- HEAVY-GATE ----
|
||||
if (w_eff==HEAVY && content_run >= 1){
|
||||
int k = static_cast<int>(i) - 1;
|
||||
while (k >= 0 && is_tag(v[k])) --k;
|
||||
bool exempt = false;
|
||||
if (k >= 0){
|
||||
std::wstring prev = v[k];
|
||||
if (is_titlecase_word(bare(prev)) || is_all_digits(bare(prev)) || is_single_letter(prev)) {
|
||||
exempt = true;
|
||||
}
|
||||
}
|
||||
if (!exempt){
|
||||
if(!ends_with_br(out)) out += L" \\!br";
|
||||
reset_after_break();
|
||||
}
|
||||
}
|
||||
|
||||
// 3-beat limiter
|
||||
if (w_eff==HEAVY && content_run >= 2){
|
||||
if(!ends_with_br(out)) out += L" \\!br";
|
||||
reset_after_break();
|
||||
}
|
||||
|
||||
// Heavy after only LIGHT (but not inside head span)
|
||||
if (w_eff==HEAVY && since_break_all_light && !in_head_span){
|
||||
if(!out.empty() && !ends_with_br(out)) out += L" \\!br";
|
||||
reset_after_break();
|
||||
}
|
||||
|
||||
// Heavy-Heavy adjacency (outside TitleCase run)
|
||||
if (i>0 && prev_w==HEAVY && w_eff==HEAVY && !in_head_span){
|
||||
if(!ends_with_br(out)) out += L" \\!br";
|
||||
reset_after_break();
|
||||
}
|
||||
|
||||
// Append token with spacing
|
||||
if(!out.empty() && !starts_with_punct(tok) && !is_open_punct(tok)) out.push_back(L' ');
|
||||
out += tok;
|
||||
|
||||
// Punctuation boundary: break after ',' or ';'
|
||||
if (!tok.empty()){
|
||||
wchar_t last = tok.back();
|
||||
if ((last==L',' || last==L';') && !ends_with_br(out)){
|
||||
out += L" \\!br";
|
||||
reset_after_break();
|
||||
++i;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// Update run stats
|
||||
if (w_eff==LIGHT){
|
||||
// remain in light span
|
||||
}else{
|
||||
++content_run; // MEDIUM or HEAVY
|
||||
since_break_all_light = false;
|
||||
}
|
||||
prev_w = w_eff;
|
||||
|
||||
++i;
|
||||
}
|
||||
|
||||
return trim(out);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// Tidy spaces and tags
|
||||
static std::wstring tidy(const std::wstring& s){
|
||||
std::wstring t = std::regex_replace(s, std::wregex(LR"(\s+)"), L" "); // collapse spaces
|
||||
t = std::regex_replace(t, std::wregex(LR"(\s*\\!br\s*)"), L" \\!br "); // normalize tag spacing
|
||||
t = std::regex_replace(t, std::wregex(LR"((\s*\\!br\s*){2,})"), L" \\!br "); // collapse multiple breaks
|
||||
t = std::regex_replace(t, std::wregex(LR"(\s+([.,!?;:]))"), L"$1"); // no space before punctuation
|
||||
// trimyou
|
||||
size_t a=0,b=t.size();
|
||||
while(a<b && iswspace(t[a])) ++a;
|
||||
while(b>a && iswspace(t[b-1])) --b;
|
||||
return t.substr(a,b-a);
|
||||
}
|
||||
|
||||
|
||||
// Convert standalone letters into stable "letter tokens" for FlexTalk.
|
||||
// - "A:" / "a:" / bare "A"/"a" near a boundary -> "Ay:"
|
||||
// - any single UPPERCASE letter near a boundary -> "X:" (exactly one colon)
|
||||
// Boundaries are start/end or a \!br tag on either side. We preserve trailing punctuation.
|
||||
static void normalize_letter_tokens(std::wstring& s){
|
||||
// split by whitespace; keep tags as tokens
|
||||
std::wstringstream ss(s);
|
||||
std::vector<std::wstring> tok; std::wstring t;
|
||||
while (ss >> t) tok.push_back(t);
|
||||
if (tok.empty()) return;
|
||||
|
||||
auto is_tag = [](const std::wstring& w){
|
||||
return (w==L"\\!br" || w==L"\\!wH1" || w==L"\\!wH0");
|
||||
};
|
||||
|
||||
// strip trailing punctuation, but lift out a single trailing ':' as a flag
|
||||
auto split_tail = [](const std::wstring& x)->std::tuple<std::wstring,bool,std::wstring>{
|
||||
std::wstring core = x, punct;
|
||||
bool had_colon = false;
|
||||
// peel general punctuation, but remember a single trailing ':'
|
||||
while(!core.empty()){
|
||||
wchar_t c = core.back();
|
||||
if(c==L':' && !had_colon){ had_colon = true; core.pop_back(); continue; }
|
||||
if(c==L','||c==L'.'||c==L';'||c==L'!'||c==L'?'||c==L'"'||c==L'\''){
|
||||
punct.insert(punct.begin(), c);
|
||||
core.pop_back();
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return {core, had_colon, punct};
|
||||
};
|
||||
|
||||
auto is_boundary = [&](int idx)->bool{
|
||||
return (idx < 0 || idx >= (int)tok.size() || is_tag(tok[idx]));
|
||||
};
|
||||
|
||||
for (int i=0;i<(int)tok.size();++i){
|
||||
if (is_tag(tok[i])) continue;
|
||||
|
||||
auto [coreOrig, had_colon, tail] = split_tail(tok[i]);
|
||||
std::wstring core = coreOrig;
|
||||
|
||||
const bool near_left = is_boundary(i-1);
|
||||
const bool near_right = is_boundary(i+1);
|
||||
const bool near_bound = (near_left || near_right);
|
||||
|
||||
// Normalize A / a cases to "Ay:" when isolated or already written as A:
|
||||
if ((core==L"A" || core==L"a") && (near_bound || had_colon)){
|
||||
core = L"Ay";
|
||||
had_colon = true; // ensure exactly one colon added below
|
||||
}
|
||||
// Any other single UPPERCASE letter becomes a letter token near a boundary
|
||||
else if (core.size()==1 && iswalpha(core[0]) && iswupper(core[0]) && near_bound){
|
||||
// ensure exactly one colon
|
||||
// (if there was already one as trailing punct, we won't add another)
|
||||
// special "A" handled above
|
||||
had_colon = true;
|
||||
}
|
||||
|
||||
// Reassemble: add colon iff had_colon is true, then the rest of punctuation
|
||||
std::wstring rebuilt = core;
|
||||
if (had_colon) rebuilt.push_back(L':');
|
||||
rebuilt += tail;
|
||||
|
||||
tok[i] = rebuilt;
|
||||
}
|
||||
|
||||
// Rebuild s (tidy() will normalize spaces/tags later)
|
||||
std::wstring out;
|
||||
for (size_t i=0;i<tok.size();++i){
|
||||
if (!out.empty()) out.push_back(L' ');
|
||||
out += tok[i];
|
||||
}
|
||||
s.swap(out);
|
||||
}
|
||||
|
||||
|
||||
std::wstring vox_process(const std::wstring& in, bool wrap_vox_tags){
|
||||
auto sents = split_sentences(in);
|
||||
std::wstring out;
|
||||
for (auto sent : sents){
|
||||
if (sent.empty()) continue;
|
||||
|
||||
// ORDER: make "thee" first, then lead-in, then time/nums
|
||||
apply_thee_rule(sent);
|
||||
apply_leadin_break(sent);
|
||||
apply_time_numbers_degrees(sent);
|
||||
|
||||
// beats + letter normalization
|
||||
std::wstring with_beats = build_beats(sent);
|
||||
normalize_letter_tokens(with_beats);
|
||||
with_beats = tidy(with_beats);
|
||||
|
||||
// sentence-end cadence: add ~300ms pause, then a boundary
|
||||
if (!with_beats.empty() && with_beats.back()!=L' ') with_beats.push_back(L' ');
|
||||
with_beats += L"\\!sf500 \\!br";
|
||||
|
||||
if (!out.empty()) out.push_back(L' ');
|
||||
out += with_beats;
|
||||
}
|
||||
|
||||
out = trim(out);
|
||||
// collapse accidental double breaks from joins, normalize commas before breaks, etc.
|
||||
out = std::regex_replace(out, std::wregex(LR"((\s*\\!br\s*){2,})"), L" \\!br ");
|
||||
out = std::regex_replace(out, std::wregex(LR"(\\!br\s*([,;:]))"), L"$1 \\!br");
|
||||
|
||||
if (!out.empty()) {
|
||||
if (wrap_vox_tags) {
|
||||
out = L"\\!wH1 " + out + L" \\!wH0 ";
|
||||
} else {
|
||||
out = out + L" ";
|
||||
}
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
#pragma once
|
||||
#include <string>
|
||||
|
||||
// Transform plain text into FlexTalk VOX style with vendor tags.
|
||||
// - Wraps with \!wH1 ... \!wH0 (trailing space after \!wH0 for safety)
|
||||
// - Inserts \!br at sentence ends & cadence points
|
||||
// - Uses a generic prosody engine (no word-specific hacks)
|
||||
std::wstring vox_process(const std::wstring& in, bool wrap_vox_tags);
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
+185
@@ -0,0 +1,185 @@
|
||||
[Version]
|
||||
Signature="$Chicago$"
|
||||
AdvancedINF=2.5,"You need a new version of advpack.dll"
|
||||
|
||||
[SourceDisksNames]
|
||||
1=%AppName%,,1
|
||||
|
||||
[DefaultInstall]
|
||||
CustomDestination=MyCustomDestination
|
||||
Copyfiles=LexTools,TTSFiles,InfSection
|
||||
AddReg=TTSReg
|
||||
DelFiles=DelOldTTSFiles
|
||||
|
||||
[DefaultInstall.NT]
|
||||
CustomDestination=MyCustomDestination
|
||||
Copyfiles=LexTools,TTSFiles,InfSection
|
||||
AddReg=TTSReg
|
||||
DelFiles=DelOldTTSFiles
|
||||
|
||||
[MyCustomDestination]
|
||||
49010=ProgramFilesDestination,21
|
||||
49000,49001,49002,49003=PackageDestination49000,5
|
||||
|
||||
[UninstallDestination]
|
||||
49010=ProgramFilesDestination,5
|
||||
49000=PackageDestination49000,5
|
||||
|
||||
[ProgramFilesDestination]
|
||||
HKLM,software\microsoft\windows\currentversion,CommonFilesDir,"%InstallPrompt%","c:\program files\common files"
|
||||
|
||||
[PackageDestination49000]
|
||||
HKLM,Software\Microsoft\MSTTS,InstallDir,"%InstallPrompt%","%49010%\%DefaultDir%"
|
||||
|
||||
[Uninstall]
|
||||
BeginPrompt=BeginPromptSection
|
||||
EndPrompt=EndPromptSection
|
||||
RunPreSetupCommands=UninstallUserDict
|
||||
CustomDestination=UninstallDestination
|
||||
DelFiles=LexTools,TTSFiles,TTSFiles2
|
||||
Deldirs=RemoveFolder
|
||||
DelReg=DelRegSection
|
||||
SmartReboot=I
|
||||
Cleanup=1
|
||||
|
||||
[Uninstall.Quiet]
|
||||
RunPreSetupCommands=UninstallUserDict
|
||||
CustomDestination=UninstallDestination
|
||||
DelFiles=LexTools,TTSFiles,TTSFiles2
|
||||
Deldirs=RemoveFolder
|
||||
DelReg=DelRegSection
|
||||
SmartReboot=I
|
||||
Cleanup=1
|
||||
|
||||
[UninstallUserDict]
|
||||
%25%\delttsul.exe
|
||||
|
||||
[DestinationDirs]
|
||||
TTSFiles=49000
|
||||
TTSFiles2=49000
|
||||
InfSection=17
|
||||
DelOldTTSFiles=49000
|
||||
LexTools=25
|
||||
|
||||
[LexTools]
|
||||
delttsul.exe
|
||||
|
||||
[TTSFiles]
|
||||
msttssyn.dll
|
||||
female.vce
|
||||
male.vce
|
||||
sam.vce
|
||||
female8.vce
|
||||
male8.vce
|
||||
female.cfg
|
||||
male.cfg
|
||||
sam.cfg
|
||||
female8.cfg
|
||||
male8.cfg
|
||||
wraptts.dll
|
||||
wttsf22.dll
|
||||
wttsm22.dll
|
||||
wttss22.dll
|
||||
wttsa22.dll
|
||||
wttsmm.dll
|
||||
|
||||
[TTSFiles2]
|
||||
freddy.vce
|
||||
brutus.vce
|
||||
malew.vce
|
||||
femalew.vce
|
||||
|
||||
[DelOldTTSFiles]
|
||||
mark.vce
|
||||
melanie.vce
|
||||
mark8.vce
|
||||
melanie8.vce
|
||||
|
||||
[InfSection]
|
||||
msTTS.inf
|
||||
|
||||
[RemoveFolder]
|
||||
%49000%
|
||||
|
||||
|
||||
[TTSReg]
|
||||
HKLM,Software\Voice\TextToSpeech\Engine,MSTTSSyn,,{E0725551-286F-11d0-8E73-00A0C9083363}
|
||||
HKCR,CLSID\{E0725551-286F-11d0-8E73-00A0C9083363},,,"Microsoft TTS Engine"
|
||||
HKCR,CLSID\{E0725551-286F-11d0-8E73-00A0C9083363}\InprocServer32,,,"%49000%\MSTTSSYN.dll"
|
||||
HKCR,CLSID\{E0725551-286F-11d0-8E73-00A0C9083363}\InprocServer32,ThreadingModel,,Apartment
|
||||
; use the following reg edit to see which version installed for ActiveX downloads
|
||||
HKCR,CLSID\{161FA782-A52C-11d0-8D7C-00A0C9034A7E},,,"Downloadable Whistler 3.0"
|
||||
HKCR,CLSID\{161FA782-A52C-11d0-8D7C-00A0C9034A7E}\Control,,,
|
||||
HKCR,CLSID\{161FA782-A52C-11d0-8D7C-00A0C9034A7E}\InprocServer32,,,"%49000%\wraptts.dll"
|
||||
HKCR,CLSID\{161FA782-A52C-11d0-8D7C-00A0C9034A7E}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKCR,CLSID\{161FA782-A52C-11d0-8D7C-00A0C9034A7E}\MiscStatus,,,"0"
|
||||
HKCR,CLSID\{161FA782-A52C-11d0-8D7C-00A0C9034A7E}\MiscStatus\1,,,"0132497"
|
||||
HKCR,CLSID\{FD913800-5CA2-11d2-A1E6-00A0C913D1EF},,,"Downloadable Whistler 4.0"
|
||||
HKCR,CLSID\{FD913800-5CA2-11d2-A1E6-00A0C913D1EF}\Control,,,
|
||||
HKCR,CLSID\{FD913800-5CA2-11d2-A1E6-00A0C913D1EF}\InprocServer32,,,"%49000%\wttsf22.dll"
|
||||
HKCR,CLSID\{FD913800-5CA2-11d2-A1E6-00A0C913D1EF}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKCR,CLSID\{FD913800-5CA2-11d2-A1E6-00A0C913D1EF}\MiscStatus,,,"0"
|
||||
HKCR,CLSID\{FD913800-5CA2-11d2-A1E6-00A0C913D1EF}\MiscStatus\1,,,"0132497"
|
||||
HKCR,CLSID\{FD913801-5CA2-11d2-A1E6-00A0C913D1EF},,,"Downloadable Whistler 4.0"
|
||||
HKCR,CLSID\{FD913801-5CA2-11d2-A1E6-00A0C913D1EF}\Control,,,
|
||||
HKCR,CLSID\{FD913801-5CA2-11d2-A1E6-00A0C913D1EF}\InprocServer32,,,"%49000%\wttsm22.dll"
|
||||
HKCR,CLSID\{FD913801-5CA2-11d2-A1E6-00A0C913D1EF}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKCR,CLSID\{FD913801-5CA2-11d2-A1E6-00A0C913D1EF}\MiscStatus,,,"0"
|
||||
HKCR,CLSID\{FD913801-5CA2-11d2-A1E6-00A0C913D1EF}\MiscStatus\1,,,"0132497"
|
||||
HKCR,CLSID\{FD913802-5CA2-11d2-A1E6-00A0C913D1EF},,,"Downloadable Whistler 4.0"
|
||||
HKCR,CLSID\{FD913802-5CA2-11d2-A1E6-00A0C913D1EF}\Control,,,
|
||||
HKCR,CLSID\{FD913802-5CA2-11d2-A1E6-00A0C913D1EF}\InprocServer32,,,"%49000%\wttss22.dll"
|
||||
HKCR,CLSID\{FD913802-5CA2-11d2-A1E6-00A0C913D1EF}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKCR,CLSID\{FD913802-5CA2-11d2-A1E6-00A0C913D1EF}\MiscStatus,,,"0"
|
||||
HKCR,CLSID\{FD913802-5CA2-11d2-A1E6-00A0C913D1EF}\MiscStatus\1,,,"0132497"
|
||||
HKCR,CLSID\{FD913803-5CA2-11d2-A1E6-00A0C913D1EF},,,"Downloadable Whistler 4.0"
|
||||
HKCR,CLSID\{FD913803-5CA2-11d2-A1E6-00A0C913D1EF}\Control,,,
|
||||
HKCR,CLSID\{FD913803-5CA2-11d2-A1E6-00A0C913D1EF}\InprocServer32,,,"%49000%\wttsa22.dll"
|
||||
HKCR,CLSID\{FD913803-5CA2-11d2-A1E6-00A0C913D1EF}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKCR,CLSID\{FD913803-5CA2-11d2-A1E6-00A0C913D1EF}\MiscStatus,,,"0"
|
||||
HKCR,CLSID\{FD913803-5CA2-11d2-A1E6-00A0C913D1EF}\MiscStatus\1,,,"0132497"
|
||||
HKCR,CLSID\{FD913804-5CA2-11d2-A1E6-00A0C913D1EF},,,"Downloadable Whistler 4.0"
|
||||
HKCR,CLSID\{FD913804-5CA2-11d2-A1E6-00A0C913D1EF}\Control,,,
|
||||
HKCR,CLSID\{FD913804-5CA2-11d2-A1E6-00A0C913D1EF}\InprocServer32,,,"%49000%\wttsmm.dll"
|
||||
HKCR,CLSID\{FD913804-5CA2-11d2-A1E6-00A0C913D1EF}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKCR,CLSID\{FD913804-5CA2-11d2-A1E6-00A0C913D1EF}\MiscStatus,,,"0"
|
||||
HKCR,CLSID\{FD913804-5CA2-11d2-A1E6-00A0C913D1EF}\MiscStatus\1,,,"0132497"
|
||||
; cache information, so enumerates faster
|
||||
HKLM,Software\Voice\TextToSpeech\Engine\{E0725551-286F-11d0-8E73-00A0C9083363},Dirty,1,1
|
||||
|
||||
|
||||
; for uninstall
|
||||
HKLM,Software\Microsoft\MSTTS,InstallDir,,"%49000%"
|
||||
HKLM,Software\Microsoft\Windows\CurrentVersion\Uninstall\MSTTS,"DisplayName",,"%AppName%
|
||||
HKLM,Software\Microsoft\Windows\CurrentVersion\Uninstall\MSTTS,"UninstallString",,"RunDll32 advpack.dll,LaunchINFSection %17%\msTTS.inf, Uninstall"
|
||||
|
||||
[DelRegSection]
|
||||
HKCU,Software\Microsoft\Whisper
|
||||
HKLM,Software\Voice\TextToSpeech\Engine,MSTTSSyn
|
||||
HKCR,CLSID\{E0725551-286F-11d0-8E73-00A0C9083363}
|
||||
HKCR,CLSID\{161FA782-A52C-11d0-8D7C-00A0C9034A7E}
|
||||
HKCR,CLSID\{FD913800-5CA2-11d2-A1E6-00A0C913D1EF}
|
||||
HKCR,CLSID\{FD913801-5CA2-11d2-A1E6-00A0C913D1EF}
|
||||
HKCR,CLSID\{FD913802-5CA2-11d2-A1E6-00A0C913D1EF}
|
||||
HKCR,CLSID\{FD913803-5CA2-11d2-A1E6-00A0C913D1EF}
|
||||
HKCR,CLSID\{FD913804-5CA2-11d2-A1E6-00A0C913D1EF}
|
||||
HKLM,Software\Voice\TextToSpeech\Engine\{E0725551-286F-11d0-8E73-00A0C9083363}
|
||||
|
||||
; uninstall
|
||||
HKLM,Software\Microsoft\Windows\CurrentVersion\Uninstall\MSTTS
|
||||
HKLM,Software\Microsoft\MSTTS
|
||||
|
||||
[BeginPromptSection]
|
||||
Prompt=%BeginPrompt%
|
||||
ButtonType=YESNO
|
||||
Title=%AppName%
|
||||
|
||||
[EndPromptSection]
|
||||
Prompt=%EndPrompt%
|
||||
|
||||
[Strings]
|
||||
AppName="Microsoft Text-to-Speech Engine 4.0 (English)"
|
||||
BeginPrompt="Are you sure you want to remove the Microsoft text-to-speech engine? It may prevent text-to-speech from working."
|
||||
EndPrompt="Uninstall complete."
|
||||
DefaultDir="microsoft shared\SpeechEngines\TTS"
|
||||
|
||||
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
+900
@@ -0,0 +1,900 @@
|
||||
[Version]
|
||||
Signature="$Chicago$"
|
||||
AdvancedINF=2.5,"You need a new version of advpack.dll"
|
||||
|
||||
[SourceDisksNames]
|
||||
1=%AppName%,,1
|
||||
|
||||
[DefaultInstall]
|
||||
CustomDestination=MyCustomDestination
|
||||
Copyfiles=APIFiles,InfSection,VCRT
|
||||
AddReg=APIReg
|
||||
;RegisterOCXs=RegisterOCXSection
|
||||
|
||||
[DefaultInstall.NT]
|
||||
CustomDestination=MyCustomDestination
|
||||
Copyfiles=APIFiles,InfSection,VCRT
|
||||
AddReg=APIReg
|
||||
;RegisterOCXs=RegisterOCXSection
|
||||
|
||||
[MyCustomDestination]
|
||||
49000,49001,49002,49003=PackageDestination49000,5
|
||||
|
||||
[UninstallDestination]
|
||||
49000=UninstallDestination49000,5
|
||||
|
||||
[PackageDestination49000]
|
||||
HKLM,Software\Microsoft\SpeechAPI,InstallDir,"%InstallPrompt%","%25%\speech"
|
||||
|
||||
[UninstallDestination49000]
|
||||
HKLM,Software\Microsoft\SpeechAPI,InstallDir,"%InstallPrompt%","%25%\speech"
|
||||
|
||||
[Uninstall]
|
||||
;BeginPrompt=BeginPromptSection
|
||||
;EndPrompt=EndPromptSection
|
||||
CustomDestination=UninstallDestination
|
||||
DelFiles=APIFiles,VCmdVDctFiles
|
||||
Deldirs=RemoveFolder
|
||||
DelReg=DelRegSection
|
||||
SmartReboot=I
|
||||
Cleanup=1
|
||||
;UnRegisterOCXs=RegisterOCXSection
|
||||
|
||||
[DestinationDirs]
|
||||
APIFiles=49000
|
||||
VCmdVDctFiles=49000
|
||||
InfSection=17
|
||||
VCRT=11
|
||||
|
||||
[APIFiles]
|
||||
speech.dll,,,96
|
||||
spchtel.dll,,,96
|
||||
vcmd.exe,,,96
|
||||
vcauto.tlb,,,96
|
||||
vtxtauto.tlb,,,96
|
||||
vcmshl.dll,,,96
|
||||
speech.hlp
|
||||
speech.cnt
|
||||
Xlisten.dll,,,96
|
||||
Xvoice.dll,,,96
|
||||
Xcommand.dll,,,96
|
||||
Vdict.dll,,,96
|
||||
VText.dll,,,96
|
||||
XTel.Dll,,,96
|
||||
WrapSAPI.dll,,,96
|
||||
|
||||
[VCRT]
|
||||
msvcrt.dll,,,16
|
||||
|
||||
[InfSection]
|
||||
spchapi.inf
|
||||
|
||||
[VCmdVDctFiles]
|
||||
speech.gid
|
||||
vcmd0001.vcd
|
||||
vcmd0002.vcd
|
||||
vcmd0003.vcd
|
||||
vcmd0004.vcd
|
||||
vcmd0005.vcd
|
||||
vcmd0006.vcd
|
||||
vcmd0007.vcd
|
||||
vcmd0008.vcd
|
||||
vcmd0009.vcd
|
||||
vcmd0010.vcd
|
||||
vcmd0011.vcd
|
||||
vcmd0012.vcd
|
||||
vcmd0013.vcd
|
||||
vcmd0014.vcd
|
||||
vcmd0015.vcd
|
||||
vcmd0016.vcd
|
||||
vcmd0017.vcd
|
||||
vcmd0018.vcd
|
||||
vcmd0019.vcd
|
||||
vdct0001.dct
|
||||
vdct0002.dct
|
||||
vdct0003.dct
|
||||
vdct0004.dct
|
||||
vdct0005.dct
|
||||
vdct0006.dct
|
||||
vdct0007.dct
|
||||
vdct0008.dct
|
||||
vdct0009.dct
|
||||
vdct0010.dct
|
||||
vdct0011.dct
|
||||
vdct0012.dct
|
||||
vdct0013.dct
|
||||
vdct0014.dct
|
||||
vdct0015.dct
|
||||
vdct0016.dct
|
||||
vdct0017.dct
|
||||
vdct0018.dct
|
||||
vdct0019.dct
|
||||
|
||||
[RemoveFolder]
|
||||
%49000%
|
||||
|
||||
|
||||
[APIReg]
|
||||
HKCR,CLSID\{C63A2B30-5543-11b9-C000-5611722E1D15},,,IVCmd_PSFactory
|
||||
HKCR,CLSID\{C63A2B30-5543-11b9-C000-5611722E1D15}\InprocServer32,,,%49000%\vcmshl.dll
|
||||
HKCR,CLSID\{6D40D820-0BA7-11ce-A166-00AA004CD65C},,,"Voice Command Manager"
|
||||
HKCR,CLSID\{6D40D820-0BA7-11ce-A166-00AA004CD65C}\LocalServer32,,,%49000%\vcmd.exe
|
||||
HKCR,CLSID\{F1DC95A0-0BA7-11ce-A166-00AA004CD65C},,,"Voice Text Manager"
|
||||
HKCR,CLSID\{F1DC95A0-0BA7-11ce-A166-00AA004CD65C}\LocalServer32,,,%49000%\vcmd.exe
|
||||
HKCR,CLSID\{B9BD3860-44DB-101B-90A8-00AA003E4B50},,,ISRShare_PSFactory
|
||||
HKCR,CLSID\{B9BD3860-44DB-101B-90A8-00AA003E4B50}\InprocServer32,,,%49000%\vcmshl.dll
|
||||
HKCR,CLSID\{89F70C30-8636-11ce-B763-00AA004CD65C},,,"Speech Recognition Enumerator/Share Object"
|
||||
HKCR,CLSID\{89F70C30-8636-11ce-B763-00AA004CD65C}\LocalServer32,,,%49000%\vcmd.exe
|
||||
HKCR,CLSID\{D67C0280-C743-11cd-80E5-00AA003E4B50},,,"Text to Speech Enumerator"
|
||||
HKCR,CLSID\{D67C0280-C743-11cd-80E5-00AA003E4B50}\InprocServer32,,,%49000%\Speech.dll
|
||||
HKCR,CLSID\{D67C0280-C743-11cd-80E5-00AA003E4B50}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKCR,CLSID\{554667BB-7213-11cf-B210-00AA00A215ED},,,"Lexicon Enumerator"
|
||||
HKCR,CLSID\{554667BB-7213-11cf-B210-00AA00A215ED}\InprocServer32,,,%49000%\Speech.dll
|
||||
HKCR,CLSID\{554667BB-7213-11cf-B210-00AA00A215ED}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKCR,CLSID\{CB96B400-C743-11cd-80E5-00AA003E4B50},,,"Audio Destination Object"
|
||||
HKCR,CLSID\{CB96B400-C743-11cd-80E5-00AA003E4B50}\InprocServer32,,,%49000%\Speech.dll
|
||||
HKCR,CLSID\{CB96B400-C743-11cd-80E5-00AA003E4B50}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKCR,CLSID\{E02D16C0-C743-11cd-80E5-00AA003E4B50},,,"Speech Recognition Enumerator"
|
||||
HKCR,CLSID\{E02D16C0-C743-11cd-80E5-00AA003E4B50}\InprocServer32,,,%49000%\Speech.dll
|
||||
HKCR,CLSID\{E02D16C0-C743-11cd-80E5-00AA003E4B50}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKCR,CLSID\{D24FE500-C743-11cd-80E5-00AA003E4B50},,,"Audio Source Object"
|
||||
HKCR,CLSID\{D24FE500-C743-11cd-80E5-00AA003E4B50}\InprocServer32,,,%49000%\Speech.dll
|
||||
HKCR,CLSID\{D24FE500-C743-11cd-80E5-00AA003E4B50}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKCR,CLSID\{D4023720-E4B9-11cf-8D56-00A0C9034A7E},,,"Instrumented Audio Source Object"
|
||||
HKCR,CLSID\{D4023720-E4B9-11cf-8D56-00A0C9034A7E}\InprocServer32,,,%49000%\Speech.dll
|
||||
HKCR,CLSID\{D4023720-E4B9-11cf-8D56-00A0C9034A7E}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKCR,CLSID\{D4123720-E4B9-11cf-8D56-00A0C9034A7E},,,"Suspeding Audio Source Object"
|
||||
HKCR,CLSID\{D4123720-E4B9-11cf-8D56-00A0C9034A7E}\InprocServer32,,,%49000%\Speech.dll
|
||||
HKCR,CLSID\{D4123720-E4B9-11cf-8D56-00A0C9034A7E}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKCR,CLSID\{D4523720-E4B9-11cf-8D56-00A0C9034A7E},,,"Audio Source from File Object"
|
||||
HKCR,CLSID\{D4523720-E4B9-11cf-8D56-00A0C9034A7E}\InprocServer32,,,%49000%\Speech.dll
|
||||
HKCR,CLSID\{D4523720-E4B9-11cf-8D56-00A0C9034A7E}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKCR,CLSID\{D4623720-E4B9-11cf-8D56-00A0C9034A7E},,,"Audio Destination to File Object"
|
||||
HKCR,CLSID\{D4623720-E4B9-11cf-8D56-00A0C9034A7E}\InprocServer32,,,%49000%\Speech.dll
|
||||
HKCR,CLSID\{D4623720-E4B9-11cf-8D56-00A0C9034A7E}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKCR,CLSID\{B9F11A90-90E3-11d0-8D77-00A0C9034A7E},,,"DirectSound Destination Object"
|
||||
HKCR,CLSID\{B9F11A90-90E3-11d0-8D77-00A0C9034A7E}\InprocServer32,,,%49000%\Speech.dll
|
||||
HKCR,CLSID\{B9F11A90-90E3-11d0-8D77-00A0C9034A7E}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKCR,CLSID\{32C35401-D04F-11d0-99B3-00AA004CD65C},,,"DirectSound Source Object"
|
||||
HKCR,CLSID\{32C35401-D04F-11d0-99B3-00AA004CD65C}\InprocServer32,,,%49000%\Speech.dll
|
||||
HKCR,CLSID\{32C35401-D04F-11d0-99B3-00AA004CD65C}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKCR,CLSID\{B9F11A95-90E3-11d0-8D77-00A0C9034A7E},,,"Microphone Setup Wizard"
|
||||
HKCR,CLSID\{B9F11A95-90E3-11d0-8D77-00A0C9034A7E}\InprocServer32,,,%49000%\Speech.dll
|
||||
HKCR,CLSID\{B9F11A95-90E3-11d0-8D77-00A0C9034A7E}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKCR,CLSID\{B9F11A96-90E3-11d0-8D77-00A0C9034A7E},,,"Phoneme Converter"
|
||||
HKCR,CLSID\{B9F11A96-90E3-11d0-8D77-00A0C9034A7E}\InprocServer32,,,%49000%\Speech.dll
|
||||
HKCR,CLSID\{B9F11A96-90E3-11d0-8D77-00A0C9034A7E}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKCR,CLSID\{70618F72-D1ED-11d0-8FAC-08002BE4E62A},,,"Speech Tools Grammar Compiler"
|
||||
HKCR,CLSID\{70618F72-D1ED-11d0-8FAC-08002BE4E62A}\InprocServer32,,,%49000%\Speech.dll
|
||||
HKCR,CLSID\{70618F72-D1ED-11d0-8FAC-08002BE4E62A}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKCR,CLSID\{EFD0E6BA-DB5F-11d0-8FAC-08002BE4E62A},,,"Speech Tools TTS Queue"
|
||||
HKCR,CLSID\{EFD0E6BA-DB5F-11d0-8FAC-08002BE4E62A}\InprocServer32,,,%49000%\Speech.dll
|
||||
HKCR,CLSID\{EFD0E6BA-DB5F-11d0-8FAC-08002BE4E62A}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKCR,CLSID\{B3613D9F-E26E-11d0-8FAC-08002BE4E62A},,,"Speech Tools Log"
|
||||
HKCR,CLSID\{B3613D9F-E26E-11d0-8FAC-08002BE4E62A}\InprocServer32,,,%49000%\Speech.dll
|
||||
HKCR,CLSID\{B3613D9F-E26E-11d0-8FAC-08002BE4E62A}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKCR,CLSID\{B3613DA0-E26E-11d0-8FAC-08002BE4E62A},,,"Logging Audio Source"
|
||||
HKCR,CLSID\{B3613DA0-E26E-11d0-8FAC-08002BE4E62A}\InprocServer32,,,%49000%\Speech.dll
|
||||
HKCR,CLSID\{B3613DA0-E26E-11d0-8FAC-08002BE4E62A}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKCR,CLSID\{2EC5A8A5-E65B-11d0-8FAC-08002BE4E62A},,,"Telephony Audio Source"
|
||||
HKCR,CLSID\{2EC5A8A5-E65B-11d0-8FAC-08002BE4E62A}\InprocServer32,,,%49000%\Speech.dll
|
||||
HKCR,CLSID\{2EC5A8A5-E65B-11d0-8FAC-08002BE4E62A}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKCR,CLSID\{2EC5A8A6-E65B-11d0-8FAC-08002BE4E62A},,,"Telephony Audio Destination"
|
||||
HKCR,CLSID\{2EC5A8A6-E65B-11d0-8FAC-08002BE4E62A}\InprocServer32,,,%49000%\Speech.dll
|
||||
HKCR,CLSID\{2EC5A8A6-E65B-11d0-8FAC-08002BE4E62A}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKCR,CLSID\{61935832-FC85-11d0-8FAE-08002BE4E62A},,,"Audio Record Object"
|
||||
HKCR,CLSID\{61935832-FC85-11d0-8FAE-08002BE4E62A}\InprocServer32,,,%49000%\Speech.dll
|
||||
HKCR,CLSID\{61935832-FC85-11d0-8FAE-08002BE4E62A}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKCR,CLSID\{92655FB1-ADF9-11d1-BEB9-006008317CE8},,,"Lexicon Dialog"
|
||||
HKCR,CLSID\{92655FB1-ADF9-11d1-BEB9-006008317CE8}\InprocServer32,,,%49000%\Speech.dll
|
||||
HKCR,CLSID\{92655FB1-ADF9-11d1-BEB9-006008317CE8}\InprocServer32,ThreadingModel,,Apartment
|
||||
|
||||
HKCR,CLSID\{F9D18BF8-E0ED-11d0-AB8B-08002BE4E3B7},,,"Telephony Controls Information Store"
|
||||
HKCR,CLSID\{F9D18BF8-E0ED-11d0-AB8B-08002BE4E3B7}\InprocServer32,,,%49000%\SpchTel.dll
|
||||
HKCR,CLSID\{F9D18BF8-E0ED-11d0-AB8B-08002BE4E3B7}\InprocServer32,ThreadingModel,,Apartment
|
||||
|
||||
HKCR,CLSID\{A26D7620-6FA0-11ce-A166-00AA004CD65C},,,"Voice Command Object"
|
||||
HKCR,CLSID\{A26D7620-6FA0-11ce-A166-00AA004CD65C}\ProgID,,,Speech.VoiceCommand.1
|
||||
HKCR,CLSID\{A26D7620-6FA0-11ce-A166-00AA004CD65C}\VersionIndependentProgID,,,Speech.VoiceCommand
|
||||
HKCR,CLSID\{A26D7620-6FA0-11ce-A166-00AA004CD65C}\LocalServer32,,,%49000%\vcmd.exe
|
||||
HKCR,CLSID\{FF2C7A52-78F9-11ce-B762-00AA004CD65C},,,"Voice Text Object"
|
||||
HKCR,CLSID\{FF2C7A52-78F9-11ce-B762-00AA004CD65C}\ProgID,,,Speech.VoiceText.1
|
||||
HKCR,CLSID\{FF2C7A52-78F9-11ce-B762-00AA004CD65C}\VersionIndependentProgID,,,Speech.VoiceText
|
||||
HKCR,CLSID\{FF2C7A52-78F9-11ce-B762-00AA004CD65C}\LocalServer32,,,%49000%\vcmd.exe
|
||||
HKCR,CLSID\{35522CA0-67CE-11cf-9B8B-08005AFC3A41},,,"Voice Dictation Manager"
|
||||
HKCR,CLSID\{35522CA0-67CE-11cf-9B8B-08005AFC3A41}\LocalServer32,,,%49000%\vcmd.exe
|
||||
|
||||
HKCR,Speech.VoiceCommand,,,"VoiceCommand Application"
|
||||
HKCR,Speech.VoiceCommand\Clsid,,,{A26D7620-6FA0-11ce-A166-00AA004CD65C}
|
||||
HKCR,Speech.VoiceCommand.1,,,"VCmd Application"
|
||||
HKCR,Speech.VoiceCommand.1\Clsid,,,{A26D7620-6FA0-11ce-A166-00AA004CD65C}
|
||||
HKCR,TypeLib\{A26D7621-6FA0-11ce-A166-00AA004CD65C}
|
||||
HKCR,TypeLib\{A26D7621-6FA0-11ce-A166-00AA004CD65C}\1.0,,,"Voice Command Object Library"
|
||||
HKCR,TypeLib\{A26D7621-6FA0-11ce-A166-00AA004CD65C}\1.0\HELPDIR
|
||||
HKCR,TypeLib\{A26D7621-6FA0-11ce-A166-00AA004CD65C}\1.0\409\win32,,,%49000%\vcauto.tlb
|
||||
HKCR,Interface\{A26D7622-6FA0-11ce-A166-00AA004CD65C},,,IVCmdAuto
|
||||
HKCR,Interface\{A26D7622-6FA0-11ce-A166-00AA004CD65C}\TypeLib,,,{A26D7621-6FA0-11ce-A166-00AA004CD65C}
|
||||
HKCR,Interface\{A26D7622-6FA0-11ce-A166-00AA004CD65C}\ProxyStubClsid,,,{00020424-0000-0000-C000-000000000046}
|
||||
HKCR,Interface\{A26D7622-6FA0-11ce-A166-00AA004CD65C}\ProxyStubClsid32,,,{00020424-0000-0000-C000-000000000046}
|
||||
HKCR,Interface\{A26D7623-6FA0-11ce-A166-00AA004CD65C},,,IVCmdMenu
|
||||
HKCR,Interface\{A26D7623-6FA0-11ce-A166-00AA004CD65C}\TypeLib,,,{A26D7621-6FA0-11ce-A166-00AA004CD65C}
|
||||
HKCR,Interface\{A26D7623-6FA0-11ce-A166-00AA004CD65C}\ProxyStubClsid,,,{00020424-0000-0000-C000-000000000046}
|
||||
HKCR,Interface\{A26D7623-6FA0-11ce-A166-00AA004CD65C}\ProxyStubClsid32,,,{00020424-0000-0000-C000-000000000046}
|
||||
HKCR,Speech.VoiceText,,,"VoiceText Application"
|
||||
HKCR,Speech.VoiceText\Clsid,,,{FF2C7A52-78F9-11ce-B762-00AA004CD65C}
|
||||
HKCR,Speech.VoiceText.1,,,"VCmd Application"
|
||||
HKCR,Speech.VoiceText.1\Clsid,,,{FF2C7A52-78F9-11ce-B762-00AA004CD65C}
|
||||
HKCR,TypeLib\{FF2C7A51-78F9-11ce-B762-00AA004CD65C}
|
||||
HKCR,TypeLib\{FF2C7A51-78F9-11ce-B762-00AA004CD65C}\1.0,,,"Voice Text Object Library"
|
||||
HKCR,TypeLib\{FF2C7A51-78F9-11ce-B762-00AA004CD65C}\1.0\HELPDIR
|
||||
HKCR,TypeLib\{FF2C7A51-78F9-11ce-B762-00AA004CD65C}\1.0\409\win32,,,%49000%\vtxtauto.tlb
|
||||
HKCR,Interface\{FF2C7A50-78F9-11ce-B762-00AA004CD65C},,,IVTxtAuto
|
||||
HKCR,Interface\{FF2C7A50-78F9-11ce-B762-00AA004CD65C}\TypeLib,,,{FF2C7A51-78F9-11ce-B762-00AA004CD65C}
|
||||
HKCR,Interface\{FF2C7A50-78F9-11ce-B762-00AA004CD65C}\ProxyStubClsid,,,{00020424-0000-0000-C000-000000000046}
|
||||
HKCR,Interface\{FF2C7A50-78F9-11ce-B762-00AA004CD65C}\ProxyStubClsid32,,,{00020424-0000-0000-C000-000000000046}
|
||||
|
||||
HKCR,Interface\{CCFD7A60-604D-101B-9926-00AA003CFC2C},,,IVCmdNotifySinkW
|
||||
HKCR,Interface\{CCFD7A60-604D-101B-9926-00AA003CFC2C}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{80B25CC0-5540-11b9-C000-5611722E1D15},,,IVCmdNotifySinkA
|
||||
HKCR,Interface\{80B25CC0-5540-11b9-C000-5611722E1D15}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{D3CC0820-604D-101B-9926-00AA003CFC2C},,,IVCmdEnumW
|
||||
HKCR,Interface\{D3CC0820-604D-101B-9926-00AA003CFC2C}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{E86F9540-DCA2-11CD-A166-00AA004CD65C},,,IVCmdEnumA
|
||||
HKCR,Interface\{E86F9540-DCA2-11CD-A166-00AA004CD65C}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{DAC54F60-604D-101B-9926-00AA003CFC2C},,,IVCmdMenuW
|
||||
HKCR,Interface\{DAC54F60-604D-101B-9926-00AA003CFC2C}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{746141E0-5543-11b9-C000-5611722E1D15},,,IVCmdMenuA
|
||||
HKCR,Interface\{746141E0-5543-11b9-C000-5611722E1D15}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{E0DCC220-604D-101B-9926-00AA003CFC2C},,,IVoiceCommandW
|
||||
HKCR,Interface\{E0DCC220-604D-101B-9926-00AA003CFC2C}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{C63A2B30-5543-11b9-C000-5611722E1D15},,,IVoiceCommandA
|
||||
HKCR,Interface\{C63A2B30-5543-11b9-C000-5611722E1D15}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{D981C420-6053-101B-9926-00AA003CFC2C},,,IVCmdMenuSetW
|
||||
HKCR,Interface\{D981C420-6053-101B-9926-00AA003CFC2C}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{AEB2A680-5544-11b9-C000-5611722E1D15},,,IVCmdMenuSetA
|
||||
HKCR,Interface\{AEB2A680-5544-11b9-C000-5611722E1D15}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{E5F24680-6053-101B-9926-00AA003CFC2C},,,IVCmdAttributesW
|
||||
HKCR,Interface\{E5F24680-6053-101B-9926-00AA003CFC2C}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{FFF5DF80-5544-11b9-C000-5611722E1D15},,,IVCmdAttributesA
|
||||
HKCR,Interface\{FFF5DF80-5544-11b9-C000-5611722E1D15}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{EE39B8A0-6053-101B-9926-00AA003CFC2C},,,IVCmdDialogsW
|
||||
HKCR,Interface\{EE39B8A0-6053-101B-9926-00AA003CFC2C}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{AA8FE260-5545-11b9-C000-5611722E1D15},,,IVCmdDialogsA
|
||||
HKCR,Interface\{AA8FE260-5545-11b9-C000-5611722E1D15}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{FD3A2430-E090-11cd-A166-00AA004CD65C},,,IVMsgNotifySinkW
|
||||
HKCR,Interface\{FD3A2430-E090-11cd-A166-00AA004CD65C}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{D2C840E0-E092-11cd-A166-00AA004CD65C},,,IVMsgNotifySinkA
|
||||
HKCR,Interface\{D2C840E0-E092-11cd-A166-00AA004CD65C}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{C4FE8740-E093-11cd-A166-00AA004CD65C},,,IVoiceMessageW
|
||||
HKCR,Interface\{C4FE8740-E093-11cd-A166-00AA004CD65C}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{E1B7A180-E093-11cd-A166-00AA004CD65C},,,IVoiceMessageA
|
||||
HKCR,Interface\{E1B7A180-E093-11cd-A166-00AA004CD65C}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{6A8D6140-E095-11cd-A166-00AA004CD65C},,,IVMsgAttributesW
|
||||
HKCR,Interface\{6A8D6140-E095-11cd-A166-00AA004CD65C}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{8BE9CC30-E095-11cd-A166-00AA004CD65C},,,IVMsgAttributesA
|
||||
HKCR,Interface\{8BE9CC30-E095-11cd-A166-00AA004CD65C}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{D6469210-E095-11cd-A166-00AA004CD65C},,,IVMsgDialogsW
|
||||
HKCR,Interface\{D6469210-E095-11cd-A166-00AA004CD65C}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{E8F6FA20-E095-11cd-A166-00AA004CD65C},,,IVMsgDialogsA
|
||||
HKCR,Interface\{E8F6FA20-E095-11cd-A166-00AA004CD65C}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{2F440FB4-CE01-11cf-B234-00AA00A215ED},,,IVCmdNotifySinkExW
|
||||
HKCR,Interface\{2F440FB4-CE01-11cf-B234-00AA00A215ED}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{2F440FB8-CE01-11cf-B234-00AA00A215ED},,,IVCmdNotifySinkExA
|
||||
HKCR,Interface\{2F440FB8-CE01-11cf-B234-00AA00A215ED}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
|
||||
HKCR,Interface\{68A33AA0-44CD-101B-90A8-00AA003E4B50},,,ISRAttributesW
|
||||
HKCR,Interface\{68A33AA0-44CD-101B-90A8-00AA003E4B50}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{2F26B9C1-DB31-11CD-B3CA-00AA0047BA4F},,,ISRAttributesA
|
||||
HKCR,Interface\{2F26B9C1-DB31-11CD-B3CA-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{F106BFA0-C743-11CD-80E5-00AA003E4B50},,,ISRGramNotifySinkW
|
||||
HKCR,Interface\{F106BFA0-C743-11CD-80E5-00AA003E4B50}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{EFEEA350-CE5E-11CD-9D96-00AA002FC7C9},,,ISRGramNotifySinkA
|
||||
HKCR,Interface\{EFEEA350-CE5E-11CD-9D96-00AA002FC7C9}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{090CD9B0-DA1A-11CD-B3CA-00AA0047BA4F},,,ISRNotifySink
|
||||
HKCR,Interface\{090CD9B0-DA1A-11CD-B3CA-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{9B445332-E39F-11d1-BED7-006008317CE8},,,ISRNotifySink2
|
||||
HKCR,Interface\{9B445332-E39F-11d1-BED7-006008317CE8}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{B9BD3860-44DB-101B-90A8-00AA003E4B50},,,ISRCentralW
|
||||
HKCR,Interface\{B9BD3860-44DB-101B-90A8-00AA003E4B50}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{2F26B9C2-DB31-11CD-B3CA-00AA0047BA4F},,,ISRCentralA
|
||||
HKCR,Interface\{2F26B9C2-DB31-11CD-B3CA-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{BCFB4C60-44DB-101B-90A8-00AA003E4B50},,,ISRDialogsW
|
||||
HKCR,Interface\{BCFB4C60-44DB-101B-90A8-00AA003E4B50}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{05EB6C60-DBAB-11CD-B3CA-00AA0047BA4F},,,ISRDialogsA
|
||||
HKCR,Interface\{05EB6C60-DBAB-11CD-B3CA-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{9B445330-E39F-11d1-BED7-006008317CE8},,,ISRDialogs2W
|
||||
HKCR,Interface\{9B445330-E39F-11d1-BED7-006008317CE8}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{9B445331-E39F-11d1-BED7-006008317CE8},,,ISRDialogs2A
|
||||
HKCR,Interface\{9B445331-E39F-11d1-BED7-006008317CE8}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{BFA9F1A0-44DB-101B-90A8-00AA003E4B50},,,ISREnumW
|
||||
HKCR,Interface\{BFA9F1A0-44DB-101B-90A8-00AA003E4B50}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{05EB6C61-DBAB-11CD-B3CA-00AA0047BA4F},,,ISREnumA
|
||||
HKCR,Interface\{05EB6C61-DBAB-11CD-B3CA-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{C2835060-44DB-101B-90A8-00AA003E4B50},,,ISRFindW
|
||||
HKCR,Interface\{C2835060-44DB-101B-90A8-00AA003E4B50}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{05EB6C62-DBAB-11CD-B3CA-00AA0047BA4F},,,ISRFindA
|
||||
HKCR,Interface\{05EB6C62-DBAB-11CD-B3CA-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{E8C3E160-C743-11CD-80E5-00AA003E4B50},,,ISRGramCommonW
|
||||
HKCR,Interface\{E8C3E160-C743-11CD-80E5-00AA003E4B50}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{05EB6C63-DBAB-11CD-B3CA-00AA0047BA4F},,,ISRGramCommonA
|
||||
HKCR,Interface\{05EB6C63-DBAB-11CD-B3CA-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{ECC0B180-C743-11CD-80E5-00AA003E4B50},,,ISRGramCFGW
|
||||
HKCR,Interface\{ECC0B180-C743-11CD-80E5-00AA003E4B50}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{05EB6C64-DBAB-11CD-B3CA-00AA0047BA4F},,,ISRGramCFGA
|
||||
HKCR,Interface\{05EB6C64-DBAB-11CD-B3CA-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{090CD9A3-DA1A-11CD-B3CA-00AA0047BA4F},,,ISRGramDictationW
|
||||
HKCR,Interface\{090CD9A3-DA1A-11CD-B3CA-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{05EB6C65-DBAB-11CD-B3CA-00AA0047BA4F},,,ISRGramDictationA
|
||||
HKCR,Interface\{05EB6C65-DBAB-11CD-B3CA-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{090CD9A4-DA1A-11CD-B3CA-00AA0047BA4F},,,ISRGramInsertionGUI
|
||||
HKCR,Interface\{090CD9A4-DA1A-11CD-B3CA-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{090CD9A5-DA1A-11CD-B3CA-00AA0047BA4F},,,ISRResBasicW
|
||||
HKCR,Interface\{090CD9A5-DA1A-11CD-B3CA-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{05EB6C66-DBAB-11CD-B3CA-00AA0047BA4F},,,ISRResBasicA
|
||||
HKCR,Interface\{05EB6C66-DBAB-11CD-B3CA-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{090CD9A6-DA1A-11CD-B3CA-00AA0047BA4F},,,ISRResMerge
|
||||
HKCR,Interface\{090CD9A6-DA1A-11CD-B3CA-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{090CD9A7-DA1A-11CD-B3CA-00AA0047BA4F},,,ISRResAudio
|
||||
HKCR,Interface\{090CD9A7-DA1A-11CD-B3CA-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{aad74c30-4b02-11d1-b792-0060979841b4},,,ISRResAudioEx
|
||||
HKCR,Interface\{aad74c30-4b02-11d1-b792-0060979841b4}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{090CD9A8-DA1A-11CD-B3CA-00AA0047BA4F},,,ISRResCorrectionW
|
||||
HKCR,Interface\{090CD9A8-DA1A-11CD-B3CA-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{05EB6C67-DBAB-11CD-B3CA-00AA0047BA4F},,,ISRResCorrectionA
|
||||
HKCR,Interface\{05EB6C67-DBAB-11CD-B3CA-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{090CD9A9-DA1A-11CD-B3CA-00AA0047BA4F},,,ISRResEval
|
||||
HKCR,Interface\{090CD9A9-DA1A-11CD-B3CA-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{090CD9AA-DA1A-11CD-B3CA-00AA0047BA4F},,,ISRResGraphW
|
||||
HKCR,Interface\{090CD9AA-DA1A-11CD-B3CA-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{05EB6C68-DBAB-11CD-B3CA-00AA0047BA4F},,,ISRResGraphA
|
||||
HKCR,Interface\{05EB6C68-DBAB-11CD-B3CA-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{be8f63a0-b915-11d1-b7bc-0060979841b4},,,ISRResGraphEx
|
||||
HKCR,Interface\{be8f63a0-b915-11d1-b7bc-0060979841b4}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{090CD9AB-DA1A-11CD-B3CA-00AA0047BA4F},,,ISRResMemory
|
||||
HKCR,Interface\{090CD9AB-DA1A-11CD-B3CA-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{090CD9AC-DA1A-11CD-B3CA-00AA0047BA4F},,,ISRResModifyGUI
|
||||
HKCR,Interface\{090CD9AC-DA1A-11CD-B3CA-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{090CD9AD-DA1A-11CD-B3CA-00AA0047BA4F},,,ISRResSpeakerW
|
||||
HKCR,Interface\{090CD9AD-DA1A-11CD-B3CA-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{05EB6C69-DBAB-11CD-B3CA-00AA0047BA4F},,,ISRResSpeakerA
|
||||
HKCR,Interface\{05EB6C69-DBAB-11CD-B3CA-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{9B445333-E39F-11d1-BED7-006008317CE8},,,ISRSpeakerW
|
||||
HKCR,Interface\{9B445333-E39F-11d1-BED7-006008317CE8}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{9B445334-E39F-11d1-BED7-006008317CE8},,,ISRSpeakerA
|
||||
HKCR,Interface\{9B445334-E39F-11d1-BED7-006008317CE8}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{090CD9AE-DA1A-11CD-B3CA-00AA0047BA4F},,,ISRSpeaker2W
|
||||
HKCR,Interface\{090CD9AE-DA1A-11CD-B3CA-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{090CD9AF-DA1A-11CD-B3CA-00AA0047BA4F},,,ISRSpeaker2A
|
||||
HKCR,Interface\{090CD9AF-DA1A-11CD-B3CA-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{E97F05C0-81B3-11ce-B763-00AA004CD65C},,,IEnumSRShareW
|
||||
HKCR,Interface\{E97F05C0-81B3-11ce-B763-00AA004CD65C}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{E97F05C1-81B3-11ce-B763-00AA004CD65C},,,IEnumSRShareA
|
||||
HKCR,Interface\{E97F05C1-81B3-11ce-B763-00AA004CD65C}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{0B37F1E0-B8DE-11cf-B22E-00AA00A215ED},,,ISRResScores
|
||||
HKCR,Interface\{0B37F1E0-B8DE-11cf-B22E-00AA00A215ED}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{1D59DED1-E367-11d1-BED7-006008317CE8},,,IAttributesW
|
||||
HKCR,Interface\{1D59DED1-E367-11d1-BED7-006008317CE8}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{1D59DED2-E367-11d1-BED7-006008317CE8},,,IAttributesA
|
||||
HKCR,Interface\{1D59DED2-E367-11d1-BED7-006008317CE8}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{090CD9A2-DA1A-11CD-B3CA-00AA0047BA4F},,,ILexPronounceW
|
||||
HKCR,Interface\{090CD9A2-DA1A-11CD-B3CA-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{2F26B9C0-DB31-11CD-B3CA-00AA0047BA4F},,,ILexPronounceA
|
||||
HKCR,Interface\{2F26B9C0-DB31-11CD-B3CA-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{D6E56341-B3EA-11d1-AFA5-0000F81E880D},,,ILexPronounce2W
|
||||
HKCR,Interface\{D6E56341-B3EA-11d1-AFA5-0000F81E880D}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{D6E56342-B3EA-11d1-AFA5-0000F81E880D},,,ILexPronounce2A
|
||||
HKCR,Interface\{D6E56342-B3EA-11d1-AFA5-0000F81E880D}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{9B445335-E39F-11d1-BED7-006008317CE8},,,ISpchErrorW
|
||||
HKCR,Interface\{9B445335-E39F-11d1-BED7-006008317CE8}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{9B445336-E39F-11d1-BED7-006008317CE8},,,ISpchErrorA
|
||||
HKCR,Interface\{9B445336-E39F-11d1-BED7-006008317CE8}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
|
||||
HKCR,Interface\{05EB6C6A-DBAB-11CD-B3CA-00AA0047BA4F},,,ITTSCentralA
|
||||
HKCR,Interface\{05EB6C6A-DBAB-11CD-B3CA-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{28016060-4A47-101B-931A-00AA0047BA4F},,,ITTSCentralW
|
||||
HKCR,Interface\{28016060-4A47-101B-931A-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{0FD6E2A1-E77D-11CD-B3CA-00AA0047BA4F},,,ITTSAttributesA
|
||||
HKCR,Interface\{0FD6E2A1-E77D-11CD-B3CA-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{1287A280-4A47-101B-931A-00AA0047BA4F},,,ITTSAttributesW
|
||||
HKCR,Interface\{1287A280-4A47-101B-931A-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{e4963d40-c743-11cd-80e5-00aa003e4b50},,,ITTSBufNotifySink
|
||||
HKCR,Interface\{e4963d40-c743-11cd-80e5-00aa003e4b50}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{05EB6C6B-DBAB-11CD-B3CA-00AA0047BA4F},,,ITTSDialogsA
|
||||
HKCR,Interface\{05EB6C6B-DBAB-11CD-B3CA-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{47F59D00-4A47-101B-931A-00AA0047BA4F},,,ITTSDialogsW
|
||||
HKCR,Interface\{47F59D00-4A47-101B-931A-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{05EB6C6D-DBAB-11CD-B3CA-00AA0047BA4F},,,ITTSEnumA
|
||||
HKCR,Interface\{05EB6C6D-DBAB-11CD-B3CA-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{6B837B20-4A47-101B-931A-00AA0047BA4F},,,ITTSEnumW
|
||||
HKCR,Interface\{6B837B20-4A47-101B-931A-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{05EB6C6E-DBAB-11CD-B3CA-00AA0047BA4F},,,ITTSFindA
|
||||
HKCR,Interface\{05EB6C6E-DBAB-11CD-B3CA-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{7AA42960-4A47-101B-931A-00AA0047BA4F},,,ITTSFindW
|
||||
HKCR,Interface\{7AA42960-4A47-101B-931A-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{05EB6C6F-DBAB-11CD-B3CA-00AA0047BA4F},,,ITTSNotifySinkA
|
||||
HKCR,Interface\{05EB6C6F-DBAB-11CD-B3CA-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{C0FA8F40-4A46-101B-931A-00AA0047BA4F},,,ITTSNotifySinkW
|
||||
HKCR,Interface\{C0FA8F40-4A46-101B-931A-00AA0047BA4F}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{599F77E2-E42E-11d1-BED8-006008317CE8},,,ITTSNotifySink2A
|
||||
HKCR,Interface\{599F77E2-E42E-11d1-BED8-006008317CE8}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{599F77E1-E42E-11d1-BED8-006008317CE8},,,ITTSNotifySink2W
|
||||
HKCR,Interface\{599F77E1-E42E-11d1-BED8-006008317CE8}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{F546B340-C743-11cd-80E5-00AA003E4B50},,,IAudio
|
||||
HKCR,Interface\{F546B340-C743-11cd-80E5-00AA003E4B50}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{BC06A220-C743-11cd-80E5-00AA003E4B50},,,IAudioSource
|
||||
HKCR,Interface\{BC06A220-C743-11cd-80E5-00AA003E4B50}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{2EC34DA0-C743-11cd-80E5-00AA003E4B50},,,IAudioDest
|
||||
HKCR,Interface\{2EC34DA0-C743-11cd-80E5-00AA003E4B50}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{C0BD9A80-C743-11cd-80E5-00AA003E4B50},,,IAudioSourceNotifySink
|
||||
HKCR,Interface\{C0BD9A80-C743-11cd-80E5-00AA003E4B50}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{ACB08C00-C743-11cd-80E5-00AA003E4B50},,,IAudioDestNotifySink
|
||||
HKCR,Interface\{ACB08C00-C743-11cd-80E5-00AA003E4B50}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{492FE490-51E7-11b9-C000-FED6CBA3B1A9},,,IAudioFileNotifySink
|
||||
HKCR,Interface\{492FE490-51E7-11b9-C000-FED6CBA3B1A9}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{FD7C2320-3D6D-11b9-C000-FED6CBA3B1A9},,,IAudioFile
|
||||
HKCR,Interface\{FD7C2320-3D6D-11b9-C000-FED6CBA3B1A9}\ProxyStubClsid32,,,{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
|
||||
HKCR,Interface\{88AD7DC3-67D5-11cf-9B8B-08005AFC3A41},,,IVoiceDictationW
|
||||
HKCR,Interface\{88AD7DC3-67D5-11cf-9B8B-08005AFC3A41}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{88AD7DC4-67D5-11cf-9B8B-08005AFC3A41},,,IVoiceDictationA
|
||||
HKCR,Interface\{88AD7DC4-67D5-11cf-9B8B-08005AFC3A41}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{6D62B3A0-6893-11cf-9B8B-08005AFC3A41},,,IVDctTextW
|
||||
HKCR,Interface\{6D62B3A0-6893-11cf-9B8B-08005AFC3A41}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{6D62B3A1-6893-11cf-9B8B-08005AFC3A41},,,IVDctTextA
|
||||
HKCR,Interface\{6D62B3A1-6893-11cf-9B8B-08005AFC3A41}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{238004E1-F0C4-11d1-BED9-006008317CE8},,,IVDctText2W
|
||||
HKCR,Interface\{238004E1-F0C4-11d1-BED9-006008317CE8}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{238004E2-F0C4-11d1-BED9-006008317CE8},,,IVDctText2A
|
||||
HKCR,Interface\{238004E2-F0C4-11d1-BED9-006008317CE8}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{238004E3-F0C4-11d1-BED9-006008317CE8},,,IVDctTextCache
|
||||
HKCR,Interface\{238004E3-F0C4-11d1-BED9-006008317CE8}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{88AD7DC5-67D5-11cf-9B8B-08005AFC3A41},,,IVDctAttributesW
|
||||
HKCR,Interface\{88AD7DC5-67D5-11cf-9B8B-08005AFC3A41}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{88AD7DC6-67D5-11cf-9B8B-08005AFC3A41},,,IVDctAttributesA
|
||||
HKCR,Interface\{88AD7DC6-67D5-11cf-9B8B-08005AFC3A41}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{88AD7DC7-67D5-11cf-9B8B-08005AFC3A41},,,IVDctDialogsW
|
||||
HKCR,Interface\{88AD7DC7-67D5-11cf-9B8B-08005AFC3A41}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{88AD7DC8-67D5-11cf-9B8B-08005AFC3A41},,,IVDctDialogsA
|
||||
HKCR,Interface\{88AD7DC8-67D5-11cf-9B8B-08005AFC3A41}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{5FEB8800-67D5-11cf-9B8B-08005AFC3A41},,,IVDctNotifySinkW
|
||||
HKCR,Interface\{5FEB8800-67D5-11cf-9B8B-08005AFC3A41}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{88AD7DC0-67D5-11cf-9B8B-08005AFC3A41},,,IVDctNotifySinkA
|
||||
HKCR,Interface\{88AD7DC0-67D5-11cf-9B8B-08005AFC3A41}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{599F77E3-E42E-11d1-BED8-006008317CE8},,,IVDctNotifySink2W
|
||||
HKCR,Interface\{599F77E3-E42E-11d1-BED8-006008317CE8}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{599F77E4-E42E-11d1-BED8-006008317CE8},,,IVDctNotifySink2A
|
||||
HKCR,Interface\{599F77E4-E42E-11d1-BED8-006008317CE8}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{8953F1A0-7E80-11cf-8D15-00A0C9034A7E},,,IVDctGUI
|
||||
HKCR,Interface\{8953F1A0-7E80-11cf-8D15-00A0C9034A7E}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{A02C2CA0-AE50-11cf-833A-00AA00A21A29},,,IVDctCommandsW
|
||||
HKCR,Interface\{A02C2CA0-AE50-11cf-833A-00AA00A21A29}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{A02C2CA1-AE50-11cf-833A-00AA00A21A29},,,IVDctCommandsA
|
||||
HKCR,Interface\{A02C2CA1-AE50-11cf-833A-00AA00A21A29}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{A02C2CA2-AE50-11cf-833A-00AA00A21A29},,,IVDctGlossaryW
|
||||
HKCR,Interface\{A02C2CA2-AE50-11cf-833A-00AA00A21A29}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{A02C2CA3-AE50-11cf-833A-00AA00A21A29},,,IVDctGlossaryA
|
||||
HKCR,Interface\{A02C2CA3-AE50-11cf-833A-00AA00A21A29}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{90A84EA0-6E51-11D0-9BC2-08005AFC3A41},,,IVDctInvTextNormW
|
||||
HKCR,Interface\{90A84EA0-6E51-11D0-9BC2-08005AFC3A41}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{90A84EA1-6E51-11D0-9BC2-08005AFC3A41},,,IVDctInvTextNormA
|
||||
HKCR,Interface\{90A84EA1-6E51-11D0-9BC2-08005AFC3A41}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{D4E3F8E0-6521-11d1-8C35-006097DF5D01},,,IVDctCommandsBuiltInW
|
||||
HKCR,Interface\{D4E3F8E0-6521-11d1-8C35-006097DF5D01}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{D4E3F8E1-6521-11d1-8C35-006097DF5D01},,,IVDctCommandsAppW
|
||||
HKCR,Interface\{D4E3F8E1-6521-11d1-8C35-006097DF5D01}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{8763AFD1-7ADE-11d1-BEA7-006008317CE8},,,IVDctCommandsBuiltInA
|
||||
HKCR,Interface\{8763AFD1-7ADE-11d1-BEA7-006008317CE8}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{8763AFD2-7ADE-11d1-BEA7-006008317CE8},,,IVDctCommandsAppA
|
||||
HKCR,Interface\{8763AFD2-7ADE-11d1-BEA7-006008317CE8}\ProxyStubClsid32,,,{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
|
||||
; for uninstall
|
||||
HKLM,Software\Microsoft\SpeechAPI,InstallDir,,%49000%
|
||||
|
||||
; controls
|
||||
HKCR,CLSID\{53961A01-459B-11d1-BE77-006008317CE8},,,"Yes/No Control"
|
||||
HKCR,CLSID\{53961A01-459B-11d1-BE77-006008317CE8}\InprocServer32,,,%49000%\spchtel.dll
|
||||
HKCR,CLSID\{53961A01-459B-11d1-BE77-006008317CE8}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKLM,SOFTWARE\Microsoft\SpeechAPI\TelephonyControls,"Yes/No Control",,"{53961A01-459B-11d1-BE77-006008317CE8}"
|
||||
HKCR,CLSID\{53961A02-459B-11d1-BE77-006008317CE8},,,"Extension Control"
|
||||
HKCR,CLSID\{53961A02-459B-11d1-BE77-006008317CE8}\InprocServer32,,,%49000%\spchtel.dll
|
||||
HKCR,CLSID\{53961A02-459B-11d1-BE77-006008317CE8}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKLM,SOFTWARE\Microsoft\SpeechAPI\TelephonyControls,"Extension Control",,"{53961A02-459B-11d1-BE77-006008317CE8}"
|
||||
HKCR,CLSID\{53961A03-459B-11d1-BE77-006008317CE8},,,"Phone Number Control"
|
||||
HKCR,CLSID\{53961A03-459B-11d1-BE77-006008317CE8}\InprocServer32,,,%49000%\spchtel.dll
|
||||
HKCR,CLSID\{53961A03-459B-11d1-BE77-006008317CE8}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKLM,SOFTWARE\Microsoft\SpeechAPI\TelephonyControls,"Phone Number Control",,"{53961A03-459B-11d1-BE77-006008317CE8}"
|
||||
HKCR,CLSID\{53961A04-459B-11d1-BE77-006008317CE8},,,"Grammar Control"
|
||||
HKCR,CLSID\{53961A04-459B-11d1-BE77-006008317CE8}\InprocServer32,,,%49000%\spchtel.dll
|
||||
HKCR,CLSID\{53961A04-459B-11d1-BE77-006008317CE8}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKLM,SOFTWARE\Microsoft\SpeechAPI\TelephonyControls,"Grammar Control",,"{53961A04-459B-11d1-BE77-006008317CE8}"
|
||||
HKCR,CLSID\{53961A05-459B-11d1-BE77-006008317CE8},,,"Date Control"
|
||||
HKCR,CLSID\{53961A05-459B-11d1-BE77-006008317CE8}\InprocServer32,,,%49000%\spchtel.dll
|
||||
HKCR,CLSID\{53961A05-459B-11d1-BE77-006008317CE8}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKLM,SOFTWARE\Microsoft\SpeechAPI\TelephonyControls,"Date Control",,"{53961A05-459B-11d1-BE77-006008317CE8}"
|
||||
HKCR,CLSID\{53961A06-459B-11d1-BE77-006008317CE8},,,"Time Control"
|
||||
HKCR,CLSID\{53961A06-459B-11d1-BE77-006008317CE8}\InprocServer32,,,%49000%\spchtel.dll
|
||||
HKCR,CLSID\{53961A06-459B-11d1-BE77-006008317CE8}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKLM,SOFTWARE\Microsoft\SpeechAPI\TelephonyControls,"Time Control",,"{53961A06-459B-11d1-BE77-006008317CE8}"
|
||||
HKCR,CLSID\{53961A07-459B-11d1-BE77-006008317CE8},,,"Record Control"
|
||||
HKCR,CLSID\{53961A07-459B-11d1-BE77-006008317CE8}\InprocServer32,,,%49000%\spchtel.dll
|
||||
HKCR,CLSID\{53961A07-459B-11d1-BE77-006008317CE8}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKLM,SOFTWARE\Microsoft\SpeechAPI\TelephonyControls,"Record Control",,"{53961A07-459B-11d1-BE77-006008317CE8}"
|
||||
HKCR,CLSID\{53961A08-459B-11d1-BE77-006008317CE8},,,"Spelling Control"
|
||||
HKCR,CLSID\{53961A08-459B-11d1-BE77-006008317CE8}\InprocServer32,,,%49000%\spchtel.dll
|
||||
HKCR,CLSID\{53961A08-459B-11d1-BE77-006008317CE8}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKLM,SOFTWARE\Microsoft\SpeechAPI\TelephonyControls,"Spelling Control",,"{53961A08-459B-11d1-BE77-006008317CE8}"
|
||||
HKCR,CLSID\{53961A09-459B-11d1-BE77-006008317CE8},,,"Name Control"
|
||||
HKCR,CLSID\{53961A09-459B-11d1-BE77-006008317CE8}\InprocServer32,,,%49000%\spchtel.dll
|
||||
HKCR,CLSID\{53961A09-459B-11d1-BE77-006008317CE8}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKLM,SOFTWARE\Microsoft\SpeechAPI\TelephonyControls,"Name Control",,"{53961A09-459B-11d1-BE77-006008317CE8}"
|
||||
|
||||
HKLM,SOFTWARE\Microsoft\SpeechAPI,"PronMailCompany",,"Microsoft"
|
||||
HKLM,SOFTWARE\Microsoft\SpeechAPI,"PronMailAddRess",,"SpchData@Microsoft.com"
|
||||
|
||||
; ActiveX controls
|
||||
;DirectSR
|
||||
HKCR,CLSID\{4E3D9D1F-0C63-11D1-8BFB-0060081841DE},,,"DirectSR Class"
|
||||
HKCR,CLSID\{4E3D9D1F-0C63-11D1-8BFB-0060081841DE}\InprocServer32,,,%49000%\Xlisten.dll
|
||||
HKCR,CLSID\{4E3D9D1F-0C63-11D1-8BFB-0060081841DE}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKCR,CLSID\{4E3D9D1F-0C63-11D1-8BFB-0060081841DE}\ProgId,,,"DirectSR.DirectSR.1"
|
||||
HKCR,CLSID\{4E3D9D1F-0C63-11D1-8BFB-0060081841DE}\ToolboxBitmap32,,,"%49000%\Xlisten.dll,1"
|
||||
HKCR,CLSID\{4E3D9D1F-0C63-11D1-8BFB-0060081841DE}\TypeLib,,,"{4E3D9D11-0C63-11D1-8BFB-0060081841DE}"
|
||||
HKCR,CLSID\{4E3D9D1F-0C63-11D1-8BFB-0060081841DE}\Version,,,"1.0"
|
||||
HKCR,CLSID\{4E3D9D1F-0C63-11D1-8BFB-0060081841DE}\VersionIndependendProgId,,,"DirectSR.DirectSR"
|
||||
HKCR,CLSID\{4E3D9D1F-0C63-11D1-8BFB-0060081841DE}\Control
|
||||
HKCR,CLSID\{4E3D9D1F-0C63-11D1-8BFB-0060081841DE}\Insertable
|
||||
HKCR,CLSID\{4E3D9D1F-0C63-11D1-8BFB-0060081841DE}\Programmable
|
||||
HKCR,CLSID\{4E3D9D1F-0C63-11D1-8BFB-0060081841DE}\MiscStatus
|
||||
HKCR,CLSID\{4E3D9D1F-0C63-11D1-8BFB-0060081841DE}\MiscStatus\1,,,"131473"
|
||||
HKCR,TypeLib\{4E3D9D11-0C63-11D1-8BFB-0060081841DE}
|
||||
HKCR,TypeLib\{4E3D9D11-0C63-11D1-8BFB-0060081841DE}\1.0,,,"Microsoft Direct Speech Recognition"
|
||||
HKCR,TypeLib\{4E3D9D11-0C63-11D1-8BFB-0060081841DE}\1.0\0\win32,,,"%49000%\Xlisten.dll"
|
||||
|
||||
;DirectSS
|
||||
HKCR,CLSID\{EEE78591-FE22-11D0-8BEF-0060081841DE},,,"DirectSS Class"
|
||||
HKCR,CLSID\{EEE78591-FE22-11D0-8BEF-0060081841DE}\InprocServer32,,,%49000%\XVoice.dll
|
||||
HKCR,CLSID\{EEE78591-FE22-11D0-8BEF-0060081841DE}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKCR,CLSID\{EEE78591-FE22-11D0-8BEF-0060081841DE}\ProgId,,,"DirectSS.DirectSS.1"
|
||||
HKCR,CLSID\{EEE78591-FE22-11D0-8BEF-0060081841DE}\ToolboxBitmap32,,,"%49000%\XVoice.dll,1"
|
||||
HKCR,CLSID\{EEE78591-FE22-11D0-8BEF-0060081841DE}\TypeLib,,,"{EEE78583-FE22-11D0-8BEF-0060081841DE}"
|
||||
HKCR,CLSID\{EEE78591-FE22-11D0-8BEF-0060081841DE}\Version,,,"1.0"
|
||||
HKCR,CLSID\{EEE78591-FE22-11D0-8BEF-0060081841DE}\VersionIndependendProgId,,,"DirectSS.DirectSS"
|
||||
HKCR,CLSID\{EEE78591-FE22-11D0-8BEF-0060081841DE}\Control
|
||||
HKCR,CLSID\{EEE78591-FE22-11D0-8BEF-0060081841DE}\Insertable
|
||||
HKCR,CLSID\{EEE78591-FE22-11D0-8BEF-0060081841DE}\Programmable
|
||||
HKCR,CLSID\{EEE78591-FE22-11D0-8BEF-0060081841DE}\MiscStatus
|
||||
HKCR,CLSID\{EEE78591-FE22-11D0-8BEF-0060081841DE}\MiscStatus\1,,,"131473"
|
||||
HKCR,TypeLib\{EEE78583-FE22-11D0-8BEF-0060081841DE}
|
||||
HKCR,TypeLib\{EEE78583-FE22-11D0-8BEF-0060081841DE}\1.0,,,"Microsoft Direct Text-to-Speech"
|
||||
HKCR,TypeLib\{EEE78583-FE22-11D0-8BEF-0060081841DE}\1.0\0\win32,,,"%49000%\XVoice.dll"
|
||||
|
||||
;Vcommand
|
||||
HKCR,CLSID\{66523042-35FE-11D1-8C4D-0060081841DE},,,"VCommand Class"
|
||||
HKCR,CLSID\{66523042-35FE-11D1-8C4D-0060081841DE}\InprocServer32,,,%49000%\Xcommand.dll
|
||||
HKCR,CLSID\{66523042-35FE-11D1-8C4D-0060081841DE}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKCR,CLSID\{66523042-35FE-11D1-8C4D-0060081841DE}\ProgId,,,"Vcommand.Vcommand.1"
|
||||
HKCR,CLSID\{66523042-35FE-11D1-8C4D-0060081841DE}\ToolboxBitmap32,,,"%49000%\Xcommand.dll,1"
|
||||
HKCR,CLSID\{66523042-35FE-11D1-8C4D-0060081841DE}\TypeLib,,,"{60462311-3373-11D1-8C43-0060081841DE}"
|
||||
HKCR,CLSID\{66523042-35FE-11D1-8C4D-0060081841DE}\Version,,,"1.0"
|
||||
HKCR,CLSID\{66523042-35FE-11D1-8C4D-0060081841DE}\VersionIndependendProgId,,,"Vcommand.Vcommand"
|
||||
HKCR,CLSID\{66523042-35FE-11D1-8C4D-0060081841DE}\Control
|
||||
HKCR,CLSID\{66523042-35FE-11D1-8C4D-0060081841DE}\Insertable
|
||||
HKCR,CLSID\{66523042-35FE-11D1-8C4D-0060081841DE}\Programmable
|
||||
HKCR,CLSID\{66523042-35FE-11D1-8C4D-0060081841DE}\MiscStatus
|
||||
HKCR,CLSID\{66523042-35FE-11D1-8C4D-0060081841DE}\MiscStatus\1,,,"131473"
|
||||
HKCR,TypeLib\{60462311-3373-11D1-8C43-0060081841DE}
|
||||
HKCR,TypeLib\{60462311-3373-11D1-8C43-0060081841DE}\1.0,,,"Microsoft Voice Commands"
|
||||
HKCR,TypeLib\{60462311-3373-11D1-8C43-0060081841DE}\1.0\0\win32,,,"%49000%\Xcommand.dll"
|
||||
|
||||
;Vdict
|
||||
HKCR,CLSID\{582C2191-4016-11D1-8C55-0060081841DE},,,"VDict Class"
|
||||
HKCR,CLSID\{582C2191-4016-11D1-8C55-0060081841DE}\InprocServer32,,,%49000%\Vdict.dll
|
||||
HKCR,CLSID\{582C2191-4016-11D1-8C55-0060081841DE}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKCR,CLSID\{582C2191-4016-11D1-8C55-0060081841DE}\ProgId,,,"Vdict.Vdict.1"
|
||||
HKCR,CLSID\{582C2191-4016-11D1-8C55-0060081841DE}\ToolboxBitmap32,,,"%49000%\Vdict.dll,1"
|
||||
HKCR,CLSID\{582C2191-4016-11D1-8C55-0060081841DE}\TypeLib,,,"{582C2183-4016-11D1-8C55-0060081841DE}"
|
||||
HKCR,CLSID\{582C2191-4016-11D1-8C55-0060081841DE}\Version,,,"1.0"
|
||||
HKCR,CLSID\{582C2191-4016-11D1-8C55-0060081841DE}\VersionIndependendProgId,,,"Vdict.Vdict"
|
||||
HKCR,CLSID\{582C2191-4016-11D1-8C55-0060081841DE}\Control
|
||||
HKCR,CLSID\{582C2191-4016-11D1-8C55-0060081841DE}\Insertable
|
||||
HKCR,CLSID\{582C2191-4016-11D1-8C55-0060081841DE}\Programmable
|
||||
HKCR,CLSID\{582C2191-4016-11D1-8C55-0060081841DE}\MiscStatus
|
||||
HKCR,CLSID\{582C2191-4016-11D1-8C55-0060081841DE}\MiscStatus\1,,,"131473"
|
||||
HKCR,TypeLib\{582C2183-4016-11D1-8C55-0060081841DE}
|
||||
HKCR,TypeLib\{582C2183-4016-11D1-8C55-0060081841DE}\1.0,,,"Microsoft Voice Dictation"
|
||||
HKCR,TypeLib\{582C2183-4016-11D1-8C55-0060081841DE}\1.0\0\win32,,,"%49000%\Vdict.dll"
|
||||
|
||||
;VText
|
||||
HKCR,CLSID\{2398E32F-5C6E-11D1-8C65-0060081841DE},,,"TextToSpeech Class"
|
||||
HKCR,CLSID\{2398E32F-5C6E-11D1-8C65-0060081841DE}\InprocServer32,,,%49000%\Vtext.dll
|
||||
HKCR,CLSID\{2398E32F-5C6E-11D1-8C65-0060081841DE}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKCR,CLSID\{2398E32F-5C6E-11D1-8C65-0060081841DE}\ProgId,,,"Vtext.Vtext.1"
|
||||
HKCR,CLSID\{2398E32F-5C6E-11D1-8C65-0060081841DE}\ToolboxBitmap32,,,"%49000%\Vtext.dll,1"
|
||||
HKCR,CLSID\{2398E32F-5C6E-11D1-8C65-0060081841DE}\TypeLib,,,"{2398E321-5C6E-11D1-8C65-0060081841DE}"
|
||||
HKCR,CLSID\{2398E32F-5C6E-11D1-8C65-0060081841DE}\Version,,,"1.0"
|
||||
HKCR,CLSID\{2398E32F-5C6E-11D1-8C65-0060081841DE}\VersionIndependendProgId,,,"Vtext.Vtext
|
||||
HKCR,CLSID\{2398E32F-5C6E-11D1-8C65-0060081841DE}\Control
|
||||
HKCR,CLSID\{2398E32F-5C6E-11D1-8C65-0060081841DE}\Insertable
|
||||
HKCR,CLSID\{2398E32F-5C6E-11D1-8C65-0060081841DE}\Programmable
|
||||
HKCR,CLSID\{2398E32F-5C6E-11D1-8C65-0060081841DE}\MiscStatus
|
||||
HKCR,CLSID\{2398E32F-5C6E-11D1-8C65-0060081841DE}\MiscStatus\1,,,"131473"
|
||||
HKCR,TypeLib\{2398E321-5C6E-11D1-8C65-0060081841DE}
|
||||
HKCR,TypeLib\{2398E321-5C6E-11D1-8C65-0060081841DE}\1.0,,,"Microsoft Voice Text"
|
||||
HKCR,TypeLib\{2398E321-5C6E-11D1-8C65-0060081841DE}\1.0\0\win32,,,"%49000%\Vtext.dll"
|
||||
|
||||
|
||||
;Xtel
|
||||
HKCR,CLSID\{FC9E740F-6058-11D1-8C66-0060081841DE},,,"Telephony Class"
|
||||
HKCR,CLSID\{FC9E740F-6058-11D1-8C66-0060081841DE}\InprocServer32,,,%49000%\Xtel.dll
|
||||
HKCR,CLSID\{FC9E740F-6058-11D1-8C66-0060081841DE}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKCR,CLSID\{FC9E740F-6058-11D1-8C66-0060081841DE}\ProgId,,,"Xtel.XTel.1"
|
||||
HKCR,CLSID\{FC9E740F-6058-11D1-8C66-0060081841DE}\ToolboxBitmap32,,,"%49000%\XTel.dll,1"
|
||||
HKCR,CLSID\{FC9E740F-6058-11D1-8C66-0060081841DE}\TypeLib,,,"{FC9E7401-6058-11D1-8C66-0060081841DE}"
|
||||
HKCR,CLSID\{FC9E740F-6058-11D1-8C66-0060081841DE}\Version,,,"1.0"
|
||||
HKCR,CLSID\{FC9E740F-6058-11D1-8C66-0060081841DE}f\VersionIndependendProgId,,,"Xtel.Xtel"
|
||||
HKCR,CLSID\{FC9E740F-6058-11D1-8C66-0060081841DE}\Control
|
||||
HKCR,CLSID\{FC9E740F-6058-11D1-8C66-0060081841DE}\Insertable
|
||||
HKCR,CLSID\{FC9E740F-6058-11D1-8C66-0060081841DE}\Programmable
|
||||
HKCR,CLSID\{FC9E740F-6058-11D1-8C66-0060081841DE}\MiscStatus
|
||||
HKCR,CLSID\{FC9E740F-6058-11D1-8C66-0060081841DE}\MiscStatus\1,,,"131473"
|
||||
HKCR,TypeLib\{FC9E7401-6058-11D1-8C66-0060081841DE}
|
||||
HKCR,TypeLib\{FC9E7401-6058-11D1-8C66-0060081841DE}\1.0,,,"Microsoft Telephony"
|
||||
HKCR,TypeLib\{FC9E7401-6058-11D1-8C66-0060081841DE}\1.0\0\win32,,,"%49000%\Xtel.dll"
|
||||
|
||||
; Wrapper DLL
|
||||
HKCR,CLSID\{0C7F3F20-8BAB-11d2-9432-00C04F8EF48F},,,"Downloadable Speech API"
|
||||
HKCR,CLSID\{0C7F3F20-8BAB-11d2-9432-00C04F8EF48F}\Control,,,
|
||||
HKCR,CLSID\{0C7F3F20-8BAB-11d2-9432-00C04F8EF48F}\InprocServer32,,,"%49000%\WrapSAPI.dll"
|
||||
HKCR,CLSID\{0C7F3F20-8BAB-11d2-9432-00C04F8EF48F}\InprocServer32,ThreadingModel,,Apartment
|
||||
HKCR,CLSID\{0C7F3F20-8BAB-11d2-9432-00C04F8EF48F}\MiscStatus,,,"0"
|
||||
HKCR,CLSID\{0C7F3F20-8BAB-11d2-9432-00C04F8EF48F}\MiscStatus\1,,,"132497"
|
||||
|
||||
; Work around issues with Dragon NS
|
||||
HKCR,CLSID\{05EB6C68-DBAB-11CD-B3CA-00AA0047BA4F}\InprocServer32
|
||||
HKCR,CLSID\{090CD9AA-DA1A-11CD-B3CA-00AA0047BA4F}\InprocServer32
|
||||
HKCR,CLSID\{090CD9A2-DA1A-11CD-B3CA-00AA0047BA4F}\InprocServer32
|
||||
HKCR,CLSID\{2F26B9C0-DB31-11CD-B3CA-00AA0047BA4F}\InprocServer32
|
||||
HKCR,CLSID\{090CD9AE-DA1A-11CD-B3CA-00AA0047BA4F}\InprocServer32
|
||||
HKCR,CLSID\{090CD9AF-DA1A-11CD-B3CA-00AA0047BA4F}\InprocServer32
|
||||
|
||||
; cache information, to work around bugs encountered in older engines
|
||||
HKLM,Software\Voice\TextToSpeech\Engine\{F063EDA0-8C65-11CF-8FC8-0020AF14F271},Dirty,1,1
|
||||
HKLM,Software\Voice\TextToSpeech\Engine\{1B6BF820-9299-101B-8A19-265D428C60FF},Dirty,1,1
|
||||
|
||||
[DelRegSection]
|
||||
HKCR,CLSID\{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,CLSID\{6D40D820-0BA7-11ce-A166-00AA004CD65C}
|
||||
HKCR,CLSID\{F1DC95A0-0BA7-11ce-A166-00AA004CD65C}
|
||||
HKCR,CLSID\{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,CLSID\{89F70C30-8636-11ce-B763-00AA004CD65C}
|
||||
HKCR,CLSID\{D67C0280-C743-11cd-80E5-00AA003E4B50}
|
||||
HKCR,CLSID\{CB96B400-C743-11cd-80E5-00AA003E4B50}
|
||||
HKCR,CLSID\{E02D16C0-C743-11cd-80E5-00AA003E4B50}
|
||||
HKCR,CLSID\{D24FE500-C743-11cd-80E5-00AA003E4B50}
|
||||
HKCR,CLSID\{D4023720-E4B9-11cf-8D56-00A0C9034A7E}
|
||||
HKCR,CLSID\{D4123720-E4B9-11cf-8D56-00A0C9034A7E}
|
||||
HKCR,CLSID\{A26D7620-6FA0-11ce-A166-00AA004CD65C}
|
||||
HKCR,CLSID\{FF2C7A52-78F9-11ce-B762-00AA004CD65C}
|
||||
HKCR,CLSID\{35522CA0-67CE-11cf-9B8B-08005AFC3A41}
|
||||
HKCR,CLSID\{554667BB-7213-11cf-B210-00AA00A215ED}
|
||||
HKCR,CLSID\{B9F11A90-90E3-11d0-8D77-00A0C9034A7E}
|
||||
HKCR,CLSID\{92655FB1-ADF9-11d1-BEB9-006008317CE8}
|
||||
HKCR,CLSID\{32C35401-D04F-11d0-99B3-00AA004CD65C}
|
||||
HKCR,CLSID\{B9F11A95-90E3-11d0-8D77-00A0C9034A7E}
|
||||
HKCR,CLSID\{B9F11A96-90E3-11d0-8D77-00A0C9034A7E}
|
||||
HKCR,CLSID\{D4523720-E4B9-11cf-8D56-00A0C9034A7E}
|
||||
HKCR,CLSID\{D4623720-E4B9-11cf-8D56-00A0C9034A7E}
|
||||
HKCR,CLSID\{B9F11A95-90E3-11d0-8D77-00A0C9034A7E}
|
||||
HKCR,CLSID\{B9F11A96-90E3-11d0-8D77-00A0C9034A7E}
|
||||
HKCR,CLSID\{70618F72-D1ED-11d0-8FAC-08002BE4E62A}
|
||||
HKCR,CLSID\{EFD0E6BA-DB5F-11d0-8FAC-08002BE4E62A}
|
||||
HKCR,CLSID\{B3613D9F-E26E-11d0-8FAC-08002BE4E62A}
|
||||
HKCR,CLSID\{B3613DA0-E26E-11d0-8FAC-08002BE4E62A}
|
||||
HKCR,CLSID\{2EC5A8A5-E65B-11d0-8FAC-08002BE4E62A}
|
||||
HKCR,CLSID\{2EC5A8A6-E65B-11d0-8FAC-08002BE4E62A}
|
||||
HKCR,CLSID\{F9D18BF8-E0ED-11d0-AB8B-08002BE4E3B7}
|
||||
HKCR,CLSID\{D1352B68-E2B5-11d0-AB8B-08002BE4E3B7}
|
||||
HKCR,CLSID\{61935832-FC85-11d0-8FAE-08002BE4E62A}
|
||||
|
||||
|
||||
HKCR,Speech.VoiceCommand
|
||||
HKCR,Speech.VoiceCommand.1
|
||||
HKCR,TypeLib\{A26D7621-6FA0-11ce-A166-00AA004CD65C}
|
||||
HKCR,Interface\{A26D7622-6FA0-11ce-A166-00AA004CD65C}
|
||||
HKCR,Speech.VoiceText
|
||||
HKCR,Speech.VoiceText.1
|
||||
HKCR,TypeLib\{FF2C7A51-78F9-11ce-B762-00AA004CD65C}
|
||||
HKCR,Interface\{FF2C7A50-78F9-11ce-B762-00AA004CD65C}
|
||||
|
||||
HKCR,Interface\{CCFD7A60-604D-101B-9926-00AA003CFC2C}
|
||||
HKCR,Interface\{80B25CC0-5540-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{D3CC0820-604D-101B-9926-00AA003CFC2C}
|
||||
HKCR,Interface\{E86F9540-DCA2-11CD-A166-00AA004CD65C}
|
||||
HKCR,Interface\{DAC54F60-604D-101B-9926-00AA003CFC2C}
|
||||
HKCR,Interface\{746141E0-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{E0DCC220-604D-101B-9926-00AA003CFC2C}
|
||||
HKCR,Interface\{C63A2B30-5543-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{D981C420-6053-101B-9926-00AA003CFC2C}
|
||||
HKCR,Interface\{AEB2A680-5544-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{E5F24680-6053-101B-9926-00AA003CFC2C}
|
||||
HKCR,Interface\{FFF5DF80-5544-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{EE39B8A0-6053-101B-9926-00AA003CFC2C}
|
||||
HKCR,Interface\{AA8FE260-5545-11b9-C000-5611722E1D15}
|
||||
HKCR,Interface\{FD3A2430-E090-11cd-A166-00AA004CD65C}
|
||||
HKCR,Interface\{D2C840E0-E092-11cd-A166-00AA004CD65C}
|
||||
HKCR,Interface\{C4FE8740-E093-11cd-A166-00AA004CD65C}
|
||||
HKCR,Interface\{E1B7A180-E093-11cd-A166-00AA004CD65C}
|
||||
HKCR,Interface\{6A8D6140-E095-11cd-A166-00AA004CD65C}
|
||||
HKCR,Interface\{8BE9CC30-E095-11cd-A166-00AA004CD65C}
|
||||
HKCR,Interface\{D6469210-E095-11cd-A166-00AA004CD65C}
|
||||
HKCR,Interface\{E8F6FA20-E095-11cd-A166-00AA004CD65C}
|
||||
HKCR,Interface\{2F440FB4-CE01-11cf-B234-00AA00A215ED}
|
||||
HKCR,Interface\{2F440FB8-CE01-11cf-B234-00AA00A215ED}
|
||||
HKCR,Interface\{9B445332-E39F-11d1-BED7-006008317CE8}
|
||||
HKCR,Interface\{be8f63a0-b915-11d1-b7bc-0060979841b4}
|
||||
HKCR,Interface\{9B445333-E39F-11d1-BED7-006008317CE8}
|
||||
HKCR,Interface\{9B445334-E39F-11d1-BED7-006008317CE8}
|
||||
HKCR,Interface\{9B445335-E39F-11d1-BED7-006008317CE8}
|
||||
HKCR,Interface\{9B445336-E39F-11d1-BED7-006008317CE8}
|
||||
HKCR,Interface\{599F77E3-E42E-11d1-BED8-006008317CE8}
|
||||
HKCR,Interface\{599F77E4-E42E-11d1-BED8-006008317CE8}
|
||||
HKCR,Interface\{238004E1-F0C4-11d1-BED9-006008317CE8}
|
||||
HKCR,Interface\{238004E2-F0C4-11d1-BED9-006008317CE8}
|
||||
HKCR,Interface\{238004E3-F0C4-11d1-BED9-006008317CE8}
|
||||
|
||||
HKCR,Interface\{68A33AA0-44CD-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{2F26B9C1-DB31-11CD-B3CA-00AA0047BA4F}
|
||||
HKCR,Interface\{F106BFA0-C743-11CD-80E5-00AA003E4B50}
|
||||
HKCR,Interface\{EFEEA350-CE5E-11CD-9D96-00AA002FC7C9}
|
||||
HKCR,Interface\{090CD9B0-DA1A-11CD-B3CA-00AA0047BA4F}
|
||||
HKCR,Interface\{B9BD3860-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{2F26B9C2-DB31-11CD-B3CA-00AA0047BA4F}
|
||||
HKCR,Interface\{BCFB4C60-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{05EB6C60-DBAB-11CD-B3CA-00AA0047BA4F}
|
||||
HKCR,Interface\{BFA9F1A0-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{05EB6C61-DBAB-11CD-B3CA-00AA0047BA4F}
|
||||
HKCR,Interface\{C2835060-44DB-101B-90A8-00AA003E4B50}
|
||||
HKCR,Interface\{05EB6C62-DBAB-11CD-B3CA-00AA0047BA4F}
|
||||
HKCR,Interface\{E8C3E160-C743-11CD-80E5-00AA003E4B50}
|
||||
HKCR,Interface\{05EB6C63-DBAB-11CD-B3CA-00AA0047BA4F}
|
||||
HKCR,Interface\{ECC0B180-C743-11CD-80E5-00AA003E4B50}
|
||||
HKCR,Interface\{05EB6C64-DBAB-11CD-B3CA-00AA0047BA4F}
|
||||
HKCR,Interface\{090CD9A3-DA1A-11CD-B3CA-00AA0047BA4F}
|
||||
HKCR,Interface\{05EB6C65-DBAB-11CD-B3CA-00AA0047BA4F}
|
||||
HKCR,Interface\{090CD9A4-DA1A-11CD-B3CA-00AA0047BA4F}
|
||||
HKCR,Interface\{090CD9A5-DA1A-11CD-B3CA-00AA0047BA4F}
|
||||
HKCR,Interface\{05EB6C66-DBAB-11CD-B3CA-00AA0047BA4F}
|
||||
HKCR,Interface\{090CD9A6-DA1A-11CD-B3CA-00AA0047BA4F}
|
||||
HKCR,Interface\{aad74c30-4b02-11d1-b792-0060979841b4}
|
||||
HKCR,Interface\{090CD9A7-DA1A-11CD-B3CA-00AA0047BA4F}
|
||||
HKCR,Interface\{090CD9A8-DA1A-11CD-B3CA-00AA0047BA4F}
|
||||
HKCR,Interface\{05EB6C67-DBAB-11CD-B3CA-00AA0047BA4F}
|
||||
HKCR,Interface\{090CD9A9-DA1A-11CD-B3CA-00AA0047BA4F}
|
||||
HKCR,Interface\{090CD9AA-DA1A-11CD-B3CA-00AA0047BA4F}
|
||||
HKCR,Interface\{05EB6C68-DBAB-11CD-B3CA-00AA0047BA4F}
|
||||
HKCR,Interface\{090CD9AB-DA1A-11CD-B3CA-00AA0047BA4F}
|
||||
HKCR,Interface\{090CD9AC-DA1A-11CD-B3CA-00AA0047BA4F}
|
||||
HKCR,Interface\{090CD9AD-DA1A-11CD-B3CA-00AA0047BA4F}
|
||||
HKCR,Interface\{05EB6C69-DBAB-11CD-B3CA-00AA0047BA4F}
|
||||
HKCR,Interface\{090CD9AE-DA1A-11CD-B3CA-00AA0047BA4F}
|
||||
HKCR,Interface\{090CD9AF-DA1A-11CD-B3CA-00AA0047BA4F}
|
||||
HKCR,Interface\{E97F05C0-81B3-11ce-B763-00AA004CD65C}
|
||||
HKCR,Interface\{E97F05C1-81B3-11ce-B763-00AA004CD65C}
|
||||
HKCR,Interface\{0B37F1E0-B8DE-11cf-B22E-00AA00A215ED}
|
||||
HKCR,Interface\{090CD9A2-DA1A-11CD-B3CA-00AA0047BA4F}
|
||||
HKCR,Interface\{2F26B9C0-DB31-11CD-B3CA-00AA0047BA4F}
|
||||
HKCR,Interface\{D6E56341-B3EA-11d1-AFA5-0000F81E880D}
|
||||
HKCR,Interface\{D6E56342-B3EA-11d1-AFA5-0000F81E880D}
|
||||
HKCR,Interface\{1D59DED1-E367-11d1-BED7-006008317CE8}
|
||||
HKCR,Interface\{1D59DED2-E367-11d1-BED7-006008317CE8}
|
||||
HKCR,Interface\{9B445330-E39F-11d1-BED7-006008317CE8}
|
||||
HKCR,Interface\{9B445331-E39F-11d1-BED7-006008317CE8}
|
||||
|
||||
HKCR,Interface\{05EB6C6A-DBAB-11CD-B3CA-00AA0047BA4F}
|
||||
HKCR,Interface\{28016060-4A47-101B-931A-00AA0047BA4F}
|
||||
HKCR,Interface\{0FD6E2A1-E77D-11CD-B3CA-00AA0047BA4F}
|
||||
HKCR,Interface\{1287A280-4A47-101B-931A-00AA0047BA4F}
|
||||
HKCR,Interface\{e4963d40-c743-11cd-80e5-00aa003e4b50}
|
||||
HKCR,Interface\{05EB6C6B-DBAB-11CD-B3CA-00AA0047BA4F}
|
||||
HKCR,Interface\{47F59D00-4A47-101B-931A-00AA0047BA4F}
|
||||
HKCR,Interface\{05EB6C6D-DBAB-11CD-B3CA-00AA0047BA4F}
|
||||
HKCR,Interface\{6B837B20-4A47-101B-931A-00AA0047BA4F}
|
||||
HKCR,Interface\{05EB6C6E-DBAB-11CD-B3CA-00AA0047BA4F}
|
||||
HKCR,Interface\{7AA42960-4A47-101B-931A-00AA0047BA4F}
|
||||
HKCR,Interface\{05EB6C6F-DBAB-11CD-B3CA-00AA0047BA4F}
|
||||
HKCR,Interface\{C0FA8F40-4A46-101B-931A-00AA0047BA4F}
|
||||
HKCR,Interface\{599F77E2-E42E-11d1-BED8-006008317CE8}
|
||||
HKCR,Interface\{599F77E1-E42E-11d1-BED8-006008317CE8}
|
||||
HKCR,Interface\{F546B340-C743-11cd-80E5-00AA003E4B50}
|
||||
HKCR,Interface\{BC06A220-C743-11cd-80E5-00AA003E4B50}
|
||||
HKCR,Interface\{2EC34DA0-C743-11cd-80E5-00AA003E4B50}
|
||||
HKCR,Interface\{C0BD9A80-C743-11cd-80E5-00AA003E4B50}
|
||||
HKCR,Interface\{ACB08C00-C743-11cd-80E5-00AA003E4B50}
|
||||
HKCR,Interface\{492FE490-51E7-11b9-C000-FED6CBA3B1A9}
|
||||
HKCR,Interface\{FD7C2320-3D6D-11b9-C000-FED6CBA3B1A9}
|
||||
|
||||
|
||||
HKCR,Interface\{88AD7DC3-67D5-11cf-9B8B-08005AFC3A41}
|
||||
HKCR,Interface\{88AD7DC4-67D5-11cf-9B8B-08005AFC3A41}
|
||||
HKCR,Interface\{6D62B3A0-6893-11cf-9B8B-08005AFC3A41}
|
||||
HKCR,Interface\{6D62B3A1-6893-11cf-9B8B-08005AFC3A41}
|
||||
HKCR,Interface\{88AD7DC5-67D5-11cf-9B8B-08005AFC3A41}
|
||||
HKCR,Interface\{88AD7DC6-67D5-11cf-9B8B-08005AFC3A41}
|
||||
HKCR,Interface\{88AD7DC7-67D5-11cf-9B8B-08005AFC3A41}
|
||||
HKCR,Interface\{88AD7DC8-67D5-11cf-9B8B-08005AFC3A41}
|
||||
HKCR,Interface\{5FEB8800-67D5-11cf-9B8B-08005AFC3A41}
|
||||
HKCR,Interface\{88AD7DC0-67D5-11cf-9B8B-08005AFC3A41}
|
||||
HKCR,Interface\{8953F1A0-7E80-11cf-8D15-00A0C9034A7E}
|
||||
HKCR,Interface\{A02C2CA0-AE50-11cf-833A-00AA00A21A29}
|
||||
HKCR,Interface\{A02C2CA1-AE50-11cf-833A-00AA00A21A29}
|
||||
HKCR,Interface\{A02C2CA2-AE50-11cf-833A-00AA00A21A29}
|
||||
HKCR,Interface\{A02C2CA3-AE50-11cf-833A-00AA00A21A29}
|
||||
HKCR,Interface\{90A84EA0-6E51-11D0-9BC2-08005AFC3A41}
|
||||
HKCR,Interface\{90A84EA1-6E51-11D0-9BC2-08005AFC3A41}
|
||||
HKCR,Interface\{D4E3F8E0-6521-11d1-8C35-006097DF5D01}
|
||||
HKCR,Interface\{D4E3F8E1-6521-11d1-8C35-006097DF5D01}
|
||||
HKCR,Interface\{8763AFD1-7ADE-11d1-BEA7-006008317CE8}
|
||||
HKCR,Interface\{8763AFD2-7ADE-11d1-BEA7-006008317CE8}
|
||||
|
||||
; wrapper dll
|
||||
HKCR,CLSID\{0C7F3F20-8BAB-11d2-9432-00C04F8EF48F}
|
||||
|
||||
; registry entries created by components
|
||||
HKCU,Software\Voice
|
||||
HKLM,Software\Voice\VoiceCommands
|
||||
HKLM,Software\Voice\VoiceDictation
|
||||
HKCU,Software\Microsoft\SpeechAPI
|
||||
HKLM,Software\Microsoft\SpeechAPI
|
||||
|
||||
|
||||
; uninstall
|
||||
HKLM,Software\Microsoft\Windows\CurrentVersion\Uninstall\SpeechAPI
|
||||
HKLM,Software\Microsoft\SpchAPI
|
||||
|
||||
HKCR,CLSID\{53961A01-459B-11d1-BE77-006008317CE8}
|
||||
HKLM,SOFTWARE\Microsoft\SpeechAPI\TelephonyControls,"Yes/No Control"
|
||||
HKCR,CLSID\{53961A02-459B-11d1-BE77-006008317CE8}
|
||||
HKLM,SOFTWARE\Microsoft\SpeechAPI\TelephonyControls,"Extension Control"
|
||||
HKCR,CLSID\{53961A03-459B-11d1-BE77-006008317CE8}
|
||||
HKLM,SOFTWARE\Microsoft\SpeechAPI\TelephonyControls,"Phone Number Control"
|
||||
HKCR,CLSID\{53961A04-459B-11d1-BE77-006008317CE8}
|
||||
HKLM,SOFTWARE\Microsoft\SpeechAPI\TelephonyControls,"Grammar Control"
|
||||
HKCR,CLSID\{53961A05-459B-11d1-BE77-006008317CE8}
|
||||
HKLM,SOFTWARE\Microsoft\SpeechAPI\TelephonyControls,"Date Control"
|
||||
HKCR,CLSID\{53961A06-459B-11d1-BE77-006008317CE8}
|
||||
HKLM,SOFTWARE\Microsoft\SpeechAPI\TelephonyControls,"Time Control"
|
||||
HKCR,CLSID\{53961A07-459B-11d1-BE77-006008317CE8}
|
||||
HKLM,SOFTWARE\Microsoft\SpeechAPI\TelephonyControls,"Record Control"
|
||||
HKCR,CLSID\{53961A08-459B-11d1-BE77-006008317CE8}
|
||||
HKLM,SOFTWARE\Microsoft\SpeechAPI\TelephonyControls,"Spelling Control"
|
||||
HKCR,CLSID\{53961A09-459B-11d1-BE77-006008317CE8}
|
||||
HKLM,SOFTWARE\Microsoft\SpeechAPI\TelephonyControls,"Name Control"
|
||||
|
||||
|
||||
; uninstall ActiveX controls
|
||||
HKCR,CLSID\{4E3D9D1F-0C63-11D1-8BFB-0060081841DE},,,"DirectSR Class"
|
||||
HKCR,CLSID\{EEE78591-FE22-11D0-8BEF-0060081841DE},,,"DirectSS Class"
|
||||
HKCR,CLSID\{66523042-35FE-11D1-8C4D-0060081841DE},,,"VCommand Class"
|
||||
HKCR,CLSID\{582C2191-4016-11D1-8C55-0060081841DE},,,"VDict Class"
|
||||
HKCR,CLSID\{2398E32F-5C6E-11D1-8C65-0060081841DE},,,"TextToSpeech Class"
|
||||
HKCR,CLSID\{FC9E740F-6058-11D1-8C66-0060081841DE},,,"Telephony Class"
|
||||
|
||||
|
||||
[BeginPromptSection]
|
||||
Prompt=%BeginPrompt%
|
||||
ButtonType=YESNO
|
||||
Title=%AppName%
|
||||
|
||||
[EndPromptSection]
|
||||
Prompt=%EndPrompt%
|
||||
|
||||
[Strings]
|
||||
AppName="Microsoft Speech API 4.0"
|
||||
BeginPrompt="Are you sure you want to remove the Speech API? It will prevent speech recognition and text-to-speech from working."
|
||||
EndPrompt="Uninstall complete. You may wish to uninstall any text-to-speech and speech recognition engines since they will no longer work."
|
||||
|
||||
;we dont register the OCX by default because oleaut32.dll and olepro32.dll are not
|
||||
;up to date on clean win 95 gold machines; they are if you have an activex server
|
||||
;like office or IE however.
|
||||
;[RegisterOCXSection]
|
||||
;%49000%\xvoice.dll
|
||||
Binary file not shown.
Vendored
+6635
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user