diff --git a/AGENTS.md b/AGENTS.md index e7f952d..d4404a9 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -33,6 +33,11 @@ before you stop. The client must not crash, and the daemon must not send malformed data to Discord. - Keep core patches isolated. Add actions in `src/renderer/puppet/` and the bridge in `src/main/puppetBridge.ts`. Do not spread logic through upstream files. +- TTS lives in `microslopsam/` (merged from the standalone SAM engine project, including the + vendored binaries: they are hard to acquire and small enough to track). Before changing anything + TTS, read `TTS-DESIGN.md` and `microslopsam/docs/TTS-DESIGN.md`, confirm the in-repo copy is + current, and run `sh microslopsam/setup/test-wrapper.sh`. The daemon's engine points at + `microslopsam/setup/veskslop-tts.sh`; nothing may reference an external SAM checkout. - The daemon holds the logic: triggers, trust list, command parsing, trigger log, and pacing. - The daemon binds to localhost. Remote access goes over LAN or Tailscale only. - Pacing: the daemon sends the first action of a burst in 30-200 ms, then spaces sends 500-2800 ms. @@ -72,7 +77,7 @@ before you stop. | User search (cache and guild members) | Implemented | | Voice state read and `VOICE_STATE_UPDATE` events | Implemented | | Voice actions (`voice.join`, `voice.leave`, `voice.move`) | Implemented. Auto-leave follows the owner. `stay @user` pending. | -| Voice audio (TTS, virtual mic, ducking, browser monitor) | Implemented. Microphone puppeting pending. | +| Voice audio (TTS, virtual mic, ducking, browser monitor) | Implemented. MicroslopSam engine merged into `microslopsam/`; VOX/HEV presets, VOX prosody, word mode, and the hum are live. Microphone puppeting pending. | | Audio capture and transcript (VAD, WAV, STT hook, live events) | Implemented. STT provider not chosen. | | Voice video | Not started. Plan in [docs/voice.md](docs/voice.md). | | Notification parsing (edits, deletes, reactions, replies) | Implemented | diff --git a/CURRENT.md b/CURRENT.md index 6cc2ff4..f933a2d 100644 --- a/CURRENT.md +++ b/CURRENT.md @@ -40,6 +40,15 @@ mobile draft at 390px. - [x] C11 preview caching: Discord-hosted image/GIF previews (WebP 320px, hash-addressed, 5 MiB cap, one attempt) run after every walk in both modes. Live run `...-20260916090722`: `previewed: 2`; thumbs served over `/api/media///thumb` (200). + - [x] C66 Merged the SAM engine into Veskslop. `microslopsam/` is now a full copy of the + standalone project as it ran (wrapper, docs, README, build artifacts, and the vendored + binaries SAM tracks), the runtime env points at `microslopsam/setup/veskslop-tts.sh` with + regenerated voices, and `microslopsam/setup/microslopsam.env` resolves inside the repo. The + word-mode + preset fix from C65 landed on the merged wrapper (word mode wins over VOX prosody, + parser skipped, per-word rate/pitch tags, preset-aware `--voices`); the wrapper test harness + passes and a real-engine run shows 9 per-word gaps at 11.1 s versus 7.5 s for a single + utterance. An `env -i` run proved the copy runs without the SAM project. Process rule added to + AGENTS.md: read TTS-DESIGN first, keep the in-repo copy current, run the wrapper tests. - [x] C65 Word mode with the Half-Life preset. Word mode no longer yields to VOX prosody: with a preset it synthesizes each word with the preset profile (per-word `\!R`/`\!%` tags), and the VOX parser is skipped because its tags cannot survive a word split. The daemon always exports diff --git a/microslopsam/.gitignore b/microslopsam/.gitignore index 4a5b633..33b6c8d 100644 --- a/microslopsam/.gitignore +++ b/microslopsam/.gitignore @@ -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/ diff --git a/microslopsam/README.md b/microslopsam/README.md index 143f66a..aced4de 100644 --- a/microslopsam/README.md +++ b/microslopsam/README.md @@ -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) diff --git a/microslopsam/docs/NOTES.md b/microslopsam/docs/NOTES.md index 754921a..8541c1d 100644 --- a/microslopsam/docs/NOTES.md +++ b/microslopsam/docs/NOTES.md @@ -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.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. diff --git a/microslopsam/docs/TTS-DESIGN.md b/microslopsam/docs/TTS-DESIGN.md index 99fe98f..5ebdbfb 100644 --- a/microslopsam/docs/TTS-DESIGN.md +++ b/microslopsam/docs/TTS-DESIGN.md @@ -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` = duration factor. Smaller is faster: `0.30` very fast, `1.00` 1.0x, + `1.60` slow. No tag at 100%. + - `\!%` = 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.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. diff --git a/microslopsam/setup/test-wrapper.sh b/microslopsam/setup/test-wrapper.sh index 6c06e54..067ea63 100755 --- a/microslopsam/setup/test-wrapper.sh +++ b/microslopsam/setup/test-wrapper.sh @@ -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)" diff --git a/microslopsam/setup/veskslop-tts.sh b/microslopsam/setup/veskslop-tts.sh index 36da672..f788840 100755 --- a/microslopsam/setup/veskslop-tts.sh +++ b/microslopsam/setup/veskslop-tts.sh @@ -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 diff --git a/microslopsam/third_party/README.md b/microslopsam/third_party/README.md new file mode 100644 index 0000000..68d80c2 --- /dev/null +++ b/microslopsam/third_party/README.md @@ -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`). diff --git a/microslopsam/third_party/flextalk/data1.cab b/microslopsam/third_party/flextalk/data1.cab new file mode 100644 index 0000000..e02fe25 Binary files /dev/null and b/microslopsam/third_party/flextalk/data1.cab differ diff --git a/microslopsam/third_party/nettss-reference/nettts_flextalk_vox_profile.reg b/microslopsam/third_party/nettss-reference/nettts_flextalk_vox_profile.reg new file mode 100644 index 0000000..843d069 --- /dev/null +++ b/microslopsam/third_party/nettss-reference/nettts_flextalk_vox_profile.reg @@ -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 diff --git a/microslopsam/third_party/nettss-reference/vox_parser.cpp b/microslopsam/third_party/nettss-reference/vox_parser.cpp new file mode 100644 index 0000000..6aab3fa --- /dev/null +++ b/microslopsam/third_party/nettss-reference/vox_parser.cpp @@ -0,0 +1,744 @@ +#include "vox_parser.hpp" +#include +#include +#include +#include +#include + +static inline std::wstring trim(const std::wstring& s){ + size_t a=0,b=s.size(); + while(aa && 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 split_sentences(const std::wstring& in){ + std::vector out; + std::wstring cur; + for(size_t i=0;i “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 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 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 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 tokenize_ws(const std::wstring& s){ + std::wstringstream ss(s); + std::vector 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& 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;kbool{ + 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 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 cuts; + for(size_t p=0;p0 && p+1i+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=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=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(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(aa && 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 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 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 + +// 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); diff --git a/microslopsam/third_party/sapi4/installers/msttsl.exe b/microslopsam/third_party/sapi4/installers/msttsl.exe new file mode 100644 index 0000000..b6e951f Binary files /dev/null and b/microslopsam/third_party/sapi4/installers/msttsl.exe differ diff --git a/microslopsam/third_party/sapi4/installers/spchapi.exe b/microslopsam/third_party/sapi4/installers/spchapi.exe new file mode 100644 index 0000000..de5df1c Binary files /dev/null and b/microslopsam/third_party/sapi4/installers/spchapi.exe differ diff --git a/microslopsam/third_party/sapi4/msttsl/female.cfg b/microslopsam/third_party/sapi4/msttsl/female.cfg new file mode 100644 index 0000000..b1753a8 Binary files /dev/null and b/microslopsam/third_party/sapi4/msttsl/female.cfg differ diff --git a/microslopsam/third_party/sapi4/msttsl/female.vce b/microslopsam/third_party/sapi4/msttsl/female.vce new file mode 100644 index 0000000..1d1b29b Binary files /dev/null and b/microslopsam/third_party/sapi4/msttsl/female.vce differ diff --git a/microslopsam/third_party/sapi4/msttsl/female8.cfg b/microslopsam/third_party/sapi4/msttsl/female8.cfg new file mode 100644 index 0000000..ee35ba1 Binary files /dev/null and b/microslopsam/third_party/sapi4/msttsl/female8.cfg differ diff --git a/microslopsam/third_party/sapi4/msttsl/female8.vce b/microslopsam/third_party/sapi4/msttsl/female8.vce new file mode 100644 index 0000000..2fd4cee Binary files /dev/null and b/microslopsam/third_party/sapi4/msttsl/female8.vce differ diff --git a/microslopsam/third_party/sapi4/msttsl/male.cfg b/microslopsam/third_party/sapi4/msttsl/male.cfg new file mode 100644 index 0000000..d293a5c Binary files /dev/null and b/microslopsam/third_party/sapi4/msttsl/male.cfg differ diff --git a/microslopsam/third_party/sapi4/msttsl/male.vce b/microslopsam/third_party/sapi4/msttsl/male.vce new file mode 100644 index 0000000..5e0695c Binary files /dev/null and b/microslopsam/third_party/sapi4/msttsl/male.vce differ diff --git a/microslopsam/third_party/sapi4/msttsl/male8.cfg b/microslopsam/third_party/sapi4/msttsl/male8.cfg new file mode 100644 index 0000000..cf24483 Binary files /dev/null and b/microslopsam/third_party/sapi4/msttsl/male8.cfg differ diff --git a/microslopsam/third_party/sapi4/msttsl/male8.vce b/microslopsam/third_party/sapi4/msttsl/male8.vce new file mode 100644 index 0000000..d6c9c29 Binary files /dev/null and b/microslopsam/third_party/sapi4/msttsl/male8.vce differ diff --git a/microslopsam/third_party/sapi4/msttsl/mstts.inf b/microslopsam/third_party/sapi4/msttsl/mstts.inf new file mode 100644 index 0000000..e80348f --- /dev/null +++ b/microslopsam/third_party/sapi4/msttsl/mstts.inf @@ -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" + diff --git a/microslopsam/third_party/sapi4/msttsl/msttssyn.dll b/microslopsam/third_party/sapi4/msttsl/msttssyn.dll new file mode 100644 index 0000000..3d666ac Binary files /dev/null and b/microslopsam/third_party/sapi4/msttsl/msttssyn.dll differ diff --git a/microslopsam/third_party/sapi4/msttsl/sam.cfg b/microslopsam/third_party/sapi4/msttsl/sam.cfg new file mode 100644 index 0000000..4b3973d Binary files /dev/null and b/microslopsam/third_party/sapi4/msttsl/sam.cfg differ diff --git a/microslopsam/third_party/sapi4/msttsl/sam.vce b/microslopsam/third_party/sapi4/msttsl/sam.vce new file mode 100644 index 0000000..cbdeb28 Binary files /dev/null and b/microslopsam/third_party/sapi4/msttsl/sam.vce differ diff --git a/microslopsam/third_party/sapi4/spchapi/SPCHAPI.INF b/microslopsam/third_party/sapi4/spchapi/SPCHAPI.INF new file mode 100644 index 0000000..33bfadf --- /dev/null +++ b/microslopsam/third_party/sapi4/spchapi/SPCHAPI.INF @@ -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 \ No newline at end of file diff --git a/microslopsam/third_party/sapi4/spchapi/SPEECH.DLL b/microslopsam/third_party/sapi4/spchapi/SPEECH.DLL new file mode 100644 index 0000000..3bf6e36 Binary files /dev/null and b/microslopsam/third_party/sapi4/spchapi/SPEECH.DLL differ diff --git a/microslopsam/third_party/speech.h b/microslopsam/third_party/speech.h new file mode 100644 index 0000000..1671201 --- /dev/null +++ b/microslopsam/third_party/speech.h @@ -0,0 +1,6635 @@ +/************************************************************************ +Speech.H - Header file to use the Microsoft Speech APIs. + +Copyright 1994 -1998 by Microsoft corporation.All rights reserved. +*/ + +#ifndef _SPEECH_ +#define _SPEECH_ + +// Disable the warning for zero-length arrays in structures +#pragma warning(disable:4200) + + +/************************************************************************ +Defines common to all of the speech APIs. +*/ + +// Application Speech API Compiler Defines _S_UNICODE +// ----------------------------------------------------------------------------- +// ANSI ANSI undefined +// ANSI Unicode _S_UNICODE defined +// Unicode ANSI (UNICODE || _UNICODE) && _S_ANSI undefined +// Unicode Unicode (UNICODE || _UNICODE) defined + +#if (defined(UNICODE) || defined(_UNICODE)) && !defined(_S_ANSI) +#ifndef _S_UNICODE +#define _S_UNICODE +#endif +#endif + +/************************************************************************ +defines */ +#define SVFN_LEN (262) +#define LANG_LEN (64) +#define EI_TITLESIZE (128) +#define EI_DESCSIZE (512) +#define EI_FIXSIZE (512) +#define SVPI_MFGLEN (64) +#define SVPI_PRODLEN (64) +#define SVPI_COMPLEN (64) +#define SVPI_COPYRIGHTLEN (128) +#define SVI_MFGLEN (SVPI_MFGLEN) +#define SETBIT(x) ((DWORD)1 << (x)) + + +// Error Macros +#define FACILITY_SPEECH (FACILITY_ITF) +#define SPEECHERROR(x) MAKE_SCODE(SEVERITY_ERROR, FACILITY_SPEECH, (x)+0x200) +#define AUDERROR(x) MAKE_SCODE(SEVERITY_ERROR, FACILITY_SPEECH, (x)+0x300) +#define SRWARNING(x) MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_SPEECH, (x)+0x400) +#define SRERROR(x) MAKE_SCODE(SEVERITY_ERROR, FACILITY_SPEECH, (x)+0x400) +#define TTSERROR(x) MAKE_SCODE(SEVERITY_ERROR, FACILITY_SPEECH, (x)+0x500) +#define VCMDERROR(x) MAKE_SCODE(SEVERITY_ERROR, FACILITY_SPEECH, (x)+0x600) +#define VTXTERROR(x) MAKE_SCODE(SEVERITY_ERROR, FACILITY_SPEECH, (x)+0x700) +#define LEXERROR(x) MAKE_SCODE(SEVERITY_ERROR, FACILITY_SPEECH, (x)+0x800) +#define LEXWARNING(x) MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_SPEECH, (x)+0x800) + +// Audio Errors +#define AUDERR_NONE S_OK // 0x00000000 +#define AUDERR_BADDEVICEID AUDERROR(1) // 0x80040301 +#define AUDERR_NEEDWAVEFORMAT AUDERROR(2) // 0x80040302 +#define AUDERR_NOTSUPPORTED E_NOTIMPL // 0x80004001 +#define AUDERR_NOTENOUGHDATA SPEECHERROR(1) // 0x80040201 +#define AUDERR_NOTPLAYING AUDERROR(6) // 0x80040306 +#define AUDERR_INVALIDPARAM E_INVALIDARG // 0x80070057 +#define AUDERR_WAVEFORMATNOTSUPPORTED SPEECHERROR(2) // 0x80040202 +#define AUDERR_WAVEDEVICEBUSY SPEECHERROR(3) // 0x80040203 +#define AUDERR_WAVEDEVNOTSUPPORTED AUDERROR(18) // 0x80040312 +#define AUDERR_NOTRECORDING AUDERROR(19) // 0x80040313 +#define AUDERR_INVALIDFLAG SPEECHERROR(4) // 0x80040204 +#define AUDERR_INVALIDHANDLE E_HANDLE // 0x80070006 +#define AUDERR_NODRIVER AUDERROR(23) // 0x80040317 +#define AUDERR_HANDLEBUSY AUDERROR(24) // 0x80040318 +#define AUDERR_INVALIDNOTIFYSINK AUDERROR(25) // 0x80040319 +#define AUDERR_WAVENOTENABLED AUDERROR(26) // 0x8004031A +#define AUDERR_ALREADYCLAIMED AUDERROR(29) // 0x8004031D +#define AUDERR_NOTCLAIMED AUDERROR(30) // 0x8004031E +#define AUDERR_STILLPLAYING AUDERROR(31) // 0x8004031F +#define AUDERR_ALREADYSTARTED AUDERROR(32) // 0x80040320 +#define AUDERR_SYNCNOTALLOWED AUDERROR(33) // 0x80040321 + +// Speech Recognition Warnings +#define SRWARN_BAD_LIST_PRONUNCIATION SRWARNING(1) + +// Speech Recognition Errors +#define SRERR_NONE S_OK // 0x00000000 +#define SRERR_OUTOFDISK SPEECHERROR(5) // 0x80040205 +#define SRERR_NOTSUPPORTED E_NOTIMPL // 0x80004001 +#define SRERR_NOTENOUGHDATA AUDERR_NOTENOUGHDATA // 0x80040201 +#define SRERR_VALUEOUTOFRANGE E_UNEXPECTED // 0x8000FFFF +#define SRERR_GRAMMARTOOCOMPLEX SRERROR(6) // 0x80040406 +#define SRERR_GRAMMARWRONGTYPE SRERROR(7) // 0x80040407 +#define SRERR_INVALIDWINDOW OLE_E_INVALIDHWND // 0x8004000F +#define SRERR_INVALIDPARAM E_INVALIDARG // 0x80070057 +#define SRERR_INVALIDMODE SPEECHERROR(6) // 0x80040206 +#define SRERR_TOOMANYGRAMMARS SRERROR(11) // 0x8004040B +#define SRERR_INVALIDLIST SPEECHERROR(7) // 0x80040207 +#define SRERR_WAVEDEVICEBUSY AUDERR_WAVEDEVICEBUSY // 0x80040203 +#define SRERR_WAVEFORMATNOTSUPPORTED AUDERR_WAVEFORMATNOTSUPPORTED // 0x80040202 +#define SRERR_INVALIDCHAR SPEECHERROR(8) // 0x80040208 +#define SRERR_GRAMTOOCOMPLEX SRERR_GRAMMARTOOCOMPLEX // 0x80040406 +#define SRERR_GRAMTOOLARGE SRERROR(17) // 0x80040411 +#define SRERR_INVALIDINTERFACE E_NOINTERFACE // 0x80004002 +#define SRERR_INVALIDKEY SPEECHERROR(9) // 0x80040209 +#define SRERR_INVALIDFLAG AUDERR_INVALIDFLAG // 0x80040204 +#define SRERR_GRAMMARERROR SRERROR(22) // 0x80040416 +#define SRERR_INVALIDRULE SRERROR(23) // 0x80040417 +#define SRERR_RULEALREADYACTIVE SRERROR(24) // 0x80040418 +#define SRERR_RULENOTACTIVE SRERROR(25) // 0x80040419 +#define SRERR_NOUSERSELECTED SRERROR(26) // 0x8004041A +#define SRERR_BAD_PRONUNCIATION SRERROR(27) // 0x8004041B +#define SRERR_DATAFILEERROR SRERROR(28) // 0x8004041C +#define SRERR_GRAMMARALREADYACTIVE SRERROR(29) // 0x8004041D +#define SRERR_GRAMMARNOTACTIVE SRERROR(30) // 0x8004041E +#define SRERR_GLOBALGRAMMARALREADYACTIVE SRERROR(31) // 0x8004041F +#define SRERR_LANGUAGEMISMATCH SRERROR(32) // 0x80040420 +#define SRERR_MULTIPLELANG SRERROR(33) // 0x80040421 +#define SRERR_LDGRAMMARNOWORDS SRERROR(34) // 0x80040422 +#define SRERR_NOLEXICON SRERROR(35) // 0x80040423 +#define SRERR_SPEAKEREXISTS SRERROR(36) // 0x80040424 +#define SRERR_GRAMMARENGINEMISMATCH SRERROR(37) // 0x80040425 +#define SRERR_BOOKMARKEXISTS SRERROR(38) // 0x80040426 +#define SRERR_BOOKMARKDOESNOTEXIST SRERROR(39) // 0x80040427 +#define SRERR_MICWIZARDCANCELED SRERROR(40) // 0x80040428 +#define SRERR_WORDTOOLONG SRERROR(41) // 0x80040429 +#define SRERR_BAD_WORD SRERROR(42) // 0x8004042A +#define E_WRONGTYPE SPEECHERROR(13) // 0x8004020C +#define E_BUFFERTOOSMALL SPEECHERROR(14) // 0x8004020D + + +// Text to Speech Errors +#define TTSERR_NONE S_OK // 0x00000000 +#define TTSERR_INVALIDINTERFACE E_NOINTERFACE // 0x80004002 +#define TTSERR_OUTOFDISK SRERR_OUTOFDISK // 0x80040205 +#define TTSERR_NOTSUPPORTED E_NOTIMPL // 0x80004001 +#define TTSERR_VALUEOUTOFRANGE E_UNEXPECTED // 0x8000FFFF +#define TTSERR_INVALIDWINDOW OLE_E_INVALIDHWND // 0x8004000F +#define TTSERR_INVALIDPARAM E_INVALIDARG // 0x80070057 +#define TTSERR_INVALIDMODE SRERR_INVALIDMODE // 0x80040206 +#define TTSERR_INVALIDKEY SRERR_INVALIDKEY // 0x80040209 +#define TTSERR_WAVEFORMATNOTSUPPORTED AUDERR_WAVEFORMATNOTSUPPORTED // 0x80040202 +#define TTSERR_INVALIDCHAR SRERR_INVALIDCHAR // 0x80040208 +#define TTSERR_QUEUEFULL SPEECHERROR(10) // 0x8004020A +#define TTSERR_WAVEDEVICEBUSY AUDERR_WAVEDEVICEBUSY // 0x80040203 +#define TTSERR_NOTPAUSED TTSERROR(1) // 0x80040501 +#define TTSERR_ALREADYPAUSED TTSERROR(2) // 0x80040502 + + +// Voice Command Errors + +/* + * Everything worked + */ +#define VCMDERR_NONE S_OK // 0x00000000 + +/* + * Voice Commands could not allocate memory + */ +#define VCMDERR_OUTOFMEM E_OUTOFMEMORY // 0x8007000E + +/* + * Voice Commands could not store/retrieve a command set from the database + */ +#define VCMDERR_OUTOFDISK SRERR_OUTOFDISK // 0x80040205 + +/* + * Function not implemented + */ +#define VCMDERR_NOTSUPPORTED E_NOTIMPL // 0x80004001 + +/* + * A parameter was passed that was out of the ranged of accepted values + */ +#define VCMDERR_VALUEOUTOFRANGE E_UNEXPECTED // 0x8000FFFF + +/* + * A menu was too complex to compile a context-free grammar + */ +#define VCMDERR_MENUTOOCOMPLEX VCMDERROR(0x06) // 0x80040606 + +/* + * Language mismatch between the speech recognition mode and menu trying + * to create + */ +#define VCMDERR_MENUWRONGLANGUAGE VCMDERROR(0x07) // 0x80040607 + +/* + * An invalid window handle was passed to Voice Commands + */ +#define VCMDERR_INVALIDWINDOW OLE_E_INVALIDHWND // 0x8004000F + +/* + * Voice Commands detected a bad function parameter + */ +#define VCMDERR_INVALIDPARAM E_INVALIDARG // 0x80070057 + +/* + * This function cannot be completed right now, usually when trying to do + * some operation while no speech recognition site is established + */ +#define VCMDERR_INVALIDMODE SRERR_INVALIDMODE // 0x80040206 + +/* + * There are too many Voice Commands menu + */ // 0x8004060B +#define VCMDERR_TOOMANYMENUS VCMDERROR(0x0B) + +/* + * Invalid list passed to ListSet/ListGet + */ +#define VCMDERR_INVALIDLIST SRERR_INVALIDLIST // 0x80040207 + +/* + * Trying to open an existing menu that is not in the Voice Commands database + */ +#define VCMDERR_MENUDOESNOTEXIST VCMDERROR(0x0D) // 0x8004060D + +/* + * The function could not be completed because the menu is actively + * listening for commands + */ +#define VCMDERR_MENUACTIVE VCMDERROR(0x0E) // 0x8004060E + +/* + * No speech recognition engine is started + */ +#define VCMDERR_NOENGINE VCMDERROR(0x0F) // 0x8004060F + +/* + * Voice Commands could not acquire a Grammar interface from the speech + * recognition engine + */ +#define VCMDERR_NOGRAMMARINTERFACE VCMDERROR(0x10) // 0x80040610 + +/* + * Voice Commands could not acquire a Find interface from the speech + * recognition engine + */ +#define VCMDERR_NOFINDINTERFACE VCMDERROR(0x11) // 0x80040611 + +/* + * Voice Commands could not create a speech recognition enumerator + */ +#define VCMDERR_CANTCREATESRENUM VCMDERROR(0x12) // 0x80040612 + +/* + * Voice Commands could get the appropriate site information to start a + * speech recognition engine + */ +#define VCMDERR_NOSITEINFO VCMDERROR(0x13) // 0x80040613 + +/* + * Voice Commands could not find a speech recognition engine + */ +#define VCMDERR_SRFINDFAILED VCMDERROR(0x14) // 0x80040614 + +/* + * Voice Commands could not create an audio source object + */ +#define VCMDERR_CANTCREATEAUDIODEVICE VCMDERROR(0x15) // 0x80040615 + +/* + * Voice Commands could not set the appropriate device number in the + * audio source object + */ +#define VCMDERR_CANTSETDEVICE VCMDERROR(0x16) // 0x80040616 + +/* + * Voice Commands could not select a speech recognition engine. Usually the + * error will occur when Voice Commands has enumerated and found an + * appropriate speech recognition engine, then it is not able to actually + * select/start the engine. There are different reasons that the engine won't + * start, but the most common is that there is no wave in device. + */ +#define VCMDERR_CANTSELECTENGINE VCMDERROR(0x17) // 0x80040617 + +/* + * Voice Commands could not create a notfication sink for engine + * notifications + */ +#define VCMDERR_CANTCREATENOTIFY VCMDERROR(0x18) // 0x80040618 + +/* + * Voice Commands could not create internal data structures. + */ +#define VCMDERR_CANTCREATEDATASTRUCTURES VCMDERROR(0x19) // 0x80040619 + +/* + * Voice Commands could not initialize internal data structures + */ +#define VCMDERR_CANTINITDATASTRUCTURES VCMDERROR(0x1A) // 0x8004061A + +/* + * The menu does not have an entry in the Voice Commands cache + */ +#define VCMDERR_NOCACHEDATA VCMDERROR(0x1B) // 0x8004061B + +/* + * The menu does not have commands + */ +#define VCMDERR_NOCOMMANDS VCMDERROR(0x1C) // 0x8004061C + +/* + * Voice Commands cannot extract unique words needed for the engine grammar + */ +#define VCMDERR_CANTXTRACTWORDS VCMDERROR(0x1D) // 0x8004061D + +/* + * Voice Commands could not get the command set database name + */ +#define VCMDERR_CANTGETDBNAME VCMDERROR(0x1E) // 0x8004061E + +/* + * Voice Commands could not create a registry key + */ +#define VCMDERR_CANTCREATEKEY VCMDERROR(0x1F) // 0x8004061F + +/* + * Voice Commands could not create a new database name + */ +#define VCMDERR_CANTCREATEDBNAME VCMDERROR(0x20) // 0x80040620 + +/* + * Voice Commands could not update the registry + */ +#define VCMDERR_CANTUPDATEREGISTRY VCMDERROR(0x21) // 0x80040621 + +/* + * Voice Commands could not open the registry + */ +#define VCMDERR_CANTOPENREGISTRY VCMDERROR(0x22) // 0x80040622 + +/* + * Voice Commands could not open the command set database + */ +#define VCMDERR_CANTOPENDATABASE VCMDERROR(0x23) // 0x80040623 + +/* + * Voice Commands could not create a database storage object + */ +#define VCMDERR_CANTCREATESTORAGE VCMDERROR(0x24) // 0x80040624 + +/* + * Voice Commands could not do CmdMimic + */ +#define VCMDERR_CANNOTMIMIC VCMDERROR(0x25) // 0x80040625 + +/* + * A menu of this name already exist + */ +#define VCMDERR_MENUEXIST VCMDERROR(0x26) // 0x80040626 + +/* + * A menu of this name is open and cannot be deleted right now + */ +#define VCMDERR_MENUOPEN VCMDERROR(0x27) // 0x80040627 + + +// Voice Text Errors +#define VTXTERR_NONE S_OK // 0x00000000 + +/* + * Voice Text failed to allocate memory it needed + */ +#define VTXTERR_OUTOFMEM E_OUTOFMEMORY // 0x8007000E + +/* + * An empty string ("") was passed to the Speak function + */ +#define VTXTERR_EMPTYSPEAKSTRING SPEECHERROR(0x0b) // 0x8004020B + +/* + * An invalid parameter was passed to a Voice Text function + */ +#define VTXTERR_INVALIDPARAM E_INVALIDARG // 0x80070057 + +/* + * The called function cannot be done at this time. This usually occurs + * when trying to call a function that needs a site, but no site has been + * registered. + */ +#define VTXTERR_INVALIDMODE SRERR_INVALIDMODE // 0x80040206 + +/* + * No text-to-speech engine is started + */ +#define VTXTERR_NOENGINE VTXTERROR(0x0F) // 0x8004070F + +/* + * Voice Text could not acquire a Find interface from the text-to-speech + * engine + */ +#define VTXTERR_NOFINDINTERFACE VTXTERROR(0x11) // 0x80040711 + +/* + * Voice Text could not create a text-to-speech enumerator + */ +#define VTXTERR_CANTCREATETTSENUM VTXTERROR(0x12) // 0x80040712 + +/* + * Voice Text could get the appropriate site information to start a + * text-to-speech engine + */ +#define VTXTERR_NOSITEINFO VTXTERROR(0x13) // 0x80040713 + +/* + * Voice Text could not find a text-to-speech engine + */ +#define VTXTERR_TTSFINDFAILED VTXTERROR(0x14) // 0x80040714 + +/* + * Voice Text could not create an audio destination object + */ +#define VTXTERR_CANTCREATEAUDIODEVICE VTXTERROR(0x15) // 0x80040715 + +/* + * Voice Text could not set the appropriate device number in the + * audio destination object + */ +#define VTXTERR_CANTSETDEVICE VTXTERROR(0x16) // 0x80040716 + +/* + * Voice Text could not select a text-to-speech engine. Usually the + * error will occur when Voice Text has enumerated and found an + * appropriate text-to-speech engine, then it is not able to actually + * select/start the engine. + */ +#define VTXTERR_CANTSELECTENGINE VTXTERROR(0x17) // 0x80040717 + +/* + * Voice Text could not create a notfication sink for engine + * notifications + */ +#define VTXTERR_CANTCREATENOTIFY VTXTERROR(0x18) // 0x80040718 + +/* + * Voice Text is disabled at this time + */ +#define VTXTERR_NOTENABLED VTXTERROR(0x19) // 0x80040719 + +#define VTXTERR_OUTOFDISK SRERR_OUTOFDISK // 0x80040205 +#define VTXTERR_NOTSUPPORTED E_NOTIMPL // 0x80004001 +#define VTXTERR_NOTENOUGHDATA AUDERR_NOTENOUGHDATA // 0x80040201 +#define VTXTERR_QUEUEFULL TTSERR_QUEUEFULL // 0x8004020A +#define VTXTERR_VALUEOUTOFRANGE E_UNEXPECTED // 0x8000FFFF +#define VTXTERR_INVALIDWINDOW OLE_E_INVALIDHWND // 0x8004000F +#define VTXTERR_WAVEDEVICEBUSY AUDERR_WAVEDEVICEBUSY // 0x80040203 +#define VTXTERR_WAVEFORMATNOTSUPPORTED AUDERR_WAVEFORMATNOTSUPPORTED // 0x80040202 +#define VTXTERR_INVALIDCHAR SRERR_INVALIDCHAR // 0x80040208 + + +// ILexPronounce errors +#define LEXERR_INVALIDTEXTCHAR LEXERROR(0x01) // 0x80040801 +#define LEXERR_INVALIDSENSE LEXERROR(0x02) // 0x80040802 +#define LEXERR_NOTINLEX LEXERROR(0x03) // 0x80040803 +#define LEXERR_OUTOFDISK LEXERROR(0x04) // 0x80040804 +#define LEXERR_INVALIDPRONCHAR LEXERROR(0x05) // 0x80040805 +#define LEXERR_ALREADYINLEX LEXWARNING(0x06) // 0x00040806 +#define LEXERR_PRNBUFTOOSMALL LEXERROR(0x07) // 0x80040807 +#define LEXERR_ENGBUFTOOSMALL LEXERROR(0x08) // 0x80040808 +#define LEXERR_INVALIDLEX LEXERROR(0x09) // 0x80040809 + + + +/************************************************************************ +typedefs */ + +typedef LPUNKNOWN FAR * PIUNKNOWN; + +typedef struct { + PVOID pData; + DWORD dwSize; + } SDATA, * PSDATA; + + + +typedef struct { + LANGID LanguageID; + WCHAR szDialect[LANG_LEN]; + } LANGUAGEW, FAR * PLANGUAGEW; + +typedef struct { + LANGID LanguageID; + CHAR szDialect[LANG_LEN]; + } LANGUAGEA, FAR * PLANGUAGEA; + +#ifdef _S_UNICODE +#define LANGUAGE LANGUAGEW +#define PLANGUAGE PLANGUAGEW +#else +#define LANGUAGE LANGUAGEA +#define PLANGUAGE PLANGUAGEA +#endif // _S_UNICODE + + +typedef struct { + HRESULT hRes; + WCHAR szStrings[512]; + } SPCHERRORW, FAR * PSPCHERRORW; + +typedef struct { + HRESULT hRes; + CHAR szStrings[512]; + } SPCHERRORA, FAR * PSPCHERRORA; + +#ifdef _S_UNICODE +#define SPCHERROR SPCHERRORW +#define PSPCHERROR PSPCHERRORW +#else +#define SPCHERROR SPCHERRORA +#define PSPCHERROR PSPCHERRORA +#endif // _S_UNICODE + + + +typedef unsigned __int64 QWORD, * PQWORD; + +typedef enum { + CHARSET_TEXT = 0, + CHARSET_IPAPHONETIC = 1, + CHARSET_ENGINEPHONETIC = 2 + } VOICECHARSET; + +typedef enum _VOICEPARTOFSPEECH { + VPS_UNKNOWN = 0, + VPS_NOUN = 1, + VPS_VERB = 2, + VPS_ADVERB = 3, + VPS_ADJECTIVE = 4, + VPS_PROPERNOUN = 5, + VPS_PRONOUN = 6, + VPS_CONJUNCTION = 7, + VPS_CARDINAL = 8, + VPS_ORDINAL = 9, + VPS_DETERMINER = 10, + VPS_QUANTIFIER = 11, + VPS_PUNCTUATION = 12, + VPS_CONTRACTION = 13, + VPS_INTERJECTION = 14, + VPS_ABBREVIATION = 15, + VPS_PREPOSITION = 16 + } VOICEPARTOFSPEECH; + + +typedef struct { + DWORD dwNextPhonemeNode; + DWORD dwUpAlternatePhonemeNode; + DWORD dwDownAlternatePhonemeNode; + DWORD dwPreviousPhonemeNode; + DWORD dwWordNode; + QWORD qwStartTime; + QWORD qwEndTime; + DWORD dwPhonemeScore; + WORD wVolume; + WORD wPitch; + } SRRESPHONEMENODE, *PSRRESPHONEMENODE; + + +typedef struct { + DWORD dwNextWordNode; + DWORD dwUpAlternateWordNode; + DWORD dwDownAlternateWordNode; + DWORD dwPreviousWordNode; + DWORD dwPhonemeNode; + QWORD qwStartTime; + QWORD qwEndTime; + DWORD dwWordScore; + WORD wVolume; + WORD wPitch; + VOICEPARTOFSPEECH pos; + DWORD dwCFGParse; + DWORD dwCue; + } SRRESWORDNODE, * PSRRESWORDNODE; + + +/************************************************************************ +interfaces */ + +/* + * IAttributes + */ + +/* attribute values */ +#define TTSBASEATTR 0x1000 +#define SRBASEATTR 0x2000 +#define VDCTBASEATTR 0x3000 +#define VCMDBASEATTR 0x4000 +#define VTXTBASEATTR 0x5000 +#define AUDBASEATTR 0x6000 + +#define TTSATTR_PITCH (1) +#define TTSATTR_REALTIME (0) +#define TTSATTR_SPEED (2) +#define TTSATTR_VOLUME (3) +#define TTSATTR_PITCHRANGE (TTSBASEATTR + 5) +#define TTSATTR_PITCHRANGEDEFAULT (TTSBASEATTR + 6) +#define TTSATTR_PITCHRANGEMAX (TTSBASEATTR + 7) +#define TTSATTR_PITCHRANGEMIN (TTSBASEATTR + 8) +#define TTSATTR_PITCHRANGERELATIVE (TTSBASEATTR + 9) +#define TTSATTR_PITCHRANGERELATIVEMAX (TTSBASEATTR + 10) +#define TTSATTR_PITCHRANGERELATIVEMIN (TTSBASEATTR + 11) +#define TTSATTR_PITCHRELATIVE (TTSBASEATTR + 12) +#define TTSATTR_PITCHRELATIVEMAX (TTSBASEATTR + 13) +#define TTSATTR_PITCHRELATIVEMIN (TTSBASEATTR + 14) +#define TTSATTR_PITCHDEFAULT (TTSBASEATTR + 15) +#define TTSATTR_PITCHMAX (TTSBASEATTR + 16) +#define TTSATTR_PITCHMIN (TTSBASEATTR + 17) +#define TTSATTR_SPEEDRELATIVE (TTSBASEATTR + 18) +#define TTSATTR_SPEEDRELATIVEMAX (TTSBASEATTR + 19) +#define TTSATTR_SPEEDRELATIVEMIN (TTSBASEATTR + 20) +#define TTSATTR_SPEEDDEFAULT (TTSBASEATTR + 21) +#define TTSATTR_SPEEDMAX (TTSBASEATTR + 22) +#define TTSATTR_SPEEDMIN (TTSBASEATTR + 23) +#define TTSATTR_THREADPRIORITY (TTSBASEATTR + 24) +#define TTSATTR_SINKFLAGS (TTSBASEATTR + 25) +#define TTSATTR_VOLUMEDEFAULT (TTSBASEATTR + 26) + +#define SRATTR_AUTOGAIN (1) +#define SRATTR_ECHO (3) +#define SRATTR_ENERGYFLOOR (4) +#define SRATTR_MICROPHONE (5) +#define SRATTR_REALTIME (6) +#define SRATTR_SPEAKER (7) +#define SRATTR_TIMEOUT_COMPLETE (8) +#define SRATTR_TIMEOUT_INCOMPLETE (SRBASEATTR + 8) +#define SRATTR_THRESHOLD (2) +#define SRATTR_ACCURACYSLIDER (SRBASEATTR + 10) +#define SRATTR_LEVEL (SRBASEATTR + 11) +#define SRATTR_LISTENINGSTATE (SRBASEATTR + 12) +#define SRATTR_RESULTSINFO (SRBASEATTR + 13) +#define SRATTR_RESULTSINFO_POSSIBLE (SRBASEATTR + 14) +#define SRATTR_SINKFLAGS (SRBASEATTR + 15) +#define SRATTR_THREADPRIORITY (SRBASEATTR + 16) + +#define VDCTATTR_AWAKESTATE (VDCTBASEATTR + 1) +#define VDCTATTR_MODE (VDCTBASEATTR + 2) +#define VDCTATTR_MEMORY (VDCTBASEATTR + 3) +#define VDCTATTR_CORRECTIONRECT (VDCTBASEATTR + 4) +#define VDCTATTR_VISIBLETEXTSTART (VDCTBASEATTR + 5) +#define VDCTATTR_VISIBLETEXTCHARS (VDCTBASEATTR + 6) +#define VDCTATTR_INSERTIONGUI (VDCTBASEATTR + 7) // turn on ISRGramInsertionGUI + +#define VCMDATTR_AWAKESTATE (VCMDBASEATTR + 1) +#define VCMDATTR_DEVICE (VCMDBASEATTR + 2) +#define VCMDATTR_ENABLED (VCMDBASEATTR + 3) +#define VCMDATTR_SRMODE (VCMDBASEATTR + 4) + +#define AUDATTR_USELOWPRIORITY (AUDBASEATTR + 1) // MMAudioSource: if true, send low priority message to card when starting +#define AUDATTR_AUTORETRY (AUDBASEATTR + 2) // MMAudioSource: if true, keep retrying to open wave device if can't initially +#define AUDATTR_TIMERMS (AUDBASEATTR + 3) // MMAudioDest: milliseconds between timer ticks, when send out buffers, etc. +#define AUDATTR_DIRECTFLAGS (AUDBASEATTR + 4) // DirectSoundAudioDest: Flages to send into CreateSoundBuffer + // set these values before waveformatset. Use to do 3-d tts + +// SRATTR_RESULTSINFO flags +#define SRRI_AUDIO SETBIT(0) +#define SRRI_AUDIO_UNCOMPRESSED SETBIT(1) +#define SRRI_ALTERNATIVES SETBIT(2) +#define SRRI_WORDGRAPH SETBIT(3) +#define SRRI_PHONEMEGRAPH SETBIT(4) + +// SRATTR_SINKFLAGS flags +#define SRASF_ATTRIBUTES SETBIT(0) +#define SRASF_INTERFERENCE SETBIT(1) +#define SRASF_SOUND SETBIT(2) +#define SRASF_UTTERANCEBEGIN SETBIT(3) +#define SRASF_UTTERANCEEND SETBIT(4) +#define SRASF_VUMETER SETBIT(5) +#define SRASF_PHRASEHYPOTHESIS SETBIT(6) +#define SRASF_TRAINING SETBIT(7) +#define SRASF_ERRORWARNING SETBIT(8) + +#undef INTERFACE +#define INTERFACE IAttributesW + +// {1D59DED1-E367-11d1-BED7-006008317CE8} +DEFINE_GUID(IID_IAttributesW, +0x1d59ded1, 0xe367, 0x11d1, 0xbe, 0xd7, 0x0, 0x60, 0x8, 0x31, 0x7c, 0xe8); + +DECLARE_INTERFACE_ (IAttributesW, IUnknown) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // AttributesW members + STDMETHOD (DWORDGet) (DWORD, DWORD*) PURE; + STDMETHOD (DWORDSet) (DWORD, DWORD) PURE; + STDMETHOD (StringGet) (DWORD, PWSTR, DWORD, DWORD *) PURE; + STDMETHOD (StringSet) (DWORD, PCWSTR) PURE; + STDMETHOD (MemoryGet) (DWORD, PVOID*, DWORD*) PURE; + STDMETHOD (MemorySet) (DWORD, PVOID, DWORD) PURE; + }; + +typedef IAttributesW FAR * PIATTRIBUTESW; + + +#undef INTERFACE +#define INTERFACE IAttributesA + +// {1D59DED2-E367-11d1-BED7-006008317CE8} +DEFINE_GUID(IID_IAttributesA, +0x1d59ded2, 0xe367, 0x11d1, 0xbe, 0xd7, 0x0, 0x60, 0x8, 0x31, 0x7c, 0xe8); + +DECLARE_INTERFACE_ (IAttributesA, IUnknown) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // AttributesA members + STDMETHOD (DWORDGet) (DWORD, DWORD*) PURE; + STDMETHOD (DWORDSet) (DWORD, DWORD) PURE; + STDMETHOD (StringGet) (DWORD, PSTR, DWORD, DWORD *) PURE; + STDMETHOD (StringSet) (DWORD, PCSTR) PURE; + STDMETHOD (MemoryGet) (DWORD, PVOID*, DWORD*) PURE; + STDMETHOD (MemorySet) (DWORD, PVOID, DWORD) PURE; + }; + +typedef IAttributesA FAR * PIATTRIBUTESA; + + +#ifdef _S_UNICODE + #define IAttributes IAttributesW + #define IID_IAttributes IID_IAttributesW + #define PIATTRIBUTES PIATTRIBUTESW + +#else + #define IAttributes IAttributesA + #define IID_IAttributes IID_IAttributesA + #define PIATTRIBUTES PIATTRIBUTESA + +#endif // _S_UNICODE + + +/* + * ISpchError + */ + +#undef INTERFACE +#define INTERFACE ISpchErrorW + +// {9B445335-E39F-11d1-BED7-006008317CE8} +DEFINE_GUID(IID_ISpchErrorW, +0x9b445335, 0xe39f, 0x11d1, 0xbe, 0xd7, 0x0, 0x60, 0x8, 0x31, 0x7c, 0xe8); + +DECLARE_INTERFACE_ (ISpchErrorW, IUnknown) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // SpchError members + STDMETHOD (LastErrorGet) (THIS_ SPCHERRORW *) PURE; + STDMETHOD (ErrorMessageGet) (THIS_ WCHAR *, DWORD, DWORD *) PURE; + }; + +typedef ISpchErrorW FAR * PISPCHERRORW; + + +#undef INTERFACE +#define INTERFACE ISpchErrorA + +// {9B445336-E39F-11d1-BED7-006008317CE8} +DEFINE_GUID(IID_ISpchErrorA, +0x9b445336, 0xe39f, 0x11d1, 0xbe, 0xd7, 0x0, 0x60, 0x8, 0x31, 0x7c, 0xe8); + +DECLARE_INTERFACE_ (ISpchErrorA, IUnknown) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // SpchError members + STDMETHOD (LastErrorGet) (THIS_ SPCHERRORA *) PURE; + STDMETHOD (ErrorMessageGet) (THIS_ CHAR *, DWORD, DWORD *) PURE; + }; + +typedef ISpchErrorA FAR * PISPCHERRORA; +#ifdef _S_UNICODE + #define ISpchError ISpchErrorW + #define IID_ISpchError IID_ISpchErrorW + #define PISPCHERROR PISPCHERRORW + +#else + #define ISpchError ISpchErrorA + #define IID_ISpchError IID_ISpchErrorA + #define PISPCHERROR PISPCHERRORA + +#endif // _S_UNICODE + + + + + +/* + * ILexPronounce + */ + +#undef INTERFACE +#define INTERFACE ILexPronounceW + +DEFINE_GUID(IID_ILexPronounceW, 0x090CD9A2, 0xDA1A, 0x11CD, 0xB3, 0xCA, 0x0, 0xAA, 0x0, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ILexPronounceW, IUnknown) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // LexPronounceW members + STDMETHOD (Add) (THIS_ VOICECHARSET, PCWSTR, PCWSTR, + VOICEPARTOFSPEECH, PVOID, DWORD) PURE; + STDMETHOD (Get) (THIS_ VOICECHARSET, PCWSTR, WORD, PWSTR, + DWORD, DWORD *, VOICEPARTOFSPEECH *, PVOID, + DWORD, DWORD *) PURE; + STDMETHOD (Remove) (THIS_ PCWSTR, WORD) PURE; + }; + +typedef ILexPronounceW FAR * PILEXPRONOUNCEW; + + +#undef INTERFACE +#define INTERFACE ILexPronounceA + +DEFINE_GUID(IID_ILexPronounceA, 0x2F26B9C0L, 0xDB31, 0x11CD, 0xB3, 0xCA, 0x00, 0xAA, 0x00, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ILexPronounceA, IUnknown) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // LexPronounceA members + STDMETHOD (Add) (THIS_ VOICECHARSET, PCSTR, PCSTR, + VOICEPARTOFSPEECH, PVOID, DWORD) PURE; + STDMETHOD (Get) (THIS_ VOICECHARSET, PCSTR, WORD, PSTR, + DWORD, DWORD *, VOICEPARTOFSPEECH *, PVOID, + DWORD, DWORD *) PURE; + STDMETHOD (Remove) (THIS_ PCSTR, WORD) PURE; + }; + +typedef ILexPronounceA FAR * PILEXPRONOUNCEA; + + +#ifdef _S_UNICODE + #define ILexPronounce ILexPronounceW + #define IID_ILexPronounce IID_ILexPronounceW + #define PILEXPRONOUNCE PILEXPRONOUNCEW + +#else + #define ILexPronounce ILexPronounceA + #define IID_ILexPronounce IID_ILexPronounceA + #define PILEXPRONOUNCE PILEXPRONOUNCEA + +#endif // _S_UNICODE + + +/* + * ILexPronounce2 + */ + +#define ILP2_ACTIVE SETBIT(0) +#define ILP2_USER SETBIT(1) +#define ILP2_BACKUP SETBIT(2) +#define ILP2_LTS SETBIT(3) + +#undef INTERFACE +#define INTERFACE ILexPronounce2W + +// {D6E56341-B3EA-11d1-AFA5-0000F81E880D} +DEFINE_GUID(IID_ILexPronounce2W, 0xd6e56341, 0xb3ea, 0x11d1, 0xaf, 0xa5, 0x0, 0x0, 0xf8, 0x1e, 0x88, 0xd); + +DECLARE_INTERFACE_ (ILexPronounce2W, ILexPronounceW) { + + // LexPronounceW members + STDMETHOD (Add) (THIS_ VOICECHARSET, PCWSTR, PCWSTR, + VOICEPARTOFSPEECH, PVOID, DWORD) PURE; + STDMETHOD (Get) (THIS_ VOICECHARSET, PCWSTR, WORD, PWSTR, + DWORD, DWORD *, VOICEPARTOFSPEECH *, PVOID, + DWORD, DWORD *) PURE; + STDMETHOD (Remove) (THIS_ PCWSTR, WORD) PURE; + + // LexPronounce2W members + STDMETHOD (AddTo) (THIS_ DWORD, VOICECHARSET, PCWSTR, PCWSTR, + VOICEPARTOFSPEECH, PVOID, DWORD) PURE; + STDMETHOD (GetFrom) (THIS_ DWORD, VOICECHARSET, PCWSTR, WORD, PWSTR, + DWORD, DWORD *, VOICEPARTOFSPEECH *, PVOID, + DWORD, DWORD *) PURE; + STDMETHOD (RemoveFrom) (THIS_ DWORD, PCWSTR, WORD) PURE; + STDMETHOD (QueryLexicons) (THIS_ BOOL, DWORD *) PURE; + STDMETHOD (ChangeSpelling) (THIS_ DWORD, PCWSTR, PCWSTR) PURE; + }; + +typedef ILexPronounce2W FAR * PILEXPRONOUNCE2W; + + +#undef INTERFACE +#define INTERFACE ILexPronounce2A + +// {D6E56342-B3EA-11d1-AFA5-0000F81E880D} +DEFINE_GUID(IID_ILexPronounce2A, 0xd6e56342, 0xb3ea, 0x11d1, 0xaf, 0xa5, 0x0, 0x0, 0xf8, 0x1e, 0x88, 0xd); + +DECLARE_INTERFACE_ (ILexPronounce2A, ILexPronounceA) { + + // LexPronounceA members + STDMETHOD (Add) (THIS_ VOICECHARSET, PCSTR, PCSTR, + VOICEPARTOFSPEECH, PVOID, DWORD) PURE; + STDMETHOD (Get) (THIS_ VOICECHARSET, PCSTR, WORD, PSTR, + DWORD, DWORD *, VOICEPARTOFSPEECH *, PVOID, + DWORD, DWORD *) PURE; + STDMETHOD (Remove) (THIS_ PCSTR, WORD) PURE; + + // LexPronounceA members + STDMETHOD (AddTo) (THIS_ DWORD, VOICECHARSET, PCSTR, PCSTR, + VOICEPARTOFSPEECH, PVOID, DWORD) PURE; + STDMETHOD (GetFrom) (THIS_ DWORD, VOICECHARSET, PCSTR, WORD, PSTR, + DWORD, DWORD *, VOICEPARTOFSPEECH *, PVOID, + DWORD, DWORD *) PURE; + STDMETHOD (RemoveFrom) (THIS_ DWORD, PCSTR, WORD) PURE; + STDMETHOD (QueryLexicons) (THIS_ BOOL, DWORD *) PURE; + STDMETHOD (ChangeSpelling) (THIS_ DWORD, PCSTR, PCSTR) PURE; + }; + +typedef ILexPronounce2A FAR * PILEXPRONOUNCE2A; + + +#ifdef _S_UNICODE + #define ILexPronounce2 ILexPronounce2W + #define IID_ILexPronounce2 IID_ILexPronounce2W + #define PILEXPRONOUNCE2 PILEXPRONOUNCE2W + +#else + #define ILexPronounce2 ILexPronounce2A + #define IID_ILexPronounce2 IID_ILexPronounce2A + #define PILEXPRONOUNCE2 PILEXPRONOUNCE2A + +#endif // _S_UNICODE + +/************************************************************************ +Speech Tools +*/ + +/* defines */ +// ISTMicWizard->Wizard +#define STMWU_CNC 0 +#define STMWU_DICTATION 1 +#define STMWU_LOWERGAIN 0x10000 // if on, tries for a lower gain +#define STMWU_NOAUTOGAIN 0x20000 // if on, doesn't adjust the autogain bit + +#define STMWF_CANSKIP SETBIT(0) + +// MICWIZARDINFO +#define STMWI_UNKNOWN 0 +#define STMWI_CLOSETALK 1 +#define STMWI_EARPIECE 2 +#define STMWI_HANDSET 3 +#define STMWI_CLIPON 4 +#define STMWI_DESKTOP 5 +#define STMWI_HANDHELD 6 +#define STMWI_TOPMONITOR 7 +#define STMWI_INMONITOR 8 +#define STMWI_KEYBOARD 9 +#define STMWI_REMOTE 10 + +#define STMWIS_UNKNOWN 0 +#define STMWIS_SPEAKERS 1 +#define STMWIS_HEADPHONES 2 +#define STMWIS_BOTH 3 + +/* structures */ + +typedef struct { + BOOL fHasRunMicWizard; + DWORD dwWaveInDevice; + DWORD dwMicrophoneType; + WCHAR szMicString[64]; +} MICWIZARDINFO, *PMICWIZARDINFO; + +typedef struct { + BOOL fHasRunMicWizard; + DWORD dwWaveInDevice; + DWORD dwMicrophoneType; + WCHAR szMicString[64]; + DWORD dwSpeakers; + DWORD dwLastMicLevel; + DWORD dwMicLevelDeviceID; +} MICWIZARDINFO2, *PMICWIZARDINFO2; + +// STLexDlg +#define STLD_DISABLEREMOVE SETBIT(0) +#define STLD_DISABLEADD SETBIT(1) +#define STLD_FORCEEDIT SETBIT(2) +#define STLD_DISABLEPRONADDREMOVE SETBIT(3) +#define STLD_TEST SETBIT(4) +#define STLD_DISABLERENAME SETBIT(5) +#define STLD_CHANGEPRONADDS SETBIT(6) + +/* class IDs */ +// {B9F11A95-90E3-11d0-8D77-00A0C9034A7E} +DEFINE_GUID(CLSID_STMicWizard, +0xb9f11a95, 0x90e3, 0x11d0, 0x8d, 0x77, 0x0, 0xa0, 0xc9, 0x3, 0x4a, 0x7e); + +// {92655FB1-ADF9-11d1-BEB9-006008317CE8} +DEFINE_GUID(CLSID_STLexDlg, +0x92655fb1, 0xadf9, 0x11d1, 0xbe, 0xb9, 0x0, 0x60, 0x8, 0x31, 0x7c, 0xe8); + +// {B9F11A96-90E3-11d0-8D77-00A0C9034A7E} +DEFINE_GUID(CLSID_STPhoneConv, +0xb9f11a96, 0x90e3, 0x11d0, 0x8d, 0x77, 0x0, 0xa0, 0xc9, 0x3, 0x4a, 0x7e); + + +/* interfaces */ +// ISTMicWizard Interface + +#undef INTERFACE +#define INTERFACE ISTMicWizard + +// {B9F11A97-90E3-11d0-8D77-00A0C9034A7E} +DEFINE_GUID(IID_ISTMicWizard, +0xb9f11a97, 0x90e3, 0x11d0, 0x8d, 0x77, 0x0, 0xa0, 0xc9, 0x3, 0x4a, 0x7e); + +DECLARE_INTERFACE_ (ISTMicWizard, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISTMicWizard members + STDMETHOD (InfoGet) (THIS_ PMICWIZARDINFO) PURE; + STDMETHOD (InfoSet) (THIS_ PMICWIZARDINFO) PURE; + STDMETHOD (Wizard) (THIS_ HWND, DWORD, DWORD, DWORD, DWORD) PURE; + }; + +typedef ISTMicWizard FAR * PISTMICWIZARD; + + +// ISTLexDlg Interface + +#undef INTERFACE +#define INTERFACE ISTLexDlg + +// {A27B8A01-ADF9-11d1-BEB9-006008317CE8} +DEFINE_GUID(IID_ISTLexDlg, +0xa27b8a01, 0xadf9, 0x11d1, 0xbe, 0xb9, 0x0, 0x60, 0x8, 0x31, 0x7c, 0xe8); + +DECLARE_INTERFACE_ (ISTLexDlg, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISTLexDlg members + STDMETHOD (LexDlg) (THIS_ HWND, PCWSTR, DWORD, LANGID, + LPUNKNOWN, LPUNKNOWN, LPUNKNOWN, PCWSTR, PCWSTR) PURE; + }; + +typedef ISTLexDlg FAR * PISTLEXDLG; + +// ISTPhoneConv Interface + +#undef INTERFACE +#define INTERFACE ISTPhoneConv + +// {B9F11A98-90E3-11d0-8D77-00A0C9034A7E} +DEFINE_GUID(IID_ISTPhoneConv, +0xb9f11a98, 0x90e3, 0x11d0, 0x8d, 0x77, 0x0, 0xa0, 0xc9, 0x3, 0x4a, 0x7e); + +DECLARE_INTERFACE_ (ISTPhoneConv, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISTPhoneConv members + STDMETHOD (FromIPA) (THIS_ LPCWSTR, DWORD *, LPWSTR, DWORD, DWORD*) PURE; + STDMETHOD (Get) (THIS_ SDATA *) PURE; + STDMETHOD (SetByLang) (THIS_ LANGID) PURE; + STDMETHOD (SetByText) (THIS_ LPCWSTR) PURE; + STDMETHOD (ToIPA) (THIS_ LPCWSTR, DWORD *, LPWSTR, DWORD, DWORD*) PURE; + }; + +typedef ISTPhoneConv FAR * PISTPHONECONV; + + + +/************************************************************************ +Audio source/destiantion API +*/ + +/************************************************************************ +defines */ + +// AudioStop +#define IANSRSN_NODATA 0 +#define IANSRSN_PRIORITY 1 +#define IANSRSN_INACTIVE 2 +#define IANSRSN_EOF 3 + +// IAudioSourceInstrumented::StateSet +#define IASISTATE_PASSTHROUGH 0 +#define IASISTATE_PASSNOTHING 1 +#define IASISTATE_PASSREADFROMWAVE 2 +#define IASISTATE_PASSWRITETOWAVE 3 + +/************************************************************************ +typedefs */ + +/************************************************************************ +Class IDs */ +// {CB96B400-C743-11cd-80E5-00AA003E4B50} +DEFINE_GUID(CLSID_MMAudioDest, +0xcb96b400, 0xc743, 0x11cd, 0x80, 0xe5, 0x0, 0xaa, 0x0, 0x3e, 0x4b, 0x50); + +// {D24FE500-C743-11cd-80E5-00AA003E4B50} +DEFINE_GUID(CLSID_MMAudioSource, +0xd24fe500, 0xc743, 0x11cd, 0x80, 0xe5, 0x0, 0xaa, 0x0, 0x3e, 0x4b, 0x50); + +// {D4023720-E4B9-11cf-8D56-00A0C9034A7E} +DEFINE_GUID(CLSID_InstAudioSource, +0xd4023720, 0xe4b9, 0x11cf, 0x8d, 0x56, 0x0, 0xa0, 0xc9, 0x3, 0x4a, 0x7e); + +// {D4123720-E4B9-11cf-8D56-00A0C9034A7E} +DEFINE_GUID(CLSID_SuspAudioSource, +0xd4123720, 0xe4b9, 0x11cf, 0x8d, 0x56, 0x0, 0xa0, 0xc9, 0x3, 0x4a, 0x7e); + +// {D4523720-E4B9-11cf-8D56-00A0C9034A7E} +DEFINE_GUID(CLSID_AudioSourceFile, +0xd4523720, 0xe4b9, 0x11cf, 0x8d, 0x56, 0x0, 0xa0, 0xc9, 0x3, 0x4a, 0x7e); + +// {D4523720-E4B9-11cf-8D56-00A0C9034A7E} +DEFINE_GUID(CLSID_AudioDestFile, +0xd4623720, 0xe4b9, 0x11cf, 0x8d, 0x56, 0x0, 0xa0, 0xc9, 0x3, 0x4a, 0x7e); + +// {B9F11A90-90E3-11d0-8D77-00A0C9034A7E} +DEFINE_GUID(CLSID_AudioDestDirect, +0xb9f11a90, 0x90e3, 0x11d0, 0x8d, 0x77, 0x0, 0xa0, 0xc9, 0x3, 0x4a, 0x7e); + +// {32C35401-D04F-11d0-99B3-00AA004CD65C} +DEFINE_GUID(CLSID_AudioSourceDirect, +0x32c35401, 0xd04f, 0x11d0, 0x99, 0xb3, 0x0, 0xaa, 0x0, 0x4c, 0xd6, 0x5c); + + +/************************************************************************ +interfaces */ + +// IAudio +#undef INTERFACE +#define INTERFACE IAudio + +// {F546B340-C743-11cd-80E5-00AA003E4B50} +DEFINE_GUID(IID_IAudio, +0xf546b340, 0xc743, 0x11cd, 0x80, 0xe5, 0x0, 0xaa, 0x0, 0x3e, 0x4b, 0x50); + +DECLARE_INTERFACE_ (IAudio, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IAudio members + STDMETHOD (Flush) (THIS) PURE; + STDMETHOD (LevelGet) (THIS_ DWORD *) PURE; + STDMETHOD (LevelSet) (THIS_ DWORD) PURE; + STDMETHOD (PassNotify) (THIS_ PVOID, IID) PURE; + STDMETHOD (PosnGet) (THIS_ PQWORD) PURE; + STDMETHOD (Claim) (THIS) PURE; + STDMETHOD (UnClaim) (THIS) PURE; + STDMETHOD (Start) (THIS) PURE; + STDMETHOD (Stop) (THIS) PURE; + STDMETHOD (TotalGet) (THIS_ PQWORD) PURE; + STDMETHOD (ToFileTime) (THIS_ PQWORD, FILETIME *) PURE; + STDMETHOD (WaveFormatGet) (THIS_ PSDATA) PURE; + STDMETHOD (WaveFormatSet) (THIS_ SDATA) PURE; + }; + +typedef IAudio FAR * PIAUDIO; + +// IAudioDest + +#undef INTERFACE +#define INTERFACE IAudioDest + +// {2EC34DA0-C743-11cd-80E5-00AA003E4B50} +DEFINE_GUID(IID_IAudioDest, +0x2ec34da0, 0xc743, 0x11cd, 0x80, 0xe5, 0x0, 0xaa, 0x0, 0x3e, 0x4b, 0x50); + +DECLARE_INTERFACE_ (IAudioDest, IUnknown) { + + // IUnknown members + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IAudioDest members + STDMETHOD (FreeSpace) (THIS_ DWORD *, BOOL *) PURE; + STDMETHOD (DataSet) (THIS_ PVOID, DWORD) PURE; + STDMETHOD (BookMark) (THIS_ DWORD) PURE; + }; + +typedef IAudioDest FAR * PIAUDIODEST; + + + +// IAudioDestNotifySink + +#undef INTERFACE +#define INTERFACE IAudioDestNotifySink + +// {ACB08C00-C743-11cd-80E5-00AA003E4B50} +DEFINE_GUID(IID_IAudioDestNotifySink, +0xacb08c00, 0xc743, 0x11cd, 0x80, 0xe5, 0x0, 0xaa, 0x0, 0x3e, 0x4b, 0x50); + +DECLARE_INTERFACE_ (IAudioDestNotifySink, IUnknown) { + // IUnknown members + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IAudioDestNotifySink members + STDMETHOD (AudioStop) (THIS_ WORD) PURE; + STDMETHOD (AudioStart) (THIS) PURE; + STDMETHOD (FreeSpace) (THIS_ DWORD, BOOL) PURE; + STDMETHOD (BookMark) (THIS_ DWORD, BOOL) PURE; + }; + +typedef IAudioDestNotifySink FAR * PIAUDIODESTNOTIFYSINK; + + + +// IAudioMultiMediaDevice + +#undef INTERFACE +#define INTERFACE IAudioMultiMediaDevice + +// {B68AD320-C743-11cd-80E5-00AA003E4B50} +DEFINE_GUID(IID_IAudioMultiMediaDevice, +0xb68ad320, 0xc743, 0x11cd, 0x80, 0xe5, 0x0, 0xaa, 0x0, 0x3e, 0x4b, 0x50); + +DECLARE_INTERFACE_ (IAudioMultiMediaDevice, IUnknown) { + // IUnknown members + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IAudioMultiMediaDevice members + STDMETHOD (CustomMessage) (THIS_ UINT, SDATA) PURE; + STDMETHOD (DeviceNumGet) (THIS_ DWORD*) PURE; + STDMETHOD (DeviceNumSet) (THIS_ DWORD) PURE; + }; + +typedef IAudioMultiMediaDevice FAR * PIAUDIOMULTIMEDIADEVICE; + + + +// IAudioSource +#undef INTERFACE +#define INTERFACE IAudioSource + +// {BC06A220-C743-11cd-80E5-00AA003E4B50} +DEFINE_GUID(IID_IAudioSource, +0xbc06a220, 0xc743, 0x11cd, 0x80, 0xe5, 0x0, 0xaa, 0x0, 0x3e, 0x4b, 0x50); + +DECLARE_INTERFACE_ (IAudioSource, IUnknown) { + // IUnknown members + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IAudioSource members + STDMETHOD (DataAvailable) (THIS_ DWORD *, BOOL *) PURE; + STDMETHOD (DataGet) (THIS_ PVOID, DWORD, DWORD *) PURE; + }; + +typedef IAudioSource FAR * PIAUDIOSOURCE; + + + +// IAudioSourceInstrumented +#undef INTERFACE +#define INTERFACE IAudioSourceInstrumented + +// {D4023721-E4B9-11cf-8D56-00A0C9034A7E} +DEFINE_GUID(IID_IAudioSourceInstrumented, +0xd4023721, 0xe4b9, 0x11cf, 0x8d, 0x56, 0x0, 0xa0, 0xc9, 0x3, 0x4a, 0x7e); + +DECLARE_INTERFACE_ (IAudioSourceInstrumented, IUnknown) { + // IUnknown members + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IAudioSourceInstrumented members + STDMETHOD (AudioSource) (THIS_ LPUNKNOWN) PURE; + STDMETHOD (RegistryGet) (THIS_ PWSTR, DWORD, DWORD *) PURE; + STDMETHOD (RegistrySet) (THIS_ PCWSTR) PURE; + STDMETHOD (StateGet) (THIS_ DWORD*) PURE; + STDMETHOD (StateSet) (THIS_ DWORD) PURE; + STDMETHOD (WaveFileReadGet)(THIS_ PWSTR, DWORD, DWORD *) PURE; + STDMETHOD (WaveFileReadSet)(THIS_ PCWSTR) PURE; + STDMETHOD (WaveFileWriteGet)(THIS_ PWSTR, DWORD, DWORD *) PURE; + STDMETHOD (WaveFileWriteSet)(THIS_ PCWSTR) PURE; + }; + +typedef IAudioSourceInstrumented FAR * PIAUDIOSOURCEINSTRUMENTED; + + +// IAudioSourceSusp +#undef INTERFACE +#define INTERFACE IAudioSourceSusp + +// {D4123721-E4B9-11cf-8D56-00A0C9034A7E} +DEFINE_GUID(IID_IAudioSourceSusp, +0xd4123721, 0xe4b9, 0x11cf, 0x8d, 0x56, 0x0, 0xa0, 0xc9, 0x3, 0x4a, 0x7e); + +DECLARE_INTERFACE_ (IAudioSourceSusp, IUnknown) { + // IUnknown members + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IAudioSourceSusp members + STDMETHOD (AudioSource) (THIS_ LPUNKNOWN) PURE; + STDMETHOD (Pause) (THIS) PURE; + STDMETHOD (Resume) (THIS) PURE; + }; + +typedef IAudioSourceSusp FAR * PIAUDIOSOURCESUSP; + + +// IAudioSourceNotifySink +#undef INTERFACE +#define INTERFACE IAudioSourceNotifySink + +// {C0BD9A80-C743-11cd-80E5-00AA003E4B50} +DEFINE_GUID(IID_IAudioSourceNotifySink, +0xc0bd9a80, 0xc743, 0x11cd, 0x80, 0xe5, 0x0, 0xaa, 0x0, 0x3e, 0x4b, 0x50); + +DECLARE_INTERFACE_ (IAudioSourceNotifySink, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IAudioSourceNotifySink members + STDMETHOD (AudioStop) (THIS_ WORD) PURE; + STDMETHOD (AudioStart) (THIS) PURE; + STDMETHOD (DataAvailable) (THIS_ DWORD, BOOL) PURE; + STDMETHOD (Overflow) (THIS_ DWORD) PURE; + }; + +typedef IAudioSourceNotifySink FAR * PIAUDIOSOURCENOTIFYSINK; + +// IAudioFileNotifySink Interface +#undef INTERFACE +#define INTERFACE IAudioFileNotifySink + +// {492FE490-51E7-11b9-C000-FED6CBA3B1A9} +DEFINE_GUID( IID_IAudioFileNotifySink, 0x492fe490, 0x51e7, 0x11b9, 0xc0, 0x0, 0xfe, 0xd6, 0xcb, 0xa3, 0xb1, 0xa9); + +DECLARE_INTERFACE_ (IAudioFileNotifySink, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IAudioSourceNotifySink members + STDMETHOD (FileBegin) (THIS_ DWORD) PURE; + STDMETHOD (FileEnd) (THIS_ DWORD) PURE; + STDMETHOD (QueueEmpty) (THIS) PURE; + STDMETHOD (Posn) (THIS_ QWORD, QWORD) PURE; + }; + +typedef IAudioFileNotifySink FAR * PIAUDIOFILENOTIFYSINK; + + + +// IAudioFile Interface + +#undef INTERFACE +#define INTERFACE IAudioFile + +// {FD7C2320-3D6D-11b9-C000-FED6CBA3B1A9} +DEFINE_GUID( IID_IAudioFile, 0xfd7c2320, 0x3d6d, 0x11b9, 0xc0, 0x0, 0xfe, 0xd6, 0xcb, 0xa3, 0xb1, 0xa9); + +DECLARE_INTERFACE_ (IAudioFile, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IAudioFile members + STDMETHOD (Register) (THIS_ PIAUDIOFILENOTIFYSINK) PURE; + STDMETHOD (Set) (THIS_ LPCWSTR pszFile, DWORD dwID) PURE; + STDMETHOD (Add) (THIS_ LPCWSTR pszFile, DWORD dwID) PURE; + STDMETHOD (Flush) (THIS) PURE; + STDMETHOD (RealTimeSet) (THIS_ WORD wTime) PURE; + STDMETHOD (RealTimeGet) (THIS_ WORD *pwTime) PURE; + }; + +typedef IAudioFile FAR * PIAUDIOFILE; + + +// IAudioDirect Interface + +#undef INTERFACE +#define INTERFACE IAudioDirect + +// {B9F11A94-90E3-11d0-8D77-00A0C9034A7E} +DEFINE_GUID(IID_IAudioDirect, +0xb9f11a94, 0x90e3, 0x11d0, 0x8d, 0x77, 0x0, 0xa0, 0xc9, 0x3, 0x4a, 0x7e); + +DECLARE_INTERFACE_ (IAudioDirect, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IAudioDirect members + STDMETHOD (Init) (THIS_ PVOID, REFIID) PURE; + }; + +typedef IAudioDirect FAR * PIAUDIODIRECT; + + + +/************************************************************************ +defines */ +/* SRINFO */ +#define SRMI_NAMELEN SVFN_LEN + +#define SRSEQUENCE_DISCRETE (0) +#define SRSEQUENCE_CONTINUOUS (1) +#define SRSEQUENCE_WORDSPOT (2) +#define SRSEQUENCE_CONTCFGDISCDICT (3) + +#define SRGRAM_CFG SETBIT(0) +#define SRGRAM_DICTATION SETBIT(1) +#define SRGRAM_LIMITEDDOMAIN SETBIT(2) + +#define SRFEATURE_INDEPSPEAKER SETBIT(0) +#define SRFEATURE_INDEPMICROPHONE SETBIT(1) +#define SRFEATURE_TRAINWORD SETBIT(2) +#define SRFEATURE_TRAINPHONETIC SETBIT(3) +#define SRFEATURE_WILDCARD SETBIT(4) +#define SRFEATURE_ANYWORD SETBIT(5) +#define SRFEATURE_PCOPTIMIZED SETBIT(6) +#define SRFEATURE_PHONEOPTIMIZED SETBIT(7) +#define SRFEATURE_GRAMLIST SETBIT(8) +#define SRFEATURE_GRAMLINK SETBIT(9) +#define SRFEATURE_MULTILINGUAL SETBIT(10) +#define SRFEATURE_GRAMRECURSIVE SETBIT(11) +#define SRFEATURE_IPAUNICODE SETBIT(12) +#define SRFEATURE_SINGLEINSTANCE SETBIT(13) +#define SRFEATURE_THREADSAFE SETBIT(14) +#define SRFEATURE_FIXEDAUDIO SETBIT(15) +#define SRFEATURE_IPAWORD SETBIT(16) +#define SRFEATURE_SAPI4 SETBIT(17) + +#define SRI_ILEXPRONOUNCE SETBIT(0) +#define SRI_ISRATTRIBUTES SETBIT(1) +#define SRI_ISRCENTRAL SETBIT(2) +#define SRI_ISRDIALOGS SETBIT(3) +#define SRI_ISRGRAMCOMMON SETBIT(4) +#define SRI_ISRGRAMCFG SETBIT(5) +#define SRI_ISRGRAMDICTATION SETBIT(6) +#define SRI_ISRGRAMINSERTIONGUI SETBIT(7) +#define SRI_ISRESBASIC SETBIT(8) +#define SRI_ISRESMERGE SETBIT(9) +#define SRI_ISRESAUDIO SETBIT(10) +#define SRI_ISRESCORRECTION SETBIT(11) +#define SRI_ISRESEVAL SETBIT(12) +#define SRI_ISRESGRAPH SETBIT(13) +#define SRI_ISRESMEMORY SETBIT(14) +#define SRI_ISRESMODIFYGUI SETBIT(15) +#define SRI_ISRESSPEAKER SETBIT(16) +#define SRI_ISRSPEAKER SETBIT(17) +#define SRI_ISRESSCORES SETBIT(18) +#define SRI_ISRESAUDIOEX SETBIT(19) +#define SRI_ISRGRAMLEXPRON SETBIT(20) +#define SRI_ISRRESGRAPHEX SETBIT(21) +#define SRI_ILEXPRONOUNCE2 SETBIT(22) +#define SRI_IATTRIBUTES SETBIT(23) +#define SRI_ISRSPEAKER2 SETBIT(24) +#define SRI_ISRDIALOGS2 SETBIT(25) + + +// ISRGramCommon::TrainQuery +#define SRGRAMQ_NONE 0 +#define SRGRAMQ_GENERALTRAIN 1 +#define SRGRAMQ_PHRASE 2 +#define SRGRAMQ_DIALOG 3 + +// ISRGramNotifySink::PhraseFinish +#define ISRNOTEFIN_RECOGNIZED SETBIT(0) +#define ISRNOTEFIN_THISGRAMMAR SETBIT(1) +#define ISRNOTEFIN_FROMTHISGRAMMAR SETBIT(2) + +// ISRGramNotifySink::Training +#define SRGNSTRAIN_GENERAL SETBIT(0) +#define SRGNSTRAIN_GRAMMAR SETBIT(1) +#define SRGNSTRAIN_MICROPHONE SETBIT(2) + +// ISRNotifySink::AttribChange +#define ISRNSAC_AUTOGAINENABLE 1 +#define ISRNSAC_THRESHOLD 2 +#define ISRNSAC_ECHO 3 +#define ISRNSAC_ENERGYFLOOR 4 +#define ISRNSAC_MICROPHONE 5 +#define ISRNSAC_REALTIME 6 +#define ISRNSAC_SPEAKER 7 +#define ISRNSAC_TIMEOUT 8 +#define ISRNSAC_STARTLISTENING 9 +#define ISRNSAC_STOPLISTENING 10 + +/* Interference */ +#define SRMSGINT_NOISE (0x0001) +#define SRMSGINT_NOSIGNAL (0x0002) +#define SRMSGINT_TOOLOUD (0x0003) +#define SRMSGINT_TOOQUIET (0x0004) +#define SRMSGINT_AUDIODATA_STOPPED (0x0005) +#define SRMSGINT_AUDIODATA_STARTED (0x0006) +#define SRMSGINT_IAUDIO_STARTED (0x0007) +#define SRMSGINT_IAUDIO_STOPPED (0x0008) + +// Grammar header values +#define SRHDRTYPE_CFG 0 +#define SRHDRTYPE_LIMITEDDOMAIN 1 +#define SRHDRTYPE_DICTATION 2 + +#define SRHDRFLAG_UNICODE SETBIT(0) + +// results objects defines +#define SRRESCUE_COMMA 1 +#define SRRESCUE_DECLARATIVEBEGIN 2 +#define SRRESCUE_DECLARATIVEEND 3 +#define SRRESCUE_IMPERATIVEBEGIN 4 +#define SRRESCUE_IMPERATIVEEND 5 +#define SRRESCUE_INTERROGATIVEBEGIN 6 +#define SRRESCUE_INTERROGATIVEEND 7 +#define SRRESCUE_NOISE 8 +#define SRRESCUE_PAUSE 9 +#define SRRESCUE_SENTENCEBEGIN 10 +#define SRRESCUE_SENTENCEEND 11 +#define SRRESCUE_UM 12 +#define SRRESCUE_WILDCARD 13 +#define SRRESCUE_WORD 14 + +/* SRCFGSYMBOL */ +#define SRCFG_STARTOPERATION (1) +#define SRCFG_ENDOPERATION (2) +#define SRCFG_WORD (3) +#define SRCFG_RULE (4) +#define SRCFG_WILDCARD (5) +#define SRCFG_LIST (6) + +#define SRCFGO_SEQUENCE (1) +#define SRCFGO_ALTERNATIVE (2) +#define SRCFGO_REPEAT (3) +#define SRCFGO_OPTIONAL (4) + + +// Grammar-chunk IDs +#define SRCK_LANGUAGE 1 +#define SRCKCFG_WORDS 2 +#define SRCKCFG_RULES 3 +#define SRCKCFG_EXPORTRULES 4 +#define SRCKCFG_IMPORTRULES 5 +#define SRCKCFG_LISTS 6 +#define SRCKD_TOPIC 7 +#define SRCKD_COMMON 8 +#define SRCKD_GROUP 9 +#define SRCKD_SAMPLE 10 +#define SRCKLD_WORDS 11 +#define SRCKLD_GROUP 12 +#define SRCKLD_SAMPLE 13 +#define SRCKD_WORDCOUNT 14 +#define SRCKD_NGRAM 15 + +/* TrainQuery */ +#define SRTQEX_REQUIRED (0x0000) +#define SRTQEX_RECOMMENDED (0x0001) + +/* ISRResAudioEx */ +#define SRAUDIOTIMESTAMP_DEFAULT ((QWORD) -1) + +/* ISRResCorrection */ +#define SRCORCONFIDENCE_SOME (0x0001) +#define SRCORCONFIDENCE_VERY (0x0002) + +/* ISRResGraphEx */ +DEFINE_GUID(SRGARC_ACOUSTICSCORE, 0xbf2f5b20, 0xb91d, 0x11d1, 0xb7, 0xbc, 0x0, 0x60, 0x97, 0x98, 0x41, 0xb4); +DEFINE_GUID(SRGARC_WORDTEXT, 0xbf2f5b21, 0xb91d, 0x11d1, 0xb7, 0xbc, 0x0, 0x60, 0x97, 0x98, 0x41, 0xb4); +DEFINE_GUID(SRGARC_NONLEXICALTEXT, 0x62ec00, 0xbaa0, 0x11d1, 0xb7, 0xbd, 0x0, 0x60, 0x97, 0x98, 0x41, 0xb4); +DEFINE_GUID(SRGARC_WORDPRONUNCIATION, 0xbf2f5b22, 0xb91d, 0x11d1, 0xb7, 0xbc, 0x0, 0x60, 0x97, 0x98, 0x41, 0xb4); +DEFINE_GUID(SRGNODE_TIME, 0xbf2f5b23, 0xb91d, 0x11d1, 0xb7, 0xbc, 0x0, 0x60, 0x97, 0x98, 0x41, 0xb4); + +#define SRGEX_ACOUSTICONLY SETBIT(0) +#define SRGEX_LMONLY SETBIT(1) +#define SRGEX_ACOUSTICANDLM SETBIT(2) + +/* ISRResMemory constants */ +#define SRRESMEMKIND_AUDIO SETBIT(0) +#define SRRESMEMKIND_CORRECTION SETBIT(1) +#define SRRESMEMKIND_EVAL SETBIT(2) +#define SRRESMEMKIND_PHONEMEGRAPH SETBIT(3) +#define SRRESMEMKIND_WORDGRAPH SETBIT(4) + +// Attribute minimums and maximums +#define SRATTR_MINAUTOGAIN 0 +#define SRATTR_MAXAUTOGAIN 100 +#define SRATTR_MINENERGYFLOOR 0 +#define SRATTR_MAXENERGYFLOOR 0xffff +#define SRATTR_MINREALTIME 0 +#define SRATTR_MAXREALTIME 0xffffffff +#define SRATTR_MINTHRESHOLD 0 +#define SRATTR_MAXTHRESHOLD 100 +#define SRATTR_MINTOINCOMPLETE 0 +#define SRATTR_MAXTOINCOMPLETE 0xffffffff +#define SRATTR_MINTOCOMPLETE 0 +#define SRATTR_MAXTOCOMPLETE 0xffffffff + + +/************************************************************************ +typedefs */ + +typedef struct { + DWORD dwSize; + DWORD dwUniqueID; + BYTE abData[0]; + } SRCFGRULE, * PSRCFGRULE; + + + +typedef struct { + DWORD dwSize; + DWORD dwRuleNum; + WCHAR szString[0]; + } SRCFGIMPRULEW, * PSRCFGIMPRULEW; + +typedef struct { + DWORD dwSize; + DWORD dwRuleNum; + CHAR szString[0]; + } SRCFGIMPRULEA, * PSRCFGIMPRULEA; + +#ifdef _S_UNICODE +#define SRCFGIMPRULE SRCFGIMPRULEW +#define PSRCFGIMPRULE PSRCFGIMPRULEW +#else +#define SRCFGIMPRULE SRCFGIMPRULEA +#define PSRCFGIMPRULE PSRCFGIMPRULEA +#endif // _S_UNICODE + + + +typedef struct { + DWORD dwSize; + DWORD dwRuleNum; + WCHAR szString[0]; + } SRCFGXRULEW, * PSRCFGXRULEW; + +typedef struct { + DWORD dwSize; + DWORD dwRuleNum; + CHAR szString[0]; + } SRCFGXRULEA, * PSRCFGXRULEA; + +#ifdef _S_UNICODE +#define SRCFGXRULE SRCFGXRULEW +#define PSRCFGXRULE PSRCFGXRULEW +#else +#define SRCFGXRULE SRCFGXRULEA +#define PSRCFGXRULE PSRCFGXRULEA +#endif // _S_UNICODE + + + +typedef struct { + DWORD dwSize; + DWORD dwListNum; + WCHAR szString[0]; + } SRCFGLISTW, * PSRCFGLISTW; + +typedef struct { + DWORD dwSize; + DWORD dwListNum; + CHAR szString[0]; + } SRCFGLISTA, * PSRCFGLISTA; + +#ifdef _S_UNICODE +#define SRCFGLIST SRCFGLISTW +#define PSRCFGLIST PSRCFGLISTW +#else +#define SRCFGLIST SRCFGLISTA +#define PSRCFGLIST PSRCFGLISTA +#endif // _S_UNICODE + + + +typedef struct { + WORD wType; + WORD wProbability; + DWORD dwValue; + } SRCFGSYMBOL, * PSRCFGSYMBOL; + + + +typedef struct { + DWORD dwSize; + DWORD dwWordNum; + WCHAR szWord[0]; + } SRWORDW, * PSRWORDW; + +typedef struct { + DWORD dwSize; + DWORD dwWordNum; + CHAR szWord[0]; + } SRWORDA, * PSRWORDA; + +#ifdef _S_UNICODE +#define SRWORD SRWORDW +#define PSRWORD PSRWORDW +#else +#define SRWORD SRWORDA +#define PSRWORD PSRWORDA +#endif // _S_UNICODE + + + +typedef struct { + DWORD dwSize; + BYTE abWords[0]; + } SRPHRASEW, * PSRPHRASEW; + +typedef struct { + DWORD dwSize; + BYTE abWords[0]; + } SRPHRASEA, * PSRPHRASEA; + +#ifdef _S_UNICODE +#define SRPHRASE SRPHRASEW +#define PSRPHRASE PSRPHRASEW +#else +#define SRPHRASE SRPHRASEA +#define PSRPHRASE PSRPHRASEA +#endif // _S_UNICODE + + + +typedef struct { + DWORD dwType; + DWORD dwFlags; + } SRHEADER, *PSRHEADER; + +typedef struct { + DWORD dwChunkID; + DWORD dwChunkSize; + BYTE avInfo[0]; + } SRCHUNK, *PSRCHUNK; + + + +typedef struct { + GUID gEngineID; + WCHAR szMfgName[SRMI_NAMELEN]; + WCHAR szProductName[SRMI_NAMELEN]; + GUID gModeID; + WCHAR szModeName[SRMI_NAMELEN]; + LANGUAGEW language; + DWORD dwSequencing; + DWORD dwMaxWordsVocab; + DWORD dwMaxWordsState; + DWORD dwGrammars; + DWORD dwFeatures; + DWORD dwInterfaces; + DWORD dwEngineFeatures; + } SRMODEINFOW, * PSRMODEINFOW; + +typedef struct { + GUID gEngineID; + CHAR szMfgName[SRMI_NAMELEN]; + CHAR szProductName[SRMI_NAMELEN]; + GUID gModeID; + CHAR szModeName[SRMI_NAMELEN]; + LANGUAGEA language; + DWORD dwSequencing; + DWORD dwMaxWordsVocab; + DWORD dwMaxWordsState; + DWORD dwGrammars; + DWORD dwFeatures; + DWORD dwInterfaces; + DWORD dwEngineFeatures; + } SRMODEINFOA, * PSRMODEINFOA; + +#ifdef _S_UNICODE +#define SRMODEINFO SRMODEINFOW +#define PSRMODEINFO PSRMODEINFOW +#else +#define SRMODEINFO SRMODEINFOA +#define PSRMODEINFO PSRMODEINFOA +#endif // _S_UNICODE + + + +typedef struct { + DWORD dwEngineID; + DWORD dwMfgName; + DWORD dwProductName; + DWORD dwModeID; + DWORD dwModeName; + DWORD dwLanguage; + DWORD dwDialect; + DWORD dwSequencing; + DWORD dwMaxWordsVocab; + DWORD dwMaxWordsState; + DWORD dwGrammars; + DWORD dwFeatures; + DWORD dwInterfaces; + DWORD dwEngineFeatures; + } SRMODEINFORANK, * PSRMODEINFORANK; + + + +// speech recognition enumeration sharing object +typedef struct { + QWORD qwInstanceID; + DWORD dwDeviceID; + SRMODEINFOW srModeInfo; +} SRSHAREW, * PSRSHAREW; + +typedef struct { + QWORD qwInstanceID; + DWORD dwDeviceID; + SRMODEINFOA srModeInfo; +} SRSHAREA, * PSRSHAREA; + +#ifdef _S_UNICODE +#define SRSHARE SRSHAREW +#define PSRSHARE PSRSHAREW +#else +#define SRSHARE SRSHAREA +#define PSRSHARE PSRSHAREA +#endif // _S_UNICODE + + + + +// ISRCentral::GrammarLoad +typedef enum { + SRGRMFMT_CFG = 0x0000, + SRGRMFMT_LIMITEDDOMAIN = 0x0001, + SRGRMFMT_DICTATION = 0x0002, + SRGRMFMT_CFGNATIVE = 0x8000, + SRGRMFMT_LIMITEDDOMAINNATIVE = 0x8001, + SRGRMFMT_DICTATIONNATIVE = 0x8002, + SRGRMFMT_DRAGONNATIVE1 = 0x8101, + SRGRMFMT_DRAGONNATIVE2 = 0x8102, + SRGRMFMT_DRAGONNATIVE3 = 0x8103 + } SRGRMFMT, * PSRGRMFMT; + +// SRCKD_NGRAM +typedef struct { + QWORD dwTotalCounts; + DWORD dwNumWordsClasses; + DWORD dwWordClassNameOffset; + DWORD dwNumContextGroups; + DWORD dwContextGroupOffset; + DWORD dwNumClasses; + DWORD dwClassOffset; + BYTE bBitsPerWord; + BYTE abFiller[3]; + DWORD adwProbability[256]; + } NGRAMHDR, * PNGRAMHDR; + +typedef struct { + DWORD dwSize; + QWORD dwTotalCounts; + DWORD adwWordClassID[4]; + DWORD dwNumSequential; + DWORD dwNumRandomAccess; + BYTE bBackOffProbToken; + BYTE abFiller[3]; + // WORD or DWORD awRandomAccessWordsClasses[dwNumRandomAccess]; + // BYTE abProbToken[dwNumSequential+dwNumRandomAccess]; + } NGRAMCGHDR, *PNGRAMCGHDR; + + +/************************************************************************ +Class IDs */ + + +// {E02D16C0-C743-11cd-80E5-00AA003E4B50} +DEFINE_GUID(CLSID_SREnumerator, +0xe02d16c0, 0xc743, 0x11cd, 0x80, 0xe5, 0x0, 0xaa, 0x0, 0x3e, 0x4b, 0x50); + + +/************************************************************************ +interfaces */ + + +/* + * ISRAttributes + */ + +#undef INTERFACE +#define INTERFACE ISRAttributesW + +DEFINE_GUID(IID_ISRAttributesW, 0x68A33AA0L, 0x44CD, 0x101B, 0x90, 0xA8, 0x00, 0xAA, 0x00, 0x3E, 0x4B, 0x50); + +DECLARE_INTERFACE_ (ISRAttributesW, IUnknown) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRAttributesW members + STDMETHOD (AutoGainEnableGet) (THIS_ DWORD *) PURE; + STDMETHOD (AutoGainEnableSet) (THIS_ DWORD) PURE; + STDMETHOD (EchoGet) (THIS_ BOOL *) PURE; + STDMETHOD (EchoSet) (THIS_ BOOL) PURE; + STDMETHOD (EnergyFloorGet) (THIS_ WORD *) PURE; + STDMETHOD (EnergyFloorSet) (THIS_ WORD) PURE; + STDMETHOD (MicrophoneGet) (THIS_ PWSTR, DWORD, DWORD *) PURE; + STDMETHOD (MicrophoneSet) (THIS_ PCWSTR) PURE; + STDMETHOD (RealTimeGet) (THIS_ DWORD *) PURE; + STDMETHOD (RealTimeSet) (THIS_ DWORD) PURE; + STDMETHOD (SpeakerGet) (THIS_ PWSTR, DWORD, DWORD *) PURE; + STDMETHOD (SpeakerSet) (THIS_ PCWSTR) PURE; + STDMETHOD (TimeOutGet) (THIS_ DWORD *, DWORD *) PURE; + STDMETHOD (TimeOutSet) (THIS_ DWORD, DWORD) PURE; + STDMETHOD (ThresholdGet) (THIS_ DWORD *) PURE; + STDMETHOD (ThresholdSet) (THIS_ DWORD) PURE; + }; + +typedef ISRAttributesW FAR * PISRATTRIBUTESW; + + +#undef INTERFACE +#define INTERFACE ISRAttributesA + +DEFINE_GUID(IID_ISRAttributesA, 0x2F26B9C1L, 0xDB31, 0x11CD, 0xB3, 0xCA, 0x00, 0xAA, 0x00, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ISRAttributesA, IUnknown) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRAttributesA members + STDMETHOD (AutoGainEnableGet) (THIS_ DWORD *) PURE; + STDMETHOD (AutoGainEnableSet) (THIS_ DWORD) PURE; + STDMETHOD (EchoGet) (THIS_ BOOL *) PURE; + STDMETHOD (EchoSet) (THIS_ BOOL) PURE; + STDMETHOD (EnergyFloorGet) (THIS_ WORD *) PURE; + STDMETHOD (EnergyFloorSet) (THIS_ WORD) PURE; + STDMETHOD (MicrophoneGet) (THIS_ PSTR, DWORD, DWORD *) PURE; + STDMETHOD (MicrophoneSet) (THIS_ PCSTR) PURE; + STDMETHOD (RealTimeGet) (THIS_ DWORD *) PURE; + STDMETHOD (RealTimeSet) (THIS_ DWORD) PURE; + STDMETHOD (SpeakerGet) (THIS_ PSTR, DWORD, DWORD *) PURE; + STDMETHOD (SpeakerSet) (THIS_ PCSTR) PURE; + STDMETHOD (TimeOutGet) (THIS_ DWORD *, DWORD *) PURE; + STDMETHOD (TimeOutSet) (THIS_ DWORD, DWORD) PURE; + STDMETHOD (ThresholdGet) (THIS_ DWORD *) PURE; + STDMETHOD (ThresholdSet) (THIS_ DWORD) PURE; + }; + +typedef ISRAttributesA FAR * PISRATTRIBUTESA; + + +#ifdef _S_UNICODE + #define ISRAttributes ISRAttributesW + #define IID_ISRAttributes IID_ISRAttributesW + #define PISRATTRIBUTES PISRATTRIBUTESW + +#else + #define ISRAttributes ISRAttributesA + #define IID_ISRAttributes IID_ISRAttributesA + #define PISRATTRIBUTES PISRATTRIBUTESA + +#endif // _S_UNICODE + +/* + * ISRCentral + */ + +#undef INTERFACE +#define INTERFACE ISRCentralW + +DEFINE_GUID(IID_ISRCentralW, 0xB9BD3860L, 0x44DB, 0x101B, 0x90, 0xA8, 0x00, 0xAA, 0x00, 0x3E, 0x4B, 0x50); + +DECLARE_INTERFACE_ (ISRCentralW, IUnknown) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRCentralW members + STDMETHOD (ModeGet) (THIS_ PSRMODEINFOW) PURE; + STDMETHOD (GrammarLoad) (THIS_ SRGRMFMT, SDATA, PVOID, IID, LPUNKNOWN *) PURE; + STDMETHOD (Pause) (THIS) PURE; + STDMETHOD (PosnGet) (THIS_ PQWORD) PURE; + STDMETHOD (Resume) (THIS) PURE; + STDMETHOD (ToFileTime) (THIS_ PQWORD, FILETIME *) PURE; + STDMETHOD (Register) (THIS_ PVOID, IID, DWORD*) PURE; + STDMETHOD (UnRegister) (THIS_ DWORD) PURE; + }; + +typedef ISRCentralW FAR * PISRCENTRALW; + + +#undef INTERFACE +#define INTERFACE ISRCentralA + +DEFINE_GUID(IID_ISRCentralA, 0x2F26B9C2L, 0xDB31, 0x11CD, 0xB3, 0xCA, 0x00, 0xAA, 0x00, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ISRCentralA, IUnknown) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRCentralA members + STDMETHOD (ModeGet) (THIS_ PSRMODEINFOA) PURE; + STDMETHOD (GrammarLoad) (THIS_ SRGRMFMT, SDATA, PVOID, IID, LPUNKNOWN *) PURE; + STDMETHOD (Pause) (THIS) PURE; + STDMETHOD (PosnGet) (THIS_ PQWORD) PURE; + STDMETHOD (Resume) (THIS) PURE; + STDMETHOD (ToFileTime) (THIS_ PQWORD, FILETIME *) PURE; + STDMETHOD (Register) (THIS_ PVOID, IID, DWORD*) PURE; + STDMETHOD (UnRegister) (THIS_ DWORD) PURE; + }; + +typedef ISRCentralA FAR * PISRCENTRALA; + + +#ifdef _S_UNICODE + #define ISRCentral ISRCentralW + #define IID_ISRCentral IID_ISRCentralW + #define PISRCENTRAL PISRCENTRALW + +#else + #define ISRCentral ISRCentralA + #define IID_ISRCentral IID_ISRCentralA + #define PISRCENTRAL PISRCENTRALA + +#endif // _S_UNICODE + + + +/* + * ISRDialogs + */ + +#undef INTERFACE +#define INTERFACE ISRDialogsW + +DEFINE_GUID(IID_ISRDialogsW, 0xBCFB4C60L, 0x44DB, 0x101B, 0x90, 0xA8, 0x00, 0xAA, 0x00, 0x3E, 0x4B, 0x50); + +DECLARE_INTERFACE_ (ISRDialogsW, IUnknown) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRDialogsW members + STDMETHOD (AboutDlg) (THIS_ HWND, PCWSTR) PURE; + STDMETHOD (GeneralDlg) (THIS_ HWND, PCWSTR) PURE; + STDMETHOD (LexiconDlg) (THIS_ HWND, PCWSTR) PURE; + STDMETHOD (TrainMicDlg) (THIS_ HWND, PCWSTR) PURE; + STDMETHOD (TrainGeneralDlg)(THIS_ HWND, PCWSTR) PURE; + }; + +typedef ISRDialogsW FAR * PISRDIALOGSW; + + +#undef INTERFACE +#define INTERFACE ISRDialogsA + +DEFINE_GUID(IID_ISRDialogsA, 0x05EB6C60L, 0xDBAB, 0x11CD, 0xB3, 0xCA, 0x00, 0xAA, 0x00, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ISRDialogsA, IUnknown) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRDialogsA members + STDMETHOD (AboutDlg) (THIS_ HWND, PCSTR) PURE; + STDMETHOD (GeneralDlg) (THIS_ HWND, PCSTR) PURE; + STDMETHOD (LexiconDlg) (THIS_ HWND, PCSTR) PURE; + STDMETHOD (TrainMicDlg) (THIS_ HWND, PCSTR) PURE; + STDMETHOD (TrainGeneralDlg)(THIS_ HWND, PCSTR) PURE; + }; + +typedef ISRDialogsA FAR * PISRDIALOGSA; + + +#ifdef _S_UNICODE + #define ISRDialogs ISRDialogsW + #define IID_ISRDialogs IID_ISRDialogsW + #define PISRDIALOGS PISRDIALOGSW + +#else + #define ISRDialogs ISRDialogsA + #define IID_ISRDialogs IID_ISRDialogsA + #define PISRDIALOGS PISRDIALOGSA + +#endif + + +/* + * ISRDialogs2 + */ + +#undef INTERFACE +#define INTERFACE ISRDialogs2W + +// {9B445330-E39F-11d1-BED7-006008317CE8} +DEFINE_GUID(IID_ISRDialogs2W, +0x9b445330, 0xe39f, 0x11d1, 0xbe, 0xd7, 0x0, 0x60, 0x8, 0x31, 0x7c, 0xe8); + +DECLARE_INTERFACE_ (ISRDialogs2W, ISRDialogsW) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRDialogs2W members + STDMETHOD (AboutDlg) (THIS_ HWND, PCWSTR) PURE; + STDMETHOD (GeneralDlg) (THIS_ HWND, PCWSTR) PURE; + STDMETHOD (LexiconDlg) (THIS_ HWND, PCWSTR) PURE; + STDMETHOD (TrainMicDlg) (THIS_ HWND, PCWSTR) PURE; + STDMETHOD (TrainGeneralDlg)(THIS_ HWND, PCWSTR) PURE; + + STDMETHOD (TrainPhrasesDlg)(THIS_ HWND, PCWSTR, PCWSTR) PURE; + }; + +typedef ISRDialogs2W FAR * PISRDIALOGS2W; + + +#undef INTERFACE +#define INTERFACE ISRDialogs2A + +// {9B445331-E39F-11d1-BED7-006008317CE8} +DEFINE_GUID(IID_ISRDialogs2A, +0x9b445331, 0xe39f, 0x11d1, 0xbe, 0xd7, 0x0, 0x60, 0x8, 0x31, 0x7c, 0xe8); + +DECLARE_INTERFACE_ (ISRDialogs2A, ISRDialogsA) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRDialogs2A members + STDMETHOD (AboutDlg) (THIS_ HWND, PCSTR) PURE; + STDMETHOD (GeneralDlg) (THIS_ HWND, PCSTR) PURE; + STDMETHOD (LexiconDlg) (THIS_ HWND, PCSTR) PURE; + STDMETHOD (TrainMicDlg) (THIS_ HWND, PCSTR) PURE; + STDMETHOD (TrainGeneralDlg)(THIS_ HWND, PCSTR) PURE; + + STDMETHOD (TrainPhrasesDlg)(THIS_ HWND, PCSTR, PCSTR) PURE; + }; + +typedef ISRDialogs2A FAR * PISRDIALOGS2A; + + +#ifdef _S_UNICODE + #define ISRDialogs2 ISRDialogs2W + #define IID_ISRDialogs2 IID_ISRDialogs2W + #define PISRDIALOGS2 PISRDIALOGS2W + +#else + #define ISRDialogs2 ISRDialogs2A + #define IID_ISRDialogs2 IID_ISRDialogs2A + #define PISRDIALOGS2 PISRDIALOGS2A + +#endif + + +/* + * ISREnum + */ + +#undef INTERFACE +#define INTERFACE ISREnumW + +DEFINE_GUID(IID_ISREnumW, 0xBFA9F1A0L, 0x44DB, 0x101B, 0x90, 0xA8, 0x00, 0xAA, 0x00, 0x3E, 0x4B, 0x50); + +DECLARE_INTERFACE_ (ISREnumW, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISREnumW members + STDMETHOD (Next) (THIS_ ULONG, PSRMODEINFOW, ULONG *) PURE; + STDMETHOD (Skip) (THIS_ ULONG) PURE; + STDMETHOD (Reset) (THIS) PURE; + STDMETHOD (Clone) (THIS_ ISREnumW * FAR *) PURE; + STDMETHOD (Select) (THIS_ GUID, PISRCENTRALW *, LPUNKNOWN) PURE; + }; + +typedef ISREnumW FAR * PISRENUMW; + + +#undef INTERFACE +#define INTERFACE ISREnumA + +DEFINE_GUID(IID_ISREnumA, 0x05EB6C61L, 0xDBAB, 0x11CD, 0xB3, 0xCA, 0x00, 0xAA, 0x00, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ISREnumA, IUnknown) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISREnumA members + STDMETHOD (Next) (THIS_ ULONG, PSRMODEINFOA, ULONG *) PURE; + STDMETHOD (Skip) (THIS_ ULONG) PURE; + STDMETHOD (Reset) (THIS) PURE; + STDMETHOD (Clone) (THIS_ ISREnumA * FAR *) PURE; + STDMETHOD (Select) (THIS_ GUID, PISRCENTRALA *, LPUNKNOWN) PURE; + }; + +typedef ISREnumA FAR * PISRENUMA; + + +#ifdef _S_UNICODE + #define ISREnum ISREnumW + #define IID_ISREnum IID_ISREnumW + #define PISRENUM PISRENUMW + +#else + #define ISREnum ISREnumA + #define IID_ISREnum IID_ISREnumA + #define PISRENUM PISRENUMA + +#endif + + + +/* + * ISRFind + */ + +#undef INTERFACE +#define INTERFACE ISRFindW + +DEFINE_GUID(IID_ISRFindW, 0xC2835060L, 0x44DB, 0x101B, 0x90, 0xA8, 0x00, 0xAA, 0x00, 0x3E, 0x4B, 0x50); + +DECLARE_INTERFACE_ (ISRFindW, IUnknown) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRFindW members + STDMETHOD (Find) (THIS_ PSRMODEINFOW, PSRMODEINFORANK, PSRMODEINFOW) PURE; + STDMETHOD (Select) (THIS_ GUID, PISRCENTRALW *, LPUNKNOWN) PURE; + }; + +typedef ISRFindW FAR * PISRFINDW; + + +#undef INTERFACE +#define INTERFACE ISRFindA + +DEFINE_GUID(IID_ISRFindA, 0x05EB6C62L, 0xDBAB, 0x11CD, 0xB3, 0xCA, 0x00, 0xAA, 0x00, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ISRFindA, IUnknown) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRFindA members + STDMETHOD (Find) (THIS_ PSRMODEINFOA, PSRMODEINFORANK, PSRMODEINFOA) PURE; + STDMETHOD (Select) (THIS_ GUID, PISRCENTRALA *, LPUNKNOWN) PURE; + }; + +typedef ISRFindA FAR * PISRFINDA; + + +#ifdef _S_UNICODE + #define ISRFind ISRFindW + #define IID_ISRFind IID_ISRFindW + #define PISRFIND PISRFINDW + +#else + #define ISRFind ISRFindA + #define IID_ISRFind IID_ISRFindA + #define PISRFIND PISRFINDA + +#endif + + +/* + * ISRGramLexPron + */ + +#undef INTERFACE +#define INTERFACE ISRGramLexPronW + +// {7EB4B631-19A7-11d1-AF95-0000F81E880D} +DEFINE_GUID(IID_ISRGramLexPronW, 0x7eb4b631, 0x19a7, 0x11d1, 0xaf, 0x95, 0x0, 0x0, 0xf8, 0x1e, 0x88, 0xd); + +DECLARE_INTERFACE_ (ISRGramLexPronW, IUnknown) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRGramLexPronW members + STDMETHOD (Add) (THIS_ VOICECHARSET, PCWSTR, PCWSTR, + VOICEPARTOFSPEECH, PVOID, DWORD, BOOL) PURE; + STDMETHOD (Get) (THIS_ VOICECHARSET, PCWSTR, WORD, PWSTR, + DWORD, DWORD *, VOICEPARTOFSPEECH *, PVOID, + DWORD, DWORD *) PURE; + STDMETHOD (Remove) (THIS_ PCWSTR, WORD) PURE; + STDMETHOD (LexiconDlg) (THIS_ HWND, PCWSTR, PCWSTR) PURE; + }; + +typedef ISRGramLexPronW FAR * PISRGRAMLEXPRONW; + + +#undef INTERFACE +#define INTERFACE ISRGramLexPronA + +// {7EB4B632-19A7-11d1-AF95-0000F81E880D} +DEFINE_GUID(IID_ISRGramLexPronA, 0x7eb4b632, 0x19a7, 0x11d1, 0xaf, 0x95, 0x0, 0x0, 0xf8, 0x1e, 0x88, 0xd); + +DECLARE_INTERFACE_ (ISRGramLexPronA, IUnknown) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // LexPronA members + STDMETHOD (Add) (THIS_ VOICECHARSET, PCSTR, PCSTR, + VOICEPARTOFSPEECH, PVOID, DWORD, BOOL) PURE; + STDMETHOD (Get) (THIS_ VOICECHARSET, PCSTR, WORD, PSTR, + DWORD, DWORD *, VOICEPARTOFSPEECH *, PVOID, + DWORD, DWORD *) PURE; + STDMETHOD (Remove) (THIS_ PCSTR, WORD) PURE; + STDMETHOD (LexiconDlg) (THIS_ HWND, PCSTR, PCSTR) PURE; + }; + +typedef ISRGramLexPronA FAR * PISRGRAMLEXPRONA; + + +#ifdef _S_UNICODE + #define ISRGramLexPron ISRGramLexPronW + #define IID_ISRGramLexPron IID_ISRGramLexPronW + #define PISRGRAMLEXPRON PISRGRAMLEXPRONW + +#else + #define ISRGramLexPron ISRGramLexPronA + #define IID_ISRGramLexPron IID_ISRGramLexPronA + #define PISRGRAMLEXPRON PISRGRAMLEXPRONA + +#endif // _S_UNICODE + + +/* + * ISRGramCommon + */ + +#undef INTERFACE +#define INTERFACE ISRGramCommonW + +DEFINE_GUID(IID_ISRGramCommonW, 0xe8c3e160, 0xc743, 0x11cd, 0x80, 0xe5, 0x0, 0xaa, 0x0, 0x3e, 0x4b, 0x50); + +DECLARE_INTERFACE_ (ISRGramCommonW, IUnknown) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRGramCommonW members + STDMETHOD (Activate) (THIS_ HWND, BOOL, PCWSTR) PURE; + STDMETHOD (Archive) (THIS_ BOOL, PVOID, DWORD, DWORD *) PURE; + STDMETHOD (BookMark) (THIS_ QWORD, DWORD) PURE; + STDMETHOD (Deactivate) (THIS_ PCWSTR) PURE; + STDMETHOD (DeteriorationGet) (THIS_ DWORD *, DWORD *, DWORD *) PURE; + STDMETHOD (DeteriorationSet) (THIS_ DWORD, DWORD, DWORD) PURE; + STDMETHOD (TrainDlg) (THIS_ HWND, PCWSTR) PURE; + STDMETHOD (TrainPhrase) (THIS_ DWORD, PSDATA) PURE; + STDMETHOD (TrainQuery) (THIS_ DWORD *) PURE; + }; + +typedef ISRGramCommonW FAR * PISRGRAMCOMMONW; + + +#undef INTERFACE +#define INTERFACE ISRGramCommonA + +DEFINE_GUID(IID_ISRGramCommonA, 0x05EB6C63L, 0xDBAB, 0x11CD, 0xB3, 0xCA, 0x00, 0xAA, 0x00, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ISRGramCommonA, IUnknown) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRGramCommonA members + STDMETHOD (Activate) (THIS_ HWND, BOOL, PCSTR) PURE; + STDMETHOD (Archive) (THIS_ BOOL, PVOID, DWORD, DWORD *) PURE; + STDMETHOD (BookMark) (THIS_ QWORD, DWORD) PURE; + STDMETHOD (Deactivate) (THIS_ PCSTR) PURE; + STDMETHOD (DeteriorationGet) (THIS_ DWORD *, DWORD *, DWORD *) PURE; + STDMETHOD (DeteriorationSet) (THIS_ DWORD, DWORD, DWORD) PURE; + STDMETHOD (TrainDlg) (THIS_ HWND, PCSTR) PURE; + STDMETHOD (TrainPhrase) (THIS_ DWORD, PSDATA) PURE; + STDMETHOD (TrainQuery) (THIS_ DWORD *) PURE; + }; + +typedef ISRGramCommonA FAR * PISRGRAMCOMMONA; + + +#ifdef _S_UNICODE + #define ISRGramCommon ISRGramCommonW + #define IID_ISRGramCommon IID_ISRGramCommonW + #define PISRGRAMCOMMON PISRGRAMCOMMONW + +#else + #define ISRGramCommon ISRGramCommonA + #define IID_ISRGramCommon IID_ISRGramCommonA + #define PISRGRAMCOMMON PISRGRAMCOMMONA + +#endif + + + +/* + * ISRGramCFG + */ + +#undef INTERFACE +#define INTERFACE ISRGramCFGW + +DEFINE_GUID(IID_ISRGramCFGW, 0xecc0b180, 0xc743, 0x11cd, 0x80, 0xe5, 0x0, 0xaa, 0x0, 0x3e, 0x4b, 0x50); + +DECLARE_INTERFACE_ (ISRGramCFGW, IUnknown) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRGramCFGW members + STDMETHOD (LinkQuery) (THIS_ PCWSTR, BOOL *) PURE; + STDMETHOD (ListAppend) (THIS_ PCWSTR, SDATA) PURE; + STDMETHOD (ListGet) (THIS_ PCWSTR, PSDATA) PURE; + STDMETHOD (ListRemove) (THIS_ PCWSTR, SDATA) PURE; + STDMETHOD (ListSet) (THIS_ PCWSTR, SDATA) PURE; + STDMETHOD (ListQuery) (THIS_ PCWSTR, BOOL *) PURE; + }; + +typedef ISRGramCFGW FAR * PISRGRAMCFGW; + + +#undef INTERFACE +#define INTERFACE ISRGramCFGA + +DEFINE_GUID(IID_ISRGramCFGA, 0x05EB6C64L, 0xDBAB, 0x11CD, 0xB3, 0xCA, 0x00, 0xAA, 0x00, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ISRGramCFGA, IUnknown) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRGramCFGA members + STDMETHOD (LinkQuery) (THIS_ PCSTR, BOOL *) PURE; + STDMETHOD (ListAppend) (THIS_ PCSTR, SDATA) PURE; + STDMETHOD (ListGet) (THIS_ PCSTR, PSDATA) PURE; + STDMETHOD (ListRemove) (THIS_ PCSTR, SDATA) PURE; + STDMETHOD (ListSet) (THIS_ PCSTR, SDATA) PURE; + STDMETHOD (ListQuery) (THIS_ PCSTR, BOOL *) PURE; + }; + +typedef ISRGramCFGA FAR * PISRGRAMCFGA; + + +#ifdef _S_UNICODE + #define ISRGramCFG ISRGramCFGW + #define IID_ISRGramCFG IID_ISRGramCFGW + #define PISRGRAMCFG PISRGRAMCFGW + +#else + #define ISRGramCFG ISRGramCFGA + #define IID_ISRGramCFG IID_ISRGramCFGA + #define PISRGRAMCFG PISRGRAMCFGA + +#endif + + + +/* + * ISRGramDictation + */ + +#undef INTERFACE +#define INTERFACE ISRGramDictationW + +DEFINE_GUID(IID_ISRGramDictationW, 0x090CD9A3, 0xDA1A, 0x11CD, 0xB3, 0xCA, 0x0, 0xAA, 0x0, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ISRGramDictationW, IUnknown) { + + // IUnknown members + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRGramDictationW members + STDMETHOD (Context) (THIS_ PCWSTR, PCWSTR) PURE; + STDMETHOD (Hint) (THIS_ PCWSTR) PURE; + STDMETHOD (Words) (THIS_ PCWSTR) PURE; + }; + +typedef ISRGramDictationW FAR *PISRGRAMDICTATIONW; + + +#undef INTERFACE +#define INTERFACE ISRGramDictationA + +DEFINE_GUID(IID_ISRGramDictationA, 0x05EB6C65L, 0xDBAB, 0x11CD, 0xB3, 0xCA, 0x00, 0xAA, 0x00, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ISRGramDictationA, IUnknown) { + + // IUnknown members + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRGramDictationA members + STDMETHOD (Context) (THIS_ PCSTR, PCSTR) PURE; + STDMETHOD (Hint) (THIS_ PCSTR) PURE; + STDMETHOD (Words) (THIS_ PCSTR) PURE; + }; + +typedef ISRGramDictationA FAR *PISRGRAMDICTATIONA; + + +#ifdef _S_UNICODE + #define ISRGramDictation ISRGramDictationW + #define IID_ISRGramDictation IID_ISRGramDictationW + #define PISRGRAMDICTATION PISRGRAMDICTATIONW + +#else + #define ISRGramDictation ISRGramDictationA + #define IID_ISRGramDictation IID_ISRGramDictationA + #define PISRGRAMDICTATION PISRGRAMDICTATIONA + +#endif + + + +// ISRGramInsertionGUI +// This does not need an ANSI/UNICODE interface because no characters are passed +#undef INTERFACE +#define INTERFACE ISRGramInsertionGUI + +// {090CD9A4-DA1A-11CD-B3CA-00AA0047BA4F} +DEFINE_GUID(IID_ISRGramInsertionGUI, +0x090CD9A4, 0xDA1A, 0x11CD, 0xB3, 0xCA, 0x0, 0xAA, 0x0, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ISRGramInsertionGUI, IUnknown) { + // IUnknown members + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRGramInsertionGUI members + STDMETHOD (Hide) (THIS) PURE; + STDMETHOD (Move) (THIS_ RECT) PURE; + STDMETHOD (Show) (THIS_ HWND) PURE; + }; + +typedef ISRGramInsertionGUI FAR *PISRGRAMINSERTIONGUI; + + + +/* + * ISRGramNotifySink + */ + +#undef INTERFACE +#define INTERFACE ISRGramNotifySinkW + +DEFINE_GUID(IID_ISRGramNotifySinkW, 0xf106bfa0, 0xc743, 0x11cd, 0x80, 0xe5, 0x0, 0xaa, 0x0, 0x3e, 0x4b, 0x50); + +DECLARE_INTERFACE_ (ISRGramNotifySinkW, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRGramNotifySinkW members + STDMETHOD (BookMark) (THIS_ DWORD) PURE; + STDMETHOD (Paused) (THIS) PURE; + STDMETHOD (PhraseFinish) (THIS_ DWORD, QWORD, QWORD, PSRPHRASEW, LPUNKNOWN) PURE; + STDMETHOD (PhraseHypothesis)(THIS_ DWORD, QWORD, QWORD, PSRPHRASEW, LPUNKNOWN) PURE; + STDMETHOD (PhraseStart) (THIS_ QWORD) PURE; + STDMETHOD (ReEvaluate) (THIS_ LPUNKNOWN) PURE; + STDMETHOD (Training) (THIS_ DWORD) PURE; + STDMETHOD (UnArchive) (THIS_ LPUNKNOWN) PURE; + }; + +typedef ISRGramNotifySinkW FAR * PISRGRAMNOTIFYSINKW; + + +// ISRGramNotifySinkA +#undef INTERFACE +#define INTERFACE ISRGramNotifySinkA + +// {EFEEA350-CE5E-11cd-9D96-00AA002FC7C9} +DEFINE_GUID(IID_ISRGramNotifySinkA, +0xefeea350, 0xce5e, 0x11cd, 0x9d, 0x96, 0x0, 0xaa, 0x0, 0x2f, 0xc7, 0xc9); + +DECLARE_INTERFACE_ (ISRGramNotifySinkA, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRGramNotifySinkA members + STDMETHOD (BookMark) (THIS_ DWORD) PURE; + STDMETHOD (Paused) (THIS) PURE; + STDMETHOD (PhraseFinish) (THIS_ DWORD, QWORD, QWORD, PSRPHRASEA, LPUNKNOWN) PURE; + STDMETHOD (PhraseHypothesis)(THIS_ DWORD, QWORD, QWORD, PSRPHRASEA, LPUNKNOWN) PURE; + STDMETHOD (PhraseStart) (THIS_ QWORD) PURE; + STDMETHOD (ReEvaluate) (THIS_ LPUNKNOWN) PURE; + STDMETHOD (Training) (THIS_ DWORD) PURE; + STDMETHOD (UnArchive) (THIS_ LPUNKNOWN) PURE; + }; + +typedef ISRGramNotifySinkA FAR * PISRGRAMNOTIFYSINKA; + + +#ifdef _S_UNICODE + #define ISRGramNotifySink ISRGramNotifySinkW + #define IID_ISRGramNotifySink IID_ISRGramNotifySinkW + #define PISRGRAMNOTIFYSINK PISRGRAMNOTIFYSINKW + +#else + #define ISRGramNotifySink ISRGramNotifySinkA + #define IID_ISRGramNotifySink IID_ISRGramNotifySinkA + #define PISRGRAMNOTIFYSINK PISRGRAMNOTIFYSINKA + +#endif // _S_UNICODE + + + +// ISRNotifySink +// This does not need an ANSI/UNICODE interface because no characters are passed +#undef INTERFACE +#define INTERFACE ISRNotifySink + +DEFINE_GUID(IID_ISRNotifySink, +0x090CD9B0L, 0xDA1A, 0x11CD, 0xB3, 0xCA, 0x00, 0xAA, 0x00, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ISRNotifySink, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRNotifySink members + STDMETHOD (AttribChanged) (THIS_ DWORD) PURE; + STDMETHOD (Interference) (THIS_ QWORD, QWORD, DWORD) PURE; + STDMETHOD (Sound) (THIS_ QWORD, QWORD) PURE; + STDMETHOD (UtteranceBegin) (THIS_ QWORD) PURE; + STDMETHOD (UtteranceEnd) (THIS_ QWORD, QWORD) PURE; + STDMETHOD (VUMeter) (THIS_ QWORD, WORD) PURE; + }; + +typedef ISRNotifySink FAR *PISRNOTIFYSINK; + +// Just in case anyone uses the wide/ansi versions +#define ISRNotifySinkW ISRNotifySink +#define IID_ISRNotifySinkW IID_ISRNotifySink +#define PISRNOTIFYSINKW PISRNOTIFYSINK +#define ISRNotifySinkA ISRNotifySink +#define IID_ISRNotifySinkA IID_ISRNotifySink +#define PISRNOTIFYSINKA PISRNOTIFYSINK + + +// ISRNotifySink2 +// This does not need an ANSI/UNICODE interface because no characters are passed +#undef INTERFACE +#define INTERFACE ISRNotifySink2 + +// {9B445332-E39F-11d1-BED7-006008317CE8} +DEFINE_GUID(IID_ISRNotifySink2, +0x9b445332, 0xe39f, 0x11d1, 0xbe, 0xd7, 0x0, 0x60, 0x8, 0x31, 0x7c, 0xe8); + +DECLARE_INTERFACE_ (ISRNotifySink2, ISRNotifySink) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRNotifySink2 members + STDMETHOD (AttribChanged) (THIS_ DWORD) PURE; + STDMETHOD (Interference) (THIS_ QWORD, QWORD, DWORD) PURE; + STDMETHOD (Sound) (THIS_ QWORD, QWORD) PURE; + STDMETHOD (UtteranceBegin) (THIS_ QWORD) PURE; + STDMETHOD (UtteranceEnd) (THIS_ QWORD, QWORD) PURE; + STDMETHOD (VUMeter) (THIS_ QWORD, WORD) PURE; + + STDMETHOD (Training) (THIS) PURE; + STDMETHOD (Error) (THIS_ LPUNKNOWN) PURE; + STDMETHOD (Warning) (THIS_ LPUNKNOWN) PURE; + }; + +typedef ISRNotifySink2 FAR *PISRNOTIFYSINK2; + + +/* + * ISRResBasic + */ + +#undef INTERFACE +#define INTERFACE ISRResBasicW + +DEFINE_GUID(IID_ISRResBasicW, 0x090CD9A5, 0xDA1A, 0x11CD, 0xB3, 0xCA, 0x0, 0xAA, 0x0, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ISRResBasicW, IUnknown) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRResBasicW members + STDMETHOD (PhraseGet) (THIS_ DWORD, PSRPHRASEW, DWORD, DWORD *) PURE; + STDMETHOD (Identify) (THIS_ GUID *) PURE; + STDMETHOD (TimeGet) (THIS_ PQWORD, PQWORD) PURE; + STDMETHOD (FlagsGet) (THIS_ DWORD, DWORD *) PURE; + }; + +typedef ISRResBasicW FAR *PISRRESBASICW; + + +#undef INTERFACE +#define INTERFACE ISRResBasicA + +DEFINE_GUID(IID_ISRResBasicA, 0x05EB6C66L, 0xDBAB, 0x11CD, 0xB3, 0xCA, 0x00, 0xAA, 0x00, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ISRResBasicA, IUnknown) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRResBasicA members + STDMETHOD (PhraseGet) (THIS_ DWORD, PSRPHRASEA, DWORD, DWORD *) PURE; + STDMETHOD (Identify) (THIS_ GUID *) PURE; + STDMETHOD (TimeGet) (THIS_ PQWORD, PQWORD) PURE; + STDMETHOD (FlagsGet) (THIS_ DWORD, DWORD *) PURE; + }; + +typedef ISRResBasicA FAR *PISRRESBASICA; + + +#ifdef _S_UNICODE + #define ISRResBasic ISRResBasicW + #define IID_ISRResBasic IID_ISRResBasicW + #define PISRRESBASIC PISRRESBASICW + +#else + #define ISRResBasic ISRResBasicA + #define IID_ISRResBasic IID_ISRResBasicA + #define PISRRESBASIC PISRRESBASICA + +#endif // _S_UNICODE + + +/* + * ISRResScore + * This does not need an ANSI/UNICODE interface because no characters are passed + */ + +#undef INTERFACE +#define INTERFACE ISRResScores + + +// {0B37F1E0-B8DE-11cf-B22E-00AA00A215ED} +DEFINE_GUID(IID_ISRResScores, 0xb37f1e0, 0xb8de, 0x11cf, 0xb2, 0x2e, 0x0, 0xaa, 0x0, 0xa2, 0x15, 0xed); + +DECLARE_INTERFACE_ (ISRResScores, IUnknown) { + + // IUnknown members + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRResScores members + STDMETHOD (GetPhraseScore) (THIS_ DWORD, long FAR *) PURE; + STDMETHOD (GetWordScores) (THIS_ DWORD, long FAR *, DWORD, LPDWORD) PURE; +}; + +typedef ISRResScores FAR* PISRRESSCORES; + +// In case someone uses the A/W versions... + +#define ISRResScoresW ISRResScores +#define IID_ISRResScoresW IID_ISRResScores +#define PISRRESSCORESW PISRRESSCORES +#define ISRResScoresA ISRResScores +#define IID_ISRResScoresA IID_ISRResScores +#define PISRRESSCORESA PISRRESSCORES + + + +/* + * ISRResMerge + * This does not need an ANSI/UNICODE interface because no characters are passed + */ + +#undef INTERFACE +#define INTERFACE ISRResMerge + +DEFINE_GUID(IID_ISRResMerge, 0x090CD9A6, 0xDA1A, 0x11CD, 0xB3, 0xCA, 0x0, 0xAA, 0x0, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ISRResMerge, IUnknown) { + + // IUnknown members + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRResMerge members + STDMETHOD (Merge) (THIS_ LPUNKNOWN, PIUNKNOWN ) PURE; + STDMETHOD (Split) (THIS_ QWORD, PIUNKNOWN , PIUNKNOWN ) PURE; + }; + +typedef ISRResMerge FAR *PISRRESMERGE; + + + +/* + * ISRResAudio + * This does not need an ANSI/UNICODE interface because no characters are passed + */ + +#undef INTERFACE +#define INTERFACE ISRResAudio + +DEFINE_GUID(IID_ISRResAudio, 0x090CD9A7, 0xDA1A, 0x11CD, 0xB3, 0xCA, 0x0, 0xAA, 0x0, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ISRResAudio, IUnknown) { + + // IUnknown members + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRResAudio members + STDMETHOD (GetWAV) (THIS_ PSDATA) PURE; + }; + +typedef ISRResAudio FAR *PISRRESAUDIO; + + + +/* + * ISRResAudioEx + * This does not need an ANSI/UNICODE interface because no characters are passed + */ + +#undef INTERFACE +#define INTERFACE ISRResAudioEx + +DEFINE_GUID(IID_ISRResAudioEx, 0xaad74c30, 0x4b02, 0x11d1, 0xb7, 0x92, 0x0, 0x60, 0x97, 0x98, 0x41, 0xb4); + +DECLARE_INTERFACE_ (ISRResAudioEx, IUnknown) { + + // IUnknown members + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRResAudioEx members + STDMETHOD (GetWAV) (THIS_ PSDATA, QWORD, QWORD) PURE; + }; + +typedef ISRResAudioEx FAR *PISRRESAUDIOEX; + + + +/* + * ISRResCorrection + */ + +#undef INTERFACE +#define INTERFACE ISRResCorrectionW + +DEFINE_GUID(IID_ISRResCorrectionW, 0x090CD9A8L, 0xDA1A, 0x11CD, 0xB3, 0xCA, 0x00, 0xAA, 0x00, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ISRResCorrectionW, IUnknown) { + + // IUnknown members + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRResCorrectionW members + STDMETHOD (Correction) (THIS_ PSRPHRASEW, WORD) PURE; + STDMETHOD (Validate) (THIS_ WORD) PURE; + }; + +typedef ISRResCorrectionW FAR *PISRRESCORRECTIONW; + + +#undef INTERFACE +#define INTERFACE ISRResCorrectionA + +DEFINE_GUID(IID_ISRResCorrectionA, 0x05EB6C67L, 0xDBAB, 0x11CD, 0xB3, 0xCA, 0x00, 0xAA, 0x00, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ISRResCorrectionA, IUnknown) { + + // IUnknown members + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRResCorrectionA members + STDMETHOD (Correction) (THIS_ PSRPHRASEA, WORD) PURE; + STDMETHOD (Validate) (THIS_ WORD) PURE; + }; + +typedef ISRResCorrectionA FAR *PISRRESCORRECTIONA; + + +#ifdef _S_UNICODE + #define ISRResCorrection ISRResCorrectionW + #define IID_ISRResCorrection IID_ISRResCorrectionW + #define PISRRESCORRECTION PISRRESCORRECTIONW + +#else + #define ISRResCorrection ISRResCorrectionA + #define IID_ISRResCorrection IID_ISRResCorrectionA + #define PISRRESCORRECTION PISRRESCORRECTIONA + +#endif // _S_UNICODE + + + +// ISRResEval +// This does not need an ANSI/UNICODE interface because no characters are passed +#undef INTERFACE +#define INTERFACE ISRResEval + +// {90CD9A9-DA1A-11CD-B3CA-00AA0047BA4F} +DEFINE_GUID(IID_ISRResEval, +0x090CD9A9, 0xDA1A, 0x11CD, 0xB3, 0xCA, 0x0, 0xAA, 0x0, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ISRResEval, IUnknown) { + // IUnknown members + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // SRResEval members + STDMETHOD (ReEvaluate) (THIS_ BOOL *) PURE; + }; + +typedef ISRResEval FAR *PISRRESEVAL; + + + +/* + * ISRResGraph + */ + +#undef INTERFACE +#define INTERFACE ISRResGraphW + +DEFINE_GUID(IID_ISRResGraphW, 0x090CD9AA, 0xDA1A, 0x11CD, 0xB3, 0xCA, 0x0, 0xAA, 0x0, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ISRResGraphW, IUnknown) { + + // IUnknown members + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRResGraphW members + STDMETHOD (BestPathPhoneme) (THIS_ DWORD, DWORD *, DWORD, DWORD *) PURE; + STDMETHOD (BestPathWord) (THIS_ DWORD, DWORD *, DWORD, DWORD *) PURE; + STDMETHOD (GetPhonemeNode) (THIS_ DWORD, PSRRESPHONEMENODE, PWCHAR, + PWCHAR) PURE; + STDMETHOD (GetWordNode) (THIS_ DWORD, PSRRESWORDNODE, PSRWORDW, DWORD, + DWORD *) PURE; + STDMETHOD (PathScorePhoneme) (THIS_ DWORD *, DWORD, LONG *) PURE; + STDMETHOD (PathScoreWord) (THIS_ DWORD *, DWORD, LONG *) PURE; + }; + +typedef ISRResGraphW FAR *PISRRESGRAPHW; + + +#undef INTERFACE +#define INTERFACE ISRResGraphA + +DEFINE_GUID(IID_ISRResGraphA, 0x05EB6C68L, 0xDBAB, 0x11CD, 0xB3, 0xCA, 0x00, 0xAA, 0x00, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ISRResGraphA, IUnknown) { + + // IUnknown members + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRResGraphA members + STDMETHOD (BestPathPhoneme) (THIS_ DWORD, DWORD *, DWORD, DWORD *) PURE; + STDMETHOD (BestPathWord) (THIS_ DWORD, DWORD *, DWORD, DWORD *) PURE; + STDMETHOD (GetPhonemeNode) (THIS_ DWORD, PSRRESPHONEMENODE, PWCHAR, + PCHAR) PURE; + STDMETHOD (GetWordNode) (THIS_ DWORD, PSRRESWORDNODE, PSRWORDA, DWORD, + DWORD *) PURE; + STDMETHOD (PathScorePhoneme) (THIS_ DWORD *, DWORD, LONG *) PURE; + STDMETHOD (PathScoreWord) (THIS_ DWORD *, DWORD, LONG *) PURE; + }; + +typedef ISRResGraphA FAR *PISRRESGRAPHA; + + +#ifdef _S_UNICODE + #define ISRResGraph ISRResGraphW + #define IID_ISRResGraph IID_ISRResGraphW + #define PISRRESGRAPH PISRRESGRAPHW + +#else + #define ISRResGraph ISRResGraphA + #define IID_ISRResGraph IID_ISRResGraphA + #define PISRRESGRAPH PISRRESGRAPHA + +#endif // _S_UNICODE + + + +/* + * ISRResGraphEx + */ + +#undef INTERFACE +#define INTERFACE ISRResGraphEx + +DEFINE_GUID(IID_ISRResGraphEx, 0xbe8f63a0, 0xb915, 0x11d1, 0xb7, 0xbc, 0x0, 0x60, 0x97, 0x98, 0x41, 0xb4); + +DECLARE_INTERFACE_ (ISRResGraphEx, IUnknown) { + + // IUnknown members + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRResGraphEx members + STDMETHOD (NodeStartGet) (THIS_ DWORD *) PURE; + STDMETHOD (NodeEndGet) (THIS_ DWORD *) PURE; + STDMETHOD (ArcEnum) (THIS_ DWORD, DWORD *, DWORD, DWORD *, BOOL) PURE; + STDMETHOD (NodeGet) (THIS_ DWORD, DWORD *, BOOL) PURE; + STDMETHOD (DWORDGet) (THIS_ DWORD, GUID, DWORD *) PURE; + STDMETHOD (DataGet) (THIS_ DWORD, GUID, SDATA *) PURE; + STDMETHOD (ScoreGet) (THIS_ DWORD, DWORD *, DWORD, DWORD, DWORD, DWORD *) PURE; + STDMETHOD (BestPathEnum) (THIS_ DWORD, DWORD *, DWORD, DWORD *, DWORD, BOOL, SDATA *) PURE; + STDMETHOD (GetAllArcs) (THIS_ DWORD *, DWORD, DWORD *, DWORD *) PURE; + STDMETHOD (GetAllNodes) (THIS_ DWORD *, DWORD, DWORD *, DWORD *) PURE; +}; + +typedef ISRResGraphEx FAR *PISRRESGRAPHEX; + + + +// ISRResMemory +// This does not need an ANSI/UNICODE interface because no characters are passed +#undef INTERFACE +#define INTERFACE ISRResMemory + +DEFINE_GUID(IID_ISRResMemory, 0x090CD9AB, 0xDA1A, 0x11CD, 0xB3, 0xCA, 0x0, 0xAA, 0x0, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ISRResMemory, IUnknown) { + + // IUnknown members + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRResMemory members + STDMETHOD (Free) (THIS_ DWORD) PURE; + STDMETHOD (Get) (THIS_ DWORD *, DWORD *) PURE; + STDMETHOD (LockGet) (THIS_ BOOL *) PURE; + STDMETHOD (LockSet) (THIS_ BOOL) PURE; + }; + +typedef ISRResMemory FAR *PISRRESMEMORY; + + + +// ISRResModifyGUI +// This does not need an ANSI/UNICODE interface because no characters are passed +#undef INTERFACE +#define INTERFACE ISRResModifyGUI + +DEFINE_GUID(IID_ISRResModifyGUI, 0x090CD9AC, 0xDA1A, 0x11CD, 0xB3, 0xCA, 0x0, 0xAA, 0x0, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ISRResModifyGUI, IUnknown) { + + // IUnknown members + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRResModifyGUI members + STDMETHOD (Hide) (THIS) PURE; + STDMETHOD (Move) (THIS_ RECT *) PURE; + STDMETHOD (Show) (THIS_ HWND) PURE; + }; + +typedef ISRResModifyGUI FAR *PISRRESMODIFYGUI; + + + +/* + * ISRResSpeakerW + */ + +#undef INTERFACE +#define INTERFACE ISRResSpeakerW + +DEFINE_GUID(IID_ISRResSpeakerW, 0x090CD9AD, 0xDA1A, 0x11CD, 0xB3, 0xCA, 0x0, 0xAA, 0x0, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ISRResSpeakerW, IUnknown) { + + // IUnknown members + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRResSpeakerW members + STDMETHOD (Correction) (THIS_ PCWSTR, WORD) PURE; + STDMETHOD (Validate) (THIS_ WORD) PURE; + STDMETHOD (Identify) (THIS_ DWORD, PWSTR, DWORD, DWORD *, + LONG *) PURE; + STDMETHOD (IdentifyForFree) (THIS_ BOOL *) PURE; + }; + +typedef ISRResSpeakerW FAR *PISRRESSPEAKERW; + + +#undef INTERFACE +#define INTERFACE ISRResSpeakerA + +DEFINE_GUID(IID_ISRResSpeakerA, 0x05EB6C69L, 0xDBAB, 0x11CD, 0xB3, 0xCA, 0x00, 0xAA, 0x00, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ISRResSpeakerA, IUnknown) { + + // IUnknown members + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRResSpeakerA members + STDMETHOD (Correction) (THIS_ PCSTR, WORD) PURE; + STDMETHOD (Validate) (THIS_ WORD) PURE; + STDMETHOD (Identify) (THIS_ DWORD, PSTR, DWORD, DWORD *, + LONG *) PURE; + STDMETHOD (IdentifyForFree) (THIS_ BOOL *) PURE; + }; + +typedef ISRResSpeakerA FAR *PISRRESSPEAKERA; + + +#ifdef _S_UNICODE + #define ISRResSpeaker ISRResSpeakerW + #define IID_ISRResSpeaker IID_ISRResSpeakerW + #define PISRRESSPEAKER PISRRESSPEAKERW + +#else + #define ISRResSpeaker ISRResSpeakerA + #define IID_ISRResSpeaker IID_ISRResSpeakerA + #define PISRRESSPEAKER PISRRESSPEAKERA + +#endif // _S_UNICODE + + + +/* + * ISRSpeaker + */ + +#undef INTERFACE +#define INTERFACE ISRSpeakerW + +DEFINE_GUID(IID_ISRSpeakerW, 0x090CD9AE, 0xDA1A, 0x11CD, 0xB3, 0xCA, 0x0, 0xAA, 0x0, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ISRSpeakerW, IUnknown) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRSpeakerW members + STDMETHOD (Delete) (THIS_ PCWSTR) PURE; + STDMETHOD (Enum) (THIS_ PWSTR *, DWORD *) PURE; + STDMETHOD (Merge) (THIS_ PCWSTR, PVOID, DWORD) PURE; + STDMETHOD (New) (THIS_ PCWSTR) PURE; + STDMETHOD (Query) (THIS_ PWSTR, DWORD, DWORD *) PURE; + STDMETHOD (Read) (THIS_ PCWSTR, PVOID *, DWORD *) PURE; + STDMETHOD (Revert) (THIS_ PCWSTR) PURE; + STDMETHOD (Select) (THIS_ PCWSTR, BOOL) PURE; + STDMETHOD (Write) (THIS_ PCWSTR, PVOID, DWORD) PURE; + }; + +typedef ISRSpeakerW FAR *PISRSPEAKERW; + + +#undef INTERFACE +#define INTERFACE ISRSpeakerA + +DEFINE_GUID(IID_ISRSpeakerA, 0x090CD9AF, 0xDA1A, 0x11CD, 0xB3, 0xCA, 0x0, 0xAA, 0x0, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ISRSpeakerA, IUnknown) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRSpeakerA members + STDMETHOD (Delete) (THIS_ PCSTR) PURE; + STDMETHOD (Enum) (THIS_ PSTR *, DWORD *) PURE; + STDMETHOD (Merge) (THIS_ PCSTR, PVOID, DWORD) PURE; + STDMETHOD (New) (THIS_ PCSTR) PURE; + STDMETHOD (Query) (THIS_ PSTR, DWORD, DWORD *) PURE; + STDMETHOD (Read) (THIS_ PCSTR, PVOID *, DWORD *) PURE; + STDMETHOD (Revert) (THIS_ PCSTR) PURE; + STDMETHOD (Select) (THIS_ PCSTR, BOOL) PURE; + STDMETHOD (Write) (THIS_ PCSTR, PVOID, DWORD) PURE; + }; + +typedef ISRSpeakerA FAR *PISRSPEAKERA; + + +#ifdef _S_UNICODE + #define ISRSpeaker ISRSpeakerW + #define IID_ISRSpeaker IID_ISRSpeakerW + #define PISRSPEAKER PISRSPEAKERW + +#else + #define ISRSpeaker ISRSpeakerA + #define IID_ISRSpeaker IID_ISRSpeakerA + #define PISRSPEAKER PISRSPEAKERA + +#endif // _S_UNICODE + + +/* + * ISRSpeaker2 + */ + +#undef INTERFACE +#define INTERFACE ISRSpeaker2W + +// {9B445333-E39F-11d1-BED7-006008317CE8} +DEFINE_GUID(IID_ISRSpeaker2W, +0x9b445333, 0xe39f, 0x11d1, 0xbe, 0xd7, 0x0, 0x60, 0x8, 0x31, 0x7c, 0xe8); + +DECLARE_INTERFACE_ (ISRSpeaker2W, ISRSpeakerW) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRSpeaker2W members + STDMETHOD (Delete) (THIS_ PCWSTR) PURE; + STDMETHOD (Enum) (THIS_ PWSTR *, DWORD *) PURE; + STDMETHOD (Merge) (THIS_ PCWSTR, PVOID, DWORD) PURE; + STDMETHOD (New) (THIS_ PCWSTR) PURE; + STDMETHOD (Query) (THIS_ PWSTR, DWORD, DWORD *) PURE; + STDMETHOD (Read) (THIS_ PCWSTR, PVOID *, DWORD *) PURE; + STDMETHOD (Revert) (THIS_ PCWSTR) PURE; + STDMETHOD (Select) (THIS_ PCWSTR, BOOL) PURE; + STDMETHOD (Write) (THIS_ PCWSTR, PVOID, DWORD) PURE; + + STDMETHOD (Commit) (THIS) PURE; + STDMETHOD (Rename) (THIS_ PCWSTR, PCWSTR) PURE; + STDMETHOD (GetChangedInfo) (THIS_ BOOL *, FILETIME*) PURE; + }; + +typedef ISRSpeaker2W FAR *PISRSPEAKER2W; + + +#undef INTERFACE +#define INTERFACE ISRSpeaker2A + +// {9B445334-E39F-11d1-BED7-006008317CE8} +DEFINE_GUID(IID_ISRSpeaker2A, +0x9b445334, 0xe39f, 0x11d1, 0xbe, 0xd7, 0x0, 0x60, 0x8, 0x31, 0x7c, 0xe8); + +DECLARE_INTERFACE_ (ISRSpeaker2A, ISRSpeakerA) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISRSpeaker2A members + STDMETHOD (Delete) (THIS_ PCSTR) PURE; + STDMETHOD (Enum) (THIS_ PSTR *, DWORD *) PURE; + STDMETHOD (Merge) (THIS_ PCSTR, PVOID, DWORD) PURE; + STDMETHOD (New) (THIS_ PCSTR) PURE; + STDMETHOD (Query) (THIS_ PSTR, DWORD, DWORD *) PURE; + STDMETHOD (Read) (THIS_ PCSTR, PVOID *, DWORD *) PURE; + STDMETHOD (Revert) (THIS_ PCSTR) PURE; + STDMETHOD (Select) (THIS_ PCSTR, BOOL) PURE; + STDMETHOD (Write) (THIS_ PCSTR, PVOID, DWORD) PURE; + + STDMETHOD (Commit) (THIS) PURE; + STDMETHOD (Rename) (THIS_ PCSTR, PCSTR) PURE; + STDMETHOD (GetChangedInfo) (THIS_ BOOL *, FILETIME*) PURE; + }; + +typedef ISRSpeaker2A FAR *PISRSPEAKER2A; + + +#ifdef _S_UNICODE + #define ISRSpeaker2 ISRSpeaker2W + #define IID_ISRSpeaker2 IID_ISRSpeaker2W + #define PISRSPEAKER2 PISRSPEAKER2W + +#else + #define ISRSpeaker2 ISRSpeaker2A + #define IID_ISRSpeaker2 IID_ISRSpeaker2A + #define PISRSPEAKER2 PISRSPEAKER2A + +#endif // _S_UNICODE + + +/************************************************************************ +Low-Level text-to-speech API +*/ + + +/************************************************************************ +defines */ + +#define TTSI_NAMELEN SVFN_LEN +#define TTSI_STYLELEN SVFN_LEN + +#define GENDER_NEUTRAL (0) +#define GENDER_FEMALE (1) +#define GENDER_MALE (2) + +#define TTSFEATURE_ANYWORD SETBIT(0) +#define TTSFEATURE_VOLUME SETBIT(1) +#define TTSFEATURE_SPEED SETBIT(2) +#define TTSFEATURE_PITCH SETBIT(3) +#define TTSFEATURE_TAGGED SETBIT(4) +#define TTSFEATURE_IPAUNICODE SETBIT(5) +#define TTSFEATURE_VISUAL SETBIT(6) +#define TTSFEATURE_WORDPOSITION SETBIT(7) +#define TTSFEATURE_PCOPTIMIZED SETBIT(8) +#define TTSFEATURE_PHONEOPTIMIZED SETBIT(9) +#define TTSFEATURE_FIXEDAUDIO SETBIT(10) +#define TTSFEATURE_SINGLEINSTANCE SETBIT(11) +#define TTSFEATURE_THREADSAFE SETBIT(12) +#define TTSFEATURE_IPATEXTDATA SETBIT(13) +#define TTSFEATURE_PREFERRED SETBIT(14) +#define TTSFEATURE_TRANSPLANTED SETBIT(15) +#define TTSFEATURE_SAPI4 SETBIT(16) + +#define TTSI_ILEXPRONOUNCE SETBIT(0) +#define TTSI_ITTSATTRIBUTES SETBIT(1) +#define TTSI_ITTSCENTRAL SETBIT(2) +#define TTSI_ITTSDIALOGS SETBIT(3) +#define TTSI_ATTRIBUTES SETBIT(4) +#define TTSI_IATTRIBUTES SETBIT(4) +#define TTSI_ILEXPRONOUNCE2 SETBIT(5) + +#define TTSDATAFLAG_TAGGED SETBIT(0) + +#define TTSBNS_ABORTED SETBIT(0) + +// ITTSNotifySink +#define TTSNSAC_REALTIME 0 +#define TTSNSAC_PITCH 1 +#define TTSNSAC_SPEED 2 +#define TTSNSAC_VOLUME 3 + + +#define TTSNSHINT_QUESTION SETBIT(0) +#define TTSNSHINT_STATEMENT SETBIT(1) +#define TTSNSHINT_COMMAND SETBIT(2) +#define TTSNSHINT_EXCLAMATION SETBIT(3) +#define TTSNSHINT_EMPHASIS SETBIT(4) + + +// Ages +#define TTSAGE_BABY 1 +#define TTSAGE_TODDLER 3 +#define TTSAGE_CHILD 6 +#define TTSAGE_ADOLESCENT 14 +#define TTSAGE_ADULT 30 +#define TTSAGE_ELDERLY 70 + +// Attribute minimums and maximums +#define TTSATTR_MINPITCH 0 +#define TTSATTR_MAXPITCH 0xffff +#define TTSATTR_MINREALTIME 0 +#define TTSATTR_MAXREALTIME 0xffffffff +#define TTSATTR_MINSPEED 0 +#define TTSATTR_MAXSPEED 0xffffffff +#define TTSATTR_MINVOLUME 0 +#define TTSATTR_MAXVOLUME 0xffffffff + + +/************************************************************************ +typedefs */ + +typedef struct { + BYTE bMouthHeight; + BYTE bMouthWidth; + BYTE bMouthUpturn; + BYTE bJawOpen; + BYTE bTeethUpperVisible; + BYTE bTeethLowerVisible; + BYTE bTonguePosn; + BYTE bLipTension; + } TTSMOUTH, *PTTSMOUTH; + + + +typedef struct { + GUID gEngineID; + WCHAR szMfgName[TTSI_NAMELEN]; + WCHAR szProductName[TTSI_NAMELEN]; + GUID gModeID; + WCHAR szModeName[TTSI_NAMELEN]; + LANGUAGEW language; + WCHAR szSpeaker[TTSI_NAMELEN]; + WCHAR szStyle[TTSI_STYLELEN]; + WORD wGender; + WORD wAge; + DWORD dwFeatures; + DWORD dwInterfaces; + DWORD dwEngineFeatures; + } TTSMODEINFOW, *PTTSMODEINFOW; + +typedef struct { + GUID gEngineID; + CHAR szMfgName[TTSI_NAMELEN]; + CHAR szProductName[TTSI_NAMELEN]; + GUID gModeID; + CHAR szModeName[TTSI_NAMELEN]; + LANGUAGEA language; + CHAR szSpeaker[TTSI_NAMELEN]; + CHAR szStyle[TTSI_STYLELEN]; + WORD wGender; + WORD wAge; + DWORD dwFeatures; + DWORD dwInterfaces; + DWORD dwEngineFeatures; + } TTSMODEINFOA, *PTTSMODEINFOA; + +#ifdef _S_UNICODE + #define TTSMODEINFO TTSMODEINFOW + #define PTTSMODEINFO PTTSMODEINFOW + +#else + #define TTSMODEINFO TTSMODEINFOA + #define PTTSMODEINFO PTTSMODEINFOA + +#endif // _S_UNICODE + + + +typedef struct { + DWORD dwEngineID; + DWORD dwMfgName; + DWORD dwProductName; + DWORD dwModeID; + DWORD dwModeName; + DWORD dwLanguage; + DWORD dwDialect; + DWORD dwSpeaker; + DWORD dwStyle; + DWORD dwGender; + DWORD dwAge; + DWORD dwFeatures; + DWORD dwInterfaces; + DWORD dwEngineFeatures; + } TTSMODEINFORANK, * PTTSMODEINFORANK; + +/************************************************************************ +Class IDs */ +// {D67C0280-C743-11cd-80E5-00AA003E4B50} +DEFINE_GUID(CLSID_TTSEnumerator, +0xd67c0280, 0xc743, 0x11cd, 0x80, 0xe5, 0x0, 0xaa, 0x0, 0x3e, 0x4b, 0x50); + +/************************************************************************ +interfaces */ + +// ITTSAttributes + +#undef INTERFACE +#define INTERFACE ITTSAttributesW + +DEFINE_GUID(IID_ITTSAttributesW, 0x1287A280L, 0x4A47, 0x101B, 0x93, 0x1A, 0x00, 0xAA, 0x00, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ITTSAttributesW, IUnknown) { + +// IUnknown members + + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + +// ITTSAttributes members + + STDMETHOD (PitchGet) (THIS_ WORD *) PURE; + STDMETHOD (PitchSet) (THIS_ WORD) PURE; + STDMETHOD (RealTimeGet) (THIS_ DWORD *) PURE; + STDMETHOD (RealTimeSet) (THIS_ DWORD) PURE; + STDMETHOD (SpeedGet) (THIS_ DWORD *) PURE; + STDMETHOD (SpeedSet) (THIS_ DWORD) PURE; + STDMETHOD (VolumeGet) (THIS_ DWORD *) PURE; + STDMETHOD (VolumeSet) (THIS_ DWORD) PURE; + }; + +typedef ITTSAttributesW FAR * PITTSATTRIBUTESW; + + +#undef INTERFACE +#define INTERFACE ITTSAttributesA + +DEFINE_GUID(IID_ITTSAttributesA, +0x0FD6E2A1L, 0xE77D, 0x11CD, 0xB3, 0xCA, 0x00, 0xAA, 0x00, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ITTSAttributesA, IUnknown) { + +// IUnknown members + + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + +// ITTSAttributes members + + STDMETHOD (PitchGet) (THIS_ WORD *) PURE; + STDMETHOD (PitchSet) (THIS_ WORD) PURE; + STDMETHOD (RealTimeGet) (THIS_ DWORD *) PURE; + STDMETHOD (RealTimeSet) (THIS_ DWORD) PURE; + STDMETHOD (SpeedGet) (THIS_ DWORD *) PURE; + STDMETHOD (SpeedSet) (THIS_ DWORD) PURE; + STDMETHOD (VolumeGet) (THIS_ DWORD *) PURE; + STDMETHOD (VolumeSet) (THIS_ DWORD) PURE; + }; + +typedef ITTSAttributesA FAR * PITTSATTRIBUTESA; + + +#ifdef _S_UNICODE + #define ITTSAttributes ITTSAttributesW + #define IID_ITTSAttributes IID_ITTSAttributesW + #define PITTSATTRIBUTES PITTSATTRIBUTESW + +#else + #define ITTSAttributes ITTSAttributesA + #define IID_ITTSAttributes IID_ITTSAttributesA + #define PITTSATTRIBUTES PITTSATTRIBUTESA + +#endif // _S_UNICODE + + + +// ITTSBufNotifySink + +#undef INTERFACE +#define INTERFACE ITTSBufNotifySink + +// {E4963D40-C743-11cd-80E5-00AA003E4B50} +DEFINE_GUID(IID_ITTSBufNotifySink, +0xe4963d40, 0xc743, 0x11cd, 0x80, 0xe5, 0x0, 0xaa, 0x0, 0x3e, 0x4b, 0x50); + +DECLARE_INTERFACE_ (ITTSBufNotifySink, IUnknown) { + +// IUnknown members + + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + +// ITTSBufNotifySink members + + STDMETHOD (TextDataDone) (THIS_ QWORD, DWORD) PURE; + STDMETHOD (TextDataStarted)(THIS_ QWORD) PURE; + STDMETHOD (BookMark) (THIS_ QWORD, DWORD) PURE; + STDMETHOD (WordPosition) (THIS_ QWORD, DWORD) PURE; + }; + +typedef ITTSBufNotifySink FAR * PITTSBUFNOTIFYSINK; + +// In case anyone uses the W or A interface +#define ITTSBufNotifySinkW ITTSBufNotifySink +#define IID_ITTSBufNotifySinkW IID_ITTSBufNotifySink +#define PITTSBUFNOTIFYSINKW PITTSBUFNOTIFYSINK +#define ITTSBufNotifySinkA ITTSBufNotifySink +#define IID_ITTSBufNotifySinkA IID_ITTSBufNotifySink +#define PITTSBUFNOTIFYSINKA PITTSBUFNOTIFYSINK + + + +/* + * ITTSCentral + */ + +#undef INTERFACE +#define INTERFACE ITTSCentralW + +DEFINE_GUID(IID_ITTSCentralW, 0x28016060L, 0x4A47, 0x101B, 0x93, 0x1A, 0x00, 0xAA, 0x00, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ITTSCentralW, IUnknown) { + + // IUnknown members + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ITTSCentralW members + STDMETHOD (Inject) (THIS_ PCWSTR) PURE; + STDMETHOD (ModeGet) (THIS_ PTTSMODEINFOW) PURE; + STDMETHOD (Phoneme) (THIS_ VOICECHARSET, DWORD, SDATA, PSDATA) PURE; + STDMETHOD (PosnGet) (THIS_ PQWORD) PURE; + STDMETHOD (TextData) (THIS_ VOICECHARSET, DWORD, SDATA, PVOID, IID) PURE; + STDMETHOD (ToFileTime) (THIS_ PQWORD, FILETIME *) PURE; + STDMETHOD (AudioPause) (THIS) PURE; + STDMETHOD (AudioResume) (THIS) PURE; + STDMETHOD (AudioReset) (THIS) PURE; + STDMETHOD (Register) (THIS_ PVOID, IID, DWORD*) PURE; + STDMETHOD (UnRegister) (THIS_ DWORD) PURE; + }; + +typedef ITTSCentralW FAR * PITTSCENTRALW; + + +#undef INTERFACE +#define INTERFACE ITTSCentralA + +DEFINE_GUID(IID_ITTSCentralA, 0x05EB6C6AL, 0xDBAB, 0x11CD, 0xB3, 0xCA, 0x00, 0xAA, 0x00, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ITTSCentralA, IUnknown) { + + // IUnknown members + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ITTSCentralA members + STDMETHOD (Inject) (THIS_ PCSTR) PURE; + STDMETHOD (ModeGet) (THIS_ PTTSMODEINFOA) PURE; + STDMETHOD (Phoneme) (THIS_ VOICECHARSET, DWORD, SDATA, PSDATA) PURE; + STDMETHOD (PosnGet) (THIS_ PQWORD) PURE; + STDMETHOD (TextData) (THIS_ VOICECHARSET, DWORD, SDATA, PVOID, IID) PURE; + STDMETHOD (ToFileTime) (THIS_ PQWORD, FILETIME *) PURE; + STDMETHOD (AudioPause) (THIS) PURE; + STDMETHOD (AudioResume) (THIS) PURE; + STDMETHOD (AudioReset) (THIS) PURE; + STDMETHOD (Register) (THIS_ PVOID, IID, DWORD*) PURE; + STDMETHOD (UnRegister) (THIS_ DWORD) PURE; + }; + +typedef ITTSCentralA FAR * PITTSCENTRALA; + + +#ifdef _S_UNICODE + #define ITTSCentral ITTSCentralW + #define IID_ITTSCentral IID_ITTSCentralW + #define PITTSCENTRAL PITTSCENTRALW + +#else + #define ITTSCentral ITTSCentralA + #define IID_ITTSCentral IID_ITTSCentralA + #define PITTSCENTRAL PITTSCENTRALA + +#endif // _S_UNICODE + + + +/* + * ITTSDialogsW + */ + +#undef INTERFACE +#define INTERFACE ITTSDialogsW + +DEFINE_GUID(IID_ITTSDialogsW, 0x47F59D00L, 0x4A47, 0x101B, 0x93, 0x1A, 0x00, 0xAA, 0x00, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ITTSDialogsW, IUnknown) { + + // IUnknown members + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ITTSDialogsW members + STDMETHOD (AboutDlg) (THIS_ HWND, PCWSTR) PURE; + STDMETHOD (LexiconDlg) (THIS_ HWND, PCWSTR) PURE; + STDMETHOD (GeneralDlg) (THIS_ HWND, PCWSTR) PURE; + STDMETHOD (TranslateDlg) (THIS_ HWND, PCWSTR) PURE; + }; + +typedef ITTSDialogsW FAR * PITTSDIALOGSW; + + +#undef INTERFACE +#define INTERFACE ITTSDialogsA + +DEFINE_GUID(IID_ITTSDialogsA, 0x05EB6C6BL, 0xDBAB, 0x11CD, 0xB3, 0xCA, 0x00, 0xAA, 0x00, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ITTSDialogsA, IUnknown) { + + // IUnknown members + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ITTSDialogsA members + STDMETHOD (AboutDlg) (THIS_ HWND, PCSTR) PURE; + STDMETHOD (LexiconDlg) (THIS_ HWND, PCSTR) PURE; + STDMETHOD (GeneralDlg) (THIS_ HWND, PCSTR) PURE; + STDMETHOD (TranslateDlg) (THIS_ HWND, PCSTR) PURE; + }; + +typedef ITTSDialogsA FAR * PITTSDIALOGSA; + + +#ifdef _S_UNICODE + #define ITTSDialogs ITTSDialogsW + #define IID_ITTSDialogs IID_ITTSDialogsW + #define PITTSDIALOGS PITTSDIALOGSW + +#else + #define ITTSDialogs ITTSDialogsA + #define IID_ITTSDialogs IID_ITTSDialogsA + #define PITTSDIALOGS PITTSDIALOGSA + +#endif + + + +/* + * ITTSEnum + */ + +#undef INTERFACE +#define INTERFACE ITTSEnumW + +DEFINE_GUID(IID_ITTSEnumW, 0x6B837B20L, 0x4A47, 0x101B, 0x93, 0x1A, 0x00, 0xAA, 0x00, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ITTSEnumW, IUnknown) { + + // IUnknown members + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ITTSEnumW members + STDMETHOD (Next) (THIS_ ULONG, PTTSMODEINFOW, ULONG *) PURE; + STDMETHOD (Skip) (THIS_ ULONG) PURE; + STDMETHOD (Reset) (THIS) PURE; + STDMETHOD (Clone) (THIS_ ITTSEnumW * FAR *) PURE; + STDMETHOD (Select) (THIS_ GUID, PITTSCENTRALW *, LPUNKNOWN) PURE; + }; + +typedef ITTSEnumW FAR * PITTSENUMW; + + +#undef INTERFACE +#define INTERFACE ITTSEnumA + +DEFINE_GUID(IID_ITTSEnumA, 0x05EB6C6DL, 0xDBAB, 0x11CD, 0xB3, 0xCA, 0x00, 0xAA, 0x00, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ITTSEnumA, IUnknown) { + + // IUnknown members + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ITTSEnumA members + STDMETHOD (Next) (THIS_ ULONG, PTTSMODEINFOA, ULONG *) PURE; + STDMETHOD (Skip) (THIS_ ULONG) PURE; + STDMETHOD (Reset) (THIS) PURE; + STDMETHOD (Clone) (THIS_ ITTSEnumA * FAR *) PURE; + STDMETHOD (Select) (THIS_ GUID, PITTSCENTRALA *, LPUNKNOWN) PURE; + }; + +typedef ITTSEnumA FAR * PITTSENUMA; + + +#ifdef _S_UNICODE + #define ITTSEnum ITTSEnumW + #define IID_ITTSEnum IID_ITTSEnumW + #define PITTSENUM PITTSENUMW + +#else + #define ITTSEnum ITTSEnumA + #define IID_ITTSEnum IID_ITTSEnumA + #define PITTSENUM PITTSENUMA + +#endif + + + +/* + * ITTSFind + */ + +#undef INTERFACE +#define INTERFACE ITTSFindW + +DEFINE_GUID(IID_ITTSFindW, 0x7AA42960L, 0x4A47, 0x101B, 0x93, 0x1A, 0x00, 0xAA, 0x00, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ITTSFindW, IUnknown) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ITTSFindW members + STDMETHOD (Find) (THIS_ PTTSMODEINFOW, PTTSMODEINFORANK, PTTSMODEINFOW) PURE; + STDMETHOD (Select) (THIS_ GUID, PITTSCENTRALW *, LPUNKNOWN) PURE; + }; + +typedef ITTSFindW FAR * PITTSFINDW; + + +#undef INTERFACE +#define INTERFACE ITTSFindA + +DEFINE_GUID(IID_ITTSFindA, 0x05EB6C6EL, 0xDBAB, 0x11CD, 0xB3, 0xCA, 0x00, 0xAA, 0x00, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ITTSFindA, IUnknown) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ITTSFindA members + STDMETHOD (Find) (THIS_ PTTSMODEINFOA, PTTSMODEINFORANK, PTTSMODEINFOA) PURE; + STDMETHOD (Select) (THIS_ GUID, PITTSCENTRALA *, LPUNKNOWN) PURE; + }; + +typedef ITTSFindA FAR * PITTSFINDA; + + +#ifdef _S_UNICODE + #define ITTSFind ITTSFindW + #define IID_ITTSFind IID_ITTSFindW + #define PITTSFIND PITTSFINDW + +#else + #define ITTSFind ITTSFindA + #define IID_ITTSFind IID_ITTSFindA + #define PITTSFIND PITTSFINDA + +#endif + + + +/* + * ITTSNotifySink + */ + +#undef INTERFACE +#define INTERFACE ITTSNotifySinkW + +DEFINE_GUID(IID_ITTSNotifySinkW, 0xC0FA8F40L, 0x4A46, 0x101B, 0x93, 0x1A, 0x00, 0xAA, 0x00, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ITTSNotifySinkW, IUnknown) { + +// IUnknown members + + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + +// ITTSNotifySinkW members + + STDMETHOD (AttribChanged) (THIS_ DWORD) PURE; + STDMETHOD (AudioStart) (THIS_ QWORD) PURE; + STDMETHOD (AudioStop) (THIS_ QWORD) PURE; + STDMETHOD (Visual) (THIS_ QWORD, WCHAR, WCHAR, DWORD, PTTSMOUTH) PURE; + }; + +typedef ITTSNotifySinkW FAR * PITTSNOTIFYSINKW; + + +#undef INTERFACE +#define INTERFACE ITTSNotifySinkA + +DEFINE_GUID(IID_ITTSNotifySinkA, 0x05EB6C6FL, 0xDBAB, 0x11CD, 0xB3, 0xCA, 0x00, 0xAA, 0x00, 0x47, 0xBA, 0x4F); + +DECLARE_INTERFACE_ (ITTSNotifySinkA, IUnknown) { + + // IUnknown members + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ITTSNotifySinkA members + STDMETHOD (AttribChanged) (THIS_ DWORD) PURE; + STDMETHOD (AudioStart) (THIS_ QWORD) PURE; + STDMETHOD (AudioStop) (THIS_ QWORD) PURE; + STDMETHOD (Visual) (THIS_ QWORD, CHAR, CHAR, DWORD, PTTSMOUTH) PURE; + }; + +typedef ITTSNotifySinkA FAR * PITTSNOTIFYSINKA; + + +#ifdef _S_UNICODE + #define ITTSNotifySink ITTSNotifySinkW + #define IID_ITTSNotifySink IID_ITTSNotifySinkW + #define PITTSNOTIFYSINK PITTSNOTIFYSINKW + +#else + #define ITTSNotifySink ITTSNotifySinkA + #define IID_ITTSNotifySink IID_ITTSNotifySinkA + #define PITTSNOTIFYSINK PITTSNOTIFYSINKA + +#endif + + +/* ITTSNotifySink2 */ + +#undef INTERFACE +#define INTERFACE ITTSNotifySink2W + +// {599F77E1-E42E-11d1-BED8-006008317CE8} +DEFINE_GUID(IID_ITTSNotifySink2W, +0x599f77e1, 0xe42e, 0x11d1, 0xbe, 0xd8, 0x0, 0x60, 0x8, 0x31, 0x7c, 0xe8); + +DECLARE_INTERFACE_ (ITTSNotifySink2W, ITTSNotifySinkW) { + +// IUnknown members + + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + +// ITTSNotifySink2W members + + STDMETHOD (AttribChanged) (THIS_ DWORD) PURE; + STDMETHOD (AudioStart) (THIS_ QWORD) PURE; + STDMETHOD (AudioStop) (THIS_ QWORD) PURE; + STDMETHOD (Visual) (THIS_ QWORD, WCHAR, WCHAR, DWORD, PTTSMOUTH) PURE; + + STDMETHOD (Error) (THIS_ LPUNKNOWN) PURE; + STDMETHOD (Warning) (THIS_ LPUNKNOWN) PURE; + STDMETHOD (VisualFuture) (THIS_ DWORD, QWORD, WCHAR, WCHAR, DWORD, PTTSMOUTH) PURE; + }; + +typedef ITTSNotifySink2W FAR * PITTSNOTIFYSINK2W; + + +#undef INTERFACE +#define INTERFACE ITTSNotifySink2A + +// {599F77E2-E42E-11d1-BED8-006008317CE8} +DEFINE_GUID(IID_ITTSNotifySink2A, +0x599f77e2, 0xe42e, 0x11d1, 0xbe, 0xd8, 0x0, 0x60, 0x8, 0x31, 0x7c, 0xe8); + +DECLARE_INTERFACE_ (ITTSNotifySink2A, ITTSNotifySinkA) { + + // IUnknown members + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ITTSNotifySink2A members + STDMETHOD (AttribChanged) (THIS_ DWORD) PURE; + STDMETHOD (AudioStart) (THIS_ QWORD) PURE; + STDMETHOD (AudioStop) (THIS_ QWORD) PURE; + STDMETHOD (Visual) (THIS_ QWORD, CHAR, CHAR, DWORD, PTTSMOUTH) PURE; + + STDMETHOD (Error) (THIS_ LPUNKNOWN) PURE; + STDMETHOD (Warning) (THIS_ LPUNKNOWN) PURE; + STDMETHOD (VisualFuture) (THIS_ DWORD, QWORD, CHAR, CHAR, DWORD, PTTSMOUTH) PURE; + }; + +typedef ITTSNotifySink2A FAR * PITTSNOTIFYSINK2A; + + +#ifdef _S_UNICODE + #define ITTSNotifySink2 ITTSNotifySink2W + #define IID_ITTSNotifySink2 IID_ITTSNotifySink2W + #define PITTSNOTIFYSINK2 PITTSNOTIFYSINK2W + +#else + #define ITTSNotifySink2 ITTSNotifySink2A + #define IID_ITTSNotifySink2 IID_ITTSNotifySink2A + #define PITTSNOTIFYSINK2 PITTSNOTIFYSINK2A + +#endif + + +/************************************************************************ +High-Level command and control speech recognition API +*/ + +/************************************************************************ +defines */ + + +// VCMDNAME member lengths +#define VCMD_APPLEN ((DWORD)32) +#define VCMD_STATELEN VCMD_APPLEN +#define VCMD_MICLEN VCMD_APPLEN +#define VCMD_SPEAKERLEN VCMD_APPLEN + +// dwFlags parameter of IVoiceCmd::MenuCreate +#define VCMDMC_CREATE_TEMP 0x00000001 +#define VCMDMC_CREATE_NEW 0x00000002 +#define VCMDMC_CREATE_ALWAYS 0x00000004 +#define VCMDMC_OPEN_ALWAYS 0x00000008 +#define VCMDMC_OPEN_EXISTING 0x00000010 + +// dwFlags parameter of IVoiceCmd::Register +#define VCMDRF_NOMESSAGES 0 +#define VCMDRF_ALLBUTVUMETER 0x00000001 +#define VCMDRF_VUMETER 0x00000002 +#define VCMDRF_ALLMESSAGES (VCMDRF_ALLBUTVUMETER | VCMDRF_VUMETER) + +// dwFlags parameter of IVoiceCmd::MenuEnum +#define VCMDEF_DATABASE 0x00000000 +#define VCMDEF_ACTIVE 0x00000001 +#define VCMDEF_SELECTED 0x00000002 +#define VCMDEF_PERMANENT 0x00000004 +#define VCMDEF_TEMPORARY 0x00000008 + +// dwFlags parameter of IVCmdMenu::Activate +#define VWGFLAG_ASLEEP 0x00000001 + +// wPriority parameter of IVCmdMenu::Activate +#define VCMDACT_NORMAL (0x8000) +#define VCMDACT_LOW (0x4000) +#define VCMDACT_HIGH (0xC000) + +// dwFlags of the VCMDCOMMAND structure +#define VCMDCMD_VERIFY 0x00000001 +#define VCMDCMD_DISABLED_TEMP 0x00000002 +#define VCMDCMD_DISABLED_PERM 0x00000004 +#define VCMDCMD_CANTRENAME 0x00000008 + +// parameter to any function that processes individual commands +#define VCMD_BY_POSITION 0x00000001 +#define VCMD_BY_IDENTIFIER 0x00000002 + + +// values for dwAttributes field of IVCmdNotifySink::AttribChanged +#define IVCNSAC_AUTOGAINENABLE 0x00000001 +#define IVCNSAC_ENABLED 0x00000002 +#define IVCNSAC_AWAKE 0x00000004 +#define IVCNSAC_DEVICE 0x00000008 +#define IVCNSAC_MICROPHONE 0x00000010 +#define IVCNSAC_SPEAKER 0x00000020 +#define IVCNSAC_SRMODE 0x00000040 +#define IVCNSAC_THRESHOLD 0x00000080 +#define IVCNSAC_ORIGINAPP 0x00010000 + +// values for dwAttributes field of IVTxtNotifySink::AttribChanged +#define IVTNSAC_DEVICE 0x00000001 +#define IVTNSAC_ENABLED 0x00000002 +#define IVTNSAC_SPEED 0x00000004 +#define IVTNSAC_VOLUME 0x00000008 +#define IVTNSAC_TTSMODE 0x00000010 + + +// values used by IVXxxAttributes::SetMode to set the global speech +// recognition mode +#define VSRMODE_OFF 0x00000002 +#define VSRMODE_DISABLED 0x00000001 +#define VSRMODE_CMDPAUSED 0x00000004 +#define VSRMODE_CMDONLY 0x00000010 +#define VSRMODE_DCTONLY 0x00000020 +#define VSRMODE_CMDANDDCT 0x00000040 + + +/************************************************************************ +typedefs */ + +// voice command structure - passed to command menu functions (IVCmdMenu) +typedef struct { + DWORD dwSize; // size of struct including amount of abAction + DWORD dwFlags; + DWORD dwID; // Command ID + DWORD dwCommand; // DWORD aligned offset of command string + DWORD dwDescription; // DWORD aligned offset of description string + DWORD dwCategory; // DWORD aligned offset of category string + DWORD dwCommandText; // DWORD aligned offset of command text string + DWORD dwAction; // DWORD aligned offset of action data + DWORD dwActionSize; // size of the action data (could be string or binary) + BYTE abData[1]; // command, description, category, and action data + // (action data is NOT interpreted by voice command) +} VCMDCOMMAND, * PVCMDCOMMAND; + + + +// site information structure - possible parameter to IVoiceCmd::Register +typedef struct { + DWORD dwAutoGainEnable; + DWORD dwAwakeState; + DWORD dwThreshold; + DWORD dwDevice; + DWORD dwEnable; + WCHAR szMicrophone[VCMD_MICLEN]; + WCHAR szSpeaker[VCMD_SPEAKERLEN]; + GUID gModeID; +} VCSITEINFOW, *PVCSITEINFOW; + +typedef struct { + DWORD dwAutoGainEnable; + DWORD dwAwakeState; + DWORD dwThreshold; + DWORD dwDevice; + DWORD dwEnable; + CHAR szMicrophone[VCMD_MICLEN]; + CHAR szSpeaker[VCMD_SPEAKERLEN]; + GUID gModeID; +} VCSITEINFOA, *PVCSITEINFOA; + + + +// menu name structure +typedef struct { + WCHAR szApplication[VCMD_APPLEN]; // unique application name + WCHAR szState[VCMD_STATELEN]; // unique application state +} VCMDNAMEW, *PVCMDNAMEW; + +typedef struct { + CHAR szApplication[VCMD_APPLEN]; // unique application name + CHAR szState[VCMD_STATELEN]; // unique application state +} VCMDNAMEA, *PVCMDNAMEA; + + + +#ifdef _S_UNICODE + #define VCSITEINFO VCSITEINFOW + #define PVCSITEINFO PVCSITEINFOW + #define VCMDNAME VCMDNAMEW + #define PVCMDNAME PVCMDNAMEW +#else + #define VCSITEINFO VCSITEINFOA + #define PVCSITEINFO PVCSITEINFOA + #define VCMDNAME VCMDNAMEA + #define PVCMDNAME PVCMDNAMEA +#endif // _S_UNICODE + +/************************************************************************ +interfaces */ + +/* + * IVCmdNotifySink + */ +#undef INTERFACE +#define INTERFACE IVCmdNotifySinkW + +DEFINE_GUID(IID_IVCmdNotifySinkW, 0xCCFD7A60L, 0x604D, 0x101B, 0x99, 0x26, 0x00, 0xAA, 0x00, 0x3C, 0xFC, 0x2C); + +DECLARE_INTERFACE_ (IVCmdNotifySinkW, IUnknown) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVCmdNotifySink members + + STDMETHOD (CommandRecognize) (THIS_ DWORD, PVCMDNAMEW, DWORD, DWORD, PVOID, + DWORD, PWSTR, PWSTR) PURE; + STDMETHOD (CommandOther) (THIS_ PVCMDNAMEW, PWSTR) PURE; + STDMETHOD (CommandStart) (THIS) PURE; + STDMETHOD (MenuActivate) (THIS_ PVCMDNAMEW, BOOL) PURE; + STDMETHOD (UtteranceBegin) (THIS) PURE; + STDMETHOD (UtteranceEnd) (THIS) PURE; + STDMETHOD (VUMeter) (THIS_ WORD) PURE; + STDMETHOD (AttribChanged) (THIS_ DWORD) PURE; + STDMETHOD (Interference) (THIS_ DWORD) PURE; +}; + +typedef IVCmdNotifySinkW FAR * PIVCMDNOTIFYSINKW; + + +#undef INTERFACE +#define INTERFACE IVCmdNotifySinkA + +// {80B25CC0-5540-11b9-C000-5611722E1D15} +DEFINE_GUID(IID_IVCmdNotifySinkA, 0x80b25cc0, 0x5540, 0x11b9, 0xc0, 0x0, 0x56, 0x11, 0x72, 0x2e, 0x1d, 0x15); + +DECLARE_INTERFACE_ (IVCmdNotifySinkA, IUnknown) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVCmdNotifySinkA members + + STDMETHOD (CommandRecognize) (THIS_ DWORD, PVCMDNAMEA, DWORD, DWORD, PVOID, + DWORD, PSTR, PSTR) PURE; + STDMETHOD (CommandOther) (THIS_ PVCMDNAMEA, PSTR) PURE; + STDMETHOD (CommandStart) (THIS) PURE; + STDMETHOD (MenuActivate) (THIS_ PVCMDNAMEA, BOOL) PURE; + STDMETHOD (UtteranceBegin) (THIS) PURE; + STDMETHOD (UtteranceEnd) (THIS) PURE; + STDMETHOD (VUMeter) (THIS_ WORD) PURE; + STDMETHOD (AttribChanged) (THIS_ DWORD) PURE; + STDMETHOD (Interference) (THIS_ DWORD) PURE; +}; + +typedef IVCmdNotifySinkA FAR * PIVCMDNOTIFYSINKA; + + +#ifdef _S_UNICODE + #define IVCmdNotifySink IVCmdNotifySinkW + #define IID_IVCmdNotifySink IID_IVCmdNotifySinkW + #define PIVCMDNOTIFYSINK PIVCMDNOTIFYSINKW + +#else + #define IVCmdNotifySink IVCmdNotifySinkA + #define IID_IVCmdNotifySink IID_IVCmdNotifySinkA + #define PIVCMDNOTIFYSINK PIVCMDNOTIFYSINKA + +#endif // _S_UNICODE + + +/* + * IVCmdEnum + */ +#undef INTERFACE +#define INTERFACE IVCmdEnumW + +DEFINE_GUID(IID_IVCmdEnumW, 0xD3CC0820L, 0x604D, 0x101B, 0x99, 0x26, 0x00, 0xAA, 0x00, 0x3C, 0xFC, 0x2C); + +DECLARE_INTERFACE_ (IVCmdEnumW, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVCmdEnum members + STDMETHOD (Next) (THIS_ ULONG, PVCMDNAMEW, ULONG *) PURE; + STDMETHOD (Skip) (THIS_ ULONG) PURE; + STDMETHOD (Reset) (THIS) PURE; + STDMETHOD (Clone) (THIS_ IVCmdEnumW * FAR *) PURE; +}; +typedef IVCmdEnumW FAR * PIVCMDENUMW; + + +#undef INTERFACE +#define INTERFACE IVCmdEnumA + +// {E86F9540-DCA2-11CD-A166-00AA004CD65C} +DEFINE_GUID(IID_IVCmdEnumA, +0xE86F9540, 0xDCA2, 0x11CD, 0xA1, 0x66, 0x0, 0xAA, 0x0, 0x4C, 0xD6, 0x5C); + +DECLARE_INTERFACE_ (IVCmdEnumA, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVCmdEnum members + STDMETHOD (Next) (THIS_ ULONG, PVCMDNAMEA, ULONG *) PURE; + STDMETHOD (Skip) (THIS_ ULONG) PURE; + STDMETHOD (Reset) (THIS) PURE; + STDMETHOD (Clone) (THIS_ IVCmdEnumA * FAR *) PURE; +}; +typedef IVCmdEnumA FAR * PIVCMDENUMA; + + +#ifdef _S_UNICODE + #define IVCmdEnum IVCmdEnumW + #define IID_IVCmdEnum IID_IVCmdEnumW + #define PIVCMDENUM PIVCMDENUMW + +#else + #define IVCmdEnum IVCmdEnumA + #define IID_IVCmdEnum IID_IVCmdEnumA + #define PIVCMDENUM PIVCMDENUMA + +#endif // _S_UNICODE + + + + +/* + * IEnumSRShare + */ +#undef INTERFACE +#define INTERFACE IEnumSRShareW + +// {E97F05C0-81B3-11ce-B763-00AA004CD65C} +DEFINE_GUID(IID_IEnumSRShareW, +0xe97f05c0, 0x81b3, 0x11ce, 0xb7, 0x63, 0x0, 0xaa, 0x0, 0x4c, 0xd6, 0x5c); + +DECLARE_INTERFACE_ (IEnumSRShareW, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IEnumSRShare members + STDMETHOD (Next) (THIS_ ULONG, PSRSHAREW, ULONG *) PURE; + STDMETHOD (Skip) (THIS_ ULONG) PURE; + STDMETHOD (Reset) (THIS) PURE; + STDMETHOD (Clone) (THIS_ IEnumSRShareW * FAR *) PURE; + STDMETHOD (New) (THIS_ DWORD, GUID, PISRCENTRALW *, QWORD *) PURE; + STDMETHOD (Share) (THIS_ QWORD, PISRCENTRALW *) PURE; + STDMETHOD (Detach) (THIS_ QWORD) PURE; +}; +typedef IEnumSRShareW FAR * PIENUMSRSHAREW; + + +#undef INTERFACE +#define INTERFACE IEnumSRShareA + +// {E97F05C1-81B3-11ce-B763-00AA004CD65C} +DEFINE_GUID(IID_IEnumSRShareA, +0xe97f05c1, 0x81b3, 0x11ce, 0xb7, 0x63, 0x0, 0xaa, 0x0, 0x4c, 0xd6, 0x5c); + +DECLARE_INTERFACE_ (IEnumSRShareA, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IEnumSRShare members + STDMETHOD (Next) (THIS_ ULONG, PSRSHAREA, ULONG *) PURE; + STDMETHOD (Skip) (THIS_ ULONG) PURE; + STDMETHOD (Reset) (THIS) PURE; + STDMETHOD (Clone) (THIS_ IEnumSRShareA * FAR *) PURE; + STDMETHOD (New) (THIS_ DWORD, GUID, PISRCENTRALA *, QWORD *) PURE; + STDMETHOD (Share) (THIS_ QWORD, PISRCENTRALA *) PURE; + STDMETHOD (Detach) (THIS_ QWORD) PURE; +}; +typedef IEnumSRShareA FAR * PIENUMSRSHAREA; + + +#ifdef _S_UNICODE + #define IEnumSRShare IEnumSRShareW + #define IID_IEnumSRShare IID_IEnumSRShareW + #define PIENUMSRSHARE PIENUMSRSHAREW + +#else + #define IEnumSRShare IEnumSRShareA + #define IID_IEnumSRShare IID_IEnumSRShareA + #define PIENUMSRSHARE PIENUMSRSHAREA + +#endif // _S_UNICODE + + + + +/* + * IVCmdMenu + */ +#undef INTERFACE +#define INTERFACE IVCmdMenuW + +DEFINE_GUID(IID_IVCmdMenuW, 0xDAC54F60L, 0x604D, 0x101B, 0x99, 0x26, 0x00, 0xAA, 0x00, 0x3C, 0xFC, 0x2C); + +DECLARE_INTERFACE_ (IVCmdMenuW, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVCmdMenu members + STDMETHOD (Activate) (THIS_ HWND, DWORD) PURE; + STDMETHOD (Deactivate) (THIS) PURE; + STDMETHOD (TrainMenuDlg) (THIS_ HWND, PCWSTR) PURE; + STDMETHOD (Num) (THIS_ DWORD *) PURE; + STDMETHOD (Get) (THIS_ DWORD, DWORD, DWORD, PSDATA, DWORD *) PURE; + STDMETHOD (Set) (THIS_ DWORD, DWORD, DWORD, SDATA) PURE; + STDMETHOD (Add) (THIS_ DWORD, SDATA, DWORD *) PURE; + STDMETHOD (Remove) (THIS_ DWORD, DWORD, DWORD) PURE; + STDMETHOD (ListGet) (THIS_ PCWSTR, PSDATA, DWORD *) PURE; + STDMETHOD (ListSet) (THIS_ PCWSTR, DWORD, SDATA) PURE; + STDMETHOD (EnableItem) (THIS_ DWORD, DWORD, DWORD) PURE; + STDMETHOD (SetItem) (THIS_ DWORD, DWORD, DWORD) PURE; +}; + +typedef IVCmdMenuW FAR * PIVCMDMENUW; + + +#undef INTERFACE +#define INTERFACE IVCmdMenuA + +// {746141E0-5543-11b9-C000-5611722E1D15} +DEFINE_GUID(IID_IVCmdMenuA, 0x746141e0, 0x5543, 0x11b9, 0xc0, 0x0, 0x56, 0x11, 0x72, 0x2e, 0x1d, 0x15); + +DECLARE_INTERFACE_ (IVCmdMenuA, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVCmdMenu members + STDMETHOD (Activate) (THIS_ HWND, DWORD) PURE; + STDMETHOD (Deactivate) (THIS) PURE; + STDMETHOD (TrainMenuDlg) (THIS_ HWND, PCSTR) PURE; + STDMETHOD (Num) (THIS_ DWORD *) PURE; + STDMETHOD (Get) (THIS_ DWORD, DWORD, DWORD, PSDATA, DWORD *) PURE; + STDMETHOD (Set) (THIS_ DWORD, DWORD, DWORD, SDATA) PURE; + STDMETHOD (Add) (THIS_ DWORD, SDATA, DWORD *) PURE; + STDMETHOD (Remove) (THIS_ DWORD, DWORD, DWORD) PURE; + STDMETHOD (ListGet) (THIS_ PCSTR, PSDATA, DWORD *) PURE; + STDMETHOD (ListSet) (THIS_ PCSTR, DWORD, SDATA) PURE; + STDMETHOD (EnableItem) (THIS_ DWORD, DWORD, DWORD) PURE; + STDMETHOD (SetItem) (THIS_ DWORD, DWORD, DWORD) PURE; +}; + +typedef IVCmdMenuA FAR * PIVCMDMENUA; + + +#ifdef _S_UNICODE + #define IVCmdMenu IVCmdMenuW + #define IID_IVCmdMenu IID_IVCmdMenuW + #define PIVCMDMENU PIVCMDMENUW + +#else + #define IVCmdMenu IVCmdMenuA + #define IID_IVCmdMenu IID_IVCmdMenuA + #define PIVCMDMENU PIVCMDMENUA + +#endif // _S_UNICODE + + + +/* + * IVoiceCmd + */ +#undef INTERFACE +#define INTERFACE IVoiceCmdW + +DEFINE_GUID(IID_IVoiceCmdW, 0xE0DCC220L, 0x604D, 0x101B, 0x99, 0x26, 0x00, 0xAA, 0x00, 0x3C, 0xFC, 0x2C); + +DECLARE_INTERFACE_ (IVoiceCmdW, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVoiceCmd members + STDMETHOD (Register) (THIS_ PCWSTR, LPUNKNOWN, GUID, DWORD, + PVCSITEINFOW) PURE; + STDMETHOD (MenuEnum) (THIS_ DWORD, PCWSTR, PCWSTR, PIVCMDENUMW *) PURE; + STDMETHOD (MenuCreate) (THIS_ PVCMDNAMEW, PLANGUAGEW, DWORD, + PIVCMDMENUW *) PURE; + STDMETHOD (MenuDelete) (THIS_ PVCMDNAMEW) PURE; + STDMETHOD (CmdMimic) (THIS_ PVCMDNAMEW, PCWSTR) PURE; +}; + +typedef IVoiceCmdW FAR * PIVOICECMDW; + + +#undef INTERFACE +#define INTERFACE IVoiceCmdA + +// {C63A2B30-5543-11b9-C000-5611722E1D15} +DEFINE_GUID(IID_IVoiceCmdA, 0xc63a2b30, 0x5543, 0x11b9, 0xc0, 0x0, 0x56, 0x11, 0x72, 0x2e, 0x1d, 0x15); + +DECLARE_INTERFACE_ (IVoiceCmdA, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVoiceCmd members + STDMETHOD (Register) (THIS_ PCSTR, LPUNKNOWN, GUID, DWORD, + PVCSITEINFOA) PURE; + STDMETHOD (MenuEnum) (THIS_ DWORD, PCSTR, PCSTR, PIVCMDENUMA *) PURE; + STDMETHOD (MenuCreate) (THIS_ PVCMDNAMEA, PLANGUAGEA, DWORD, + PIVCMDMENUA *) PURE; + STDMETHOD (MenuDelete) (THIS_ PVCMDNAMEA) PURE; + STDMETHOD (CmdMimic) (THIS_ PVCMDNAMEA, PCSTR) PURE; +}; + +typedef IVoiceCmdA FAR * PIVOICECMDA; + + +#ifdef _S_UNICODE + #define IVoiceCmd IVoiceCmdW + #define IID_IVoiceCmd IID_IVoiceCmdW + #define PIVOICECMD PIVOICECMDW + +#else + #define IVoiceCmd IVoiceCmdA + #define IID_IVoiceCmd IID_IVoiceCmdA + #define PIVOICECMD PIVOICECMDA + +#endif //_S_UNICODE + + +/* + * IVCmdAttributes + */ +#undef INTERFACE +#define INTERFACE IVCmdAttributesW + +DEFINE_GUID(IID_IVCmdAttributesW, 0xE5F24680L, 0x6053, 0x101B, 0x99, 0x26, 0x00, 0xAA, 0x00, 0x3C, 0xFC, 0x2C); + +DECLARE_INTERFACE_ (IVCmdAttributesW, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVCmdAttributes members + STDMETHOD (AutoGainEnableGet) (THIS_ DWORD *) PURE; + STDMETHOD (AutoGainEnableSet) (THIS_ DWORD) PURE; + STDMETHOD (AwakeStateGet) (THIS_ DWORD *) PURE; + STDMETHOD (AwakeStateSet) (THIS_ DWORD) PURE; + STDMETHOD (ThresholdGet) (THIS_ DWORD *) PURE; + STDMETHOD (ThresholdSet) (THIS_ DWORD) PURE; + STDMETHOD (DeviceGet) (THIS_ DWORD *) PURE; + STDMETHOD (DeviceSet) (THIS_ DWORD) PURE; + STDMETHOD (EnabledGet) (THIS_ DWORD *) PURE; + STDMETHOD (EnabledSet) (THIS_ DWORD) PURE; + STDMETHOD (MicrophoneGet) (THIS_ PWSTR, DWORD, DWORD *) PURE; + STDMETHOD (MicrophoneSet) (THIS_ PCWSTR) PURE; + STDMETHOD (SpeakerGet) (THIS_ PWSTR, DWORD, DWORD *) PURE; + STDMETHOD (SpeakerSet) (THIS_ PCWSTR) PURE; + STDMETHOD (SRModeGet) (THIS_ GUID *) PURE; + STDMETHOD (SRModeSet) (THIS_ GUID) PURE; +}; + +typedef IVCmdAttributesW FAR * PIVCMDATTRIBUTESW; + + +#undef INTERFACE +#define INTERFACE IVCmdAttributesA + +// {FFF5DF80-5544-11b9-C000-5611722E1D15} +DEFINE_GUID(IID_IVCmdAttributesA, 0xfff5df80, 0x5544, 0x11b9, 0xc0, 0x0, 0x56, 0x11, 0x72, 0x2e, 0x1d, 0x15); + +DECLARE_INTERFACE_ (IVCmdAttributesA, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVCmdAttributes members + STDMETHOD (AutoGainEnableGet) (THIS_ DWORD *) PURE; + STDMETHOD (AutoGainEnableSet) (THIS_ DWORD) PURE; + STDMETHOD (AwakeStateGet) (THIS_ DWORD *) PURE; + STDMETHOD (AwakeStateSet) (THIS_ DWORD) PURE; + STDMETHOD (ThresholdGet) (THIS_ DWORD *) PURE; + STDMETHOD (ThresholdSet) (THIS_ DWORD) PURE; + STDMETHOD (DeviceGet) (THIS_ DWORD *) PURE; + STDMETHOD (DeviceSet) (THIS_ DWORD) PURE; + STDMETHOD (EnabledGet) (THIS_ DWORD *) PURE; + STDMETHOD (EnabledSet) (THIS_ DWORD) PURE; + STDMETHOD (MicrophoneGet) (THIS_ PSTR, DWORD, DWORD *) PURE; + STDMETHOD (MicrophoneSet) (THIS_ PCSTR) PURE; + STDMETHOD (SpeakerGet) (THIS_ PSTR, DWORD, DWORD *) PURE; + STDMETHOD (SpeakerSet) (THIS_ PCSTR) PURE; + STDMETHOD (SRModeGet) (THIS_ GUID *) PURE; + STDMETHOD (SRModeSet) (THIS_ GUID) PURE; +}; + +typedef IVCmdAttributesA FAR * PIVCMDATTRIBUTESA; + + +#ifdef _S_UNICODE + #define IVCmdAttributes IVCmdAttributesW + #define IID_IVCmdAttributes IID_IVCmdAttributesW + #define PIVCMDATTRIBUTES PIVCMDATTRIBUTESW + +#else + #define IVCmdAttributes IVCmdAttributesA + #define IID_IVCmdAttributes IID_IVCmdAttributesA + #define PIVCMDATTRIBUTES PIVCMDATTRIBUTESA + +#endif // _S_UNICODE + + + +/* + * IVCmdDialog + */ +#undef INTERFACE +#define INTERFACE IVCmdDialogsW + +DEFINE_GUID(IID_IVCmdDialogsW, 0xEE39B8A0L, 0x6053, 0x101B, 0x99, 0x26, 0x00, 0xAA, 0x00, 0x3C, 0xFC, 0x2C); + +DECLARE_INTERFACE_ (IVCmdDialogsW, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVCmdDialogs members + STDMETHOD (AboutDlg) (THIS_ HWND, PCWSTR) PURE; + STDMETHOD (GeneralDlg) (THIS_ HWND, PCWSTR) PURE; + STDMETHOD (LexiconDlg) (THIS_ HWND, PCWSTR) PURE; + STDMETHOD (TrainGeneralDlg) (THIS_ HWND, PCWSTR) PURE; + STDMETHOD (TrainMicDlg) (THIS_ HWND, PCWSTR) PURE; +}; + +typedef IVCmdDialogsW FAR * PIVCMDDIALOGSW; + + +#undef INTERFACE +#define INTERFACE IVCmdDialogsA + +// {AA8FE260-5545-11b9-C000-5611722E1D15} +DEFINE_GUID(IID_IVCmdDialogsA, 0xaa8fe260, 0x5545, 0x11b9, 0xc0, 0x0, 0x56, 0x11, 0x72, 0x2e, 0x1d, 0x15); + +DECLARE_INTERFACE_ (IVCmdDialogsA, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVCmdDialogs members + STDMETHOD (AboutDlg) (THIS_ HWND, PCSTR) PURE; + STDMETHOD (GeneralDlg) (THIS_ HWND, PCSTR) PURE; + STDMETHOD (LexiconDlg) (THIS_ HWND, PCSTR) PURE; + STDMETHOD (TrainGeneralDlg) (THIS_ HWND, PCSTR) PURE; + STDMETHOD (TrainMicDlg) (THIS_ HWND, PCSTR) PURE; +}; + +typedef IVCmdDialogsA FAR * PIVCMDDIALOGSA; + + +#ifdef _S_UNICODE + #define IVCmdDialogs IVCmdDialogsW + #define IID_IVCmdDialogs IID_IVCmdDialogsW + #define PIVCMDDIALOGS PIVCMDDIALOGSW + +#else + #define IVCmdDialogs IVCmdDialogsA + #define IID_IVCmdDialogs IID_IVCmdDialogsA + #define PIVCMDDIALOGS PIVCMDDIALOGSA + +#endif // _S_UNICODE + + + +/************************************************************************ +class guids */ + +// DEFINE_GUID(CLSID_VCmd, 0x93898800L, 0x604D, 0x101B, 0x99, 0x26, 0x00, 0xAA, 0x00, 0x3C, 0xFC, 0x2C); +// {6D40D820-0BA7-11ce-A166-00AA004CD65C} +DEFINE_GUID(CLSID_VCmd, +0x6d40d820, 0xba7, 0x11ce, 0xa1, 0x66, 0x0, 0xaa, 0x0, 0x4c, 0xd6, 0x5c); +// {89F70C30-8636-11ce-B763-00AA004CD65C} +DEFINE_GUID(CLSID_SRShare, +0x89f70c30, 0x8636, 0x11ce, 0xb7, 0x63, 0x0, 0xaa, 0x0, 0x4c, 0xd6, 0x5c); + + + +/************************************************************************ +High-Level dictation speech recognition API +*/ + +/************************************************************************ +defines */ +#define VDCT_TOPICNAMELEN 32 + +// bit flags for the dwReason field of IVDctNotifySink::TextChanged +#define VDCT_TEXTADDED 0x00000001 +#define VDCT_TEXTREMOVED 0x00000002 +#define VDCT_TEXTREPLACED 0x00000004 + +// bit flags for the dwReason field of IVDctText::TextRemove/TextSet +#define VDCT_TEXTCLEAN 0x00010000 +#define VDCT_TEXTKEEPRESULTS 0x00020000 + +// bit flags for dwFlags of IVDctGUI::FlagsSet +#define VDCTGUIF_VISIBLE 0x00000001 +#define VDCTGUIF_DONTMOVE 0x00000002 +#define VDCTGUIF_ADDWORD 0x00000004 + +// bit flags for dwFX of IVDctText::FX +#define VDCTFX_CAPFIRST 0x00000001 +#define VDCTFX_LOWERFIRST 0x00000002 +#define VDCTFX_TOGGLEFIRST 0x00000003 +#define VDCTFX_CAPALL 0x00000004 +#define VDCTFX_LOWERALL 0x00000005 +#define VDCTFX_REMOVESPACES 0x00000006 +#define VDCTFX_KEEPONLYFIRSTLETTER 0x00000007 + +/************************************************************************ +typedefs */ + +// site information structure - used for IVoiceDictation::SiteInfoGet/Set +typedef struct { + DWORD dwAutoGainEnable; + DWORD dwAwakeState; + DWORD dwThreshold; + DWORD dwDevice; + DWORD dwEnable; + WCHAR szMicrophone[VCMD_MICLEN]; + WCHAR szSpeaker[VCMD_SPEAKERLEN]; + GUID gModeID; +} VDSITEINFOW, *PVDSITEINFOW; + +typedef struct { + DWORD dwAutoGainEnable; + DWORD dwAwakeState; + DWORD dwThreshold; + DWORD dwDevice; + DWORD dwEnable; + CHAR szMicrophone[VCMD_MICLEN]; + CHAR szSpeaker[VCMD_SPEAKERLEN]; + GUID gModeID; +} VDSITEINFOA, *PVDSITEINFOA; + + +// topic structure used by the IVoiceDictation object +typedef struct { + WCHAR szTopic[VDCT_TOPICNAMELEN]; + LANGUAGEW language; +} VDCTTOPICW, *PVDCTTOPICW; + +typedef struct { + CHAR szTopic[VDCT_TOPICNAMELEN]; + LANGUAGEA language; +} VDCTTOPICA, *PVDCTTOPICA; + + +#ifdef _S_UNICODE + #define VDSITEINFO VDSITEINFOW + #define PVDSITEINFO PVDSITEINFOW + #define VDCTTOPIC VDCTTOPICW + #define PVDCTTOPIC PVDCTTOPICW +#else + #define VDSITEINFO VDSITEINFOA + #define PVDSITEINFO PVDSITEINFOA + #define VDCTTOPIC VDCTTOPICA + #define PVDCTTOPIC PVDCTTOPICA +#endif // _S_UNICODE + + +// memory maintenance structure used by MemoryGet/Set in IVDctAttributes +typedef struct { + DWORD dwMaxRAM; + DWORD dwMaxTime; + DWORD dwMaxWords; + BOOL fKeepAudio; + BOOL fKeepCorrection; + BOOL fKeepEval; +} VDCTMEMORY, *PVDCTMEMORY; + + +// bookmark definition +typedef struct { + DWORD dwID; + DWORD dwPosn; +} VDCTBOOKMARK, *PVDCTBOOKMARK; + + + +/************************************************************************ +interfaces */ + +/* + * IVDctNotifySink + */ +#undef INTERFACE +#define INTERFACE IVDctNotifySinkW + +// {5FEB8800-67D5-11cf-9B8B-08005AFC3A41} +DEFINE_GUID(IID_IVDctNotifySinkW, +0x5feb8800, 0x67d5, 0x11cf, 0x9b, 0x8b, 0x8, 0x0, 0x5a, 0xfc, 0x3a, 0x41); + +DECLARE_INTERFACE_ (IVDctNotifySinkW, IUnknown) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVDctNotifySink members + STDMETHOD (CommandBuiltIn) (THIS_ PWSTR) PURE; + STDMETHOD (CommandOther) (THIS_ PWSTR) PURE; + STDMETHOD (CommandRecognize) (THIS_ DWORD, DWORD, DWORD, PVOID, PWSTR) PURE; + STDMETHOD (TextSelChanged) (THIS) PURE; + STDMETHOD (TextChanged) (THIS_ DWORD) PURE; + STDMETHOD (TextBookmarkChanged) (THIS_ DWORD) PURE; + STDMETHOD (PhraseStart) (THIS) PURE; + STDMETHOD (PhraseFinish) (THIS_ DWORD, PSRPHRASEW) PURE; + STDMETHOD (PhraseHypothesis) (THIS_ DWORD, PSRPHRASEW) PURE; + STDMETHOD (UtteranceBegin) (THIS) PURE; + STDMETHOD (UtteranceEnd) (THIS) PURE; + STDMETHOD (VUMeter) (THIS_ WORD) PURE; + STDMETHOD (AttribChanged) (THIS_ DWORD) PURE; + STDMETHOD (Interference) (THIS_ DWORD) PURE; + STDMETHOD (Training) (THIS_ DWORD) PURE; + STDMETHOD (Dictating) (THIS_ PCWSTR, BOOL) PURE; +}; + +typedef IVDctNotifySinkW FAR * PIVDCTNOTIFYSINKW; + + +#undef INTERFACE +#define INTERFACE IVDctNotifySinkA + +// {88AD7DC0-67D5-11cf-9B8B-08005AFC3A41} +DEFINE_GUID(IID_IVDctNotifySinkA, +0x88ad7dc0, 0x67d5, 0x11cf, 0x9b, 0x8b, 0x8, 0x0, 0x5a, 0xfc, 0x3a, 0x41); + +DECLARE_INTERFACE_ (IVDctNotifySinkA, IUnknown) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVDctNotifySinkA members + STDMETHOD (CommandBuiltIn) (THIS_ PSTR) PURE; + STDMETHOD (CommandOther) (THIS_ PSTR) PURE; + STDMETHOD (CommandRecognize) (THIS_ DWORD, DWORD, DWORD, PVOID, PSTR) PURE; + STDMETHOD (TextSelChanged) (THIS) PURE; + STDMETHOD (TextChanged) (THIS_ DWORD) PURE; + STDMETHOD (TextBookmarkChanged) (THIS_ DWORD) PURE; + STDMETHOD (PhraseStart) (THIS) PURE; + STDMETHOD (PhraseFinish) (THIS_ DWORD, PSRPHRASEA) PURE; + STDMETHOD (PhraseHypothesis) (THIS_ DWORD, PSRPHRASEA) PURE; + STDMETHOD (UtteranceBegin) (THIS) PURE; + STDMETHOD (UtteranceEnd) (THIS) PURE; + STDMETHOD (VUMeter) (THIS_ WORD) PURE; + STDMETHOD (AttribChanged) (THIS_ DWORD) PURE; + STDMETHOD (Interference) (THIS_ DWORD) PURE; + STDMETHOD (Training) (THIS_ DWORD) PURE; + STDMETHOD (Dictating) (THIS_ PCSTR, BOOL) PURE; +}; + +typedef IVDctNotifySinkA FAR * PIVDCTNOTIFYSINKA; + + +#ifdef _S_UNICODE + #define IVDctNotifySink IVDctNotifySinkW + #define IID_IVDctNotifySink IID_IVDctNotifySinkW + #define PIVDCTNOTIFYSINK PIVDCTNOTIFYSINKW + +#else + #define IVDctNotifySink IVDctNotifySinkA + #define IID_IVDctNotifySink IID_IVDctNotifySinkA + #define PIVDCTNOTIFYSINK PIVDCTNOTIFYSINKA + +#endif // _S_UNICODE + + + + +/* + * IVDctNotifySink2 + */ +#undef INTERFACE +#define INTERFACE IVDctNotifySink2W + +// {599F77E3-E42E-11d1-BED8-006008317CE8} +DEFINE_GUID(IID_IVDctNotifySink2W, +0x599f77e3, 0xe42e, 0x11d1, 0xbe, 0xd8, 0x0, 0x60, 0x8, 0x31, 0x7c, 0xe8); + +DECLARE_INTERFACE_ (IVDctNotifySink2W, IVDctNotifySinkW) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVDctNotifySink2 members + STDMETHOD (CommandBuiltIn) (THIS_ PWSTR) PURE; + STDMETHOD (CommandOther) (THIS_ PWSTR) PURE; + STDMETHOD (CommandRecognize) (THIS_ DWORD, DWORD, DWORD, PVOID, PWSTR) PURE; + STDMETHOD (TextSelChanged) (THIS) PURE; + STDMETHOD (TextChanged) (THIS_ DWORD) PURE; + STDMETHOD (TextBookmarkChanged) (THIS_ DWORD) PURE; + STDMETHOD (PhraseStart) (THIS) PURE; + STDMETHOD (PhraseFinish) (THIS_ DWORD, PSRPHRASEW) PURE; + STDMETHOD (PhraseHypothesis) (THIS_ DWORD, PSRPHRASEW) PURE; + STDMETHOD (UtteranceBegin) (THIS) PURE; + STDMETHOD (UtteranceEnd) (THIS) PURE; + STDMETHOD (VUMeter) (THIS_ WORD) PURE; + STDMETHOD (AttribChanged) (THIS_ DWORD) PURE; + STDMETHOD (Interference) (THIS_ DWORD) PURE; + STDMETHOD (Training) (THIS_ DWORD) PURE; + STDMETHOD (Dictating) (THIS_ PCWSTR, BOOL) PURE; + + STDMETHOD (Error) (THIS_ LPUNKNOWN) PURE; + STDMETHOD (Warning) (THIS_ LPUNKNOWN) PURE; +}; + +typedef IVDctNotifySink2W FAR * PIVDCTNOTIFYSINK2W; + + +#undef INTERFACE +#define INTERFACE IVDctNotifySink2A + +// {599F77E4-E42E-11d1-BED8-006008317CE8} +DEFINE_GUID(IID_IVDctNotifySink2A, +0x599f77e4, 0xe42e, 0x11d1, 0xbe, 0xd8, 0x0, 0x60, 0x8, 0x31, 0x7c, 0xe8); + +DECLARE_INTERFACE_ (IVDctNotifySink2A, IVDctNotifySinkA) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVDctNotifySink2A members + STDMETHOD (CommandBuiltIn) (THIS_ PSTR) PURE; + STDMETHOD (CommandOther) (THIS_ PSTR) PURE; + STDMETHOD (CommandRecognize) (THIS_ DWORD, DWORD, DWORD, PVOID, PSTR) PURE; + STDMETHOD (TextSelChanged) (THIS) PURE; + STDMETHOD (TextChanged) (THIS_ DWORD) PURE; + STDMETHOD (TextBookmarkChanged) (THIS_ DWORD) PURE; + STDMETHOD (PhraseStart) (THIS) PURE; + STDMETHOD (PhraseFinish) (THIS_ DWORD, PSRPHRASEA) PURE; + STDMETHOD (PhraseHypothesis) (THIS_ DWORD, PSRPHRASEA) PURE; + STDMETHOD (UtteranceBegin) (THIS) PURE; + STDMETHOD (UtteranceEnd) (THIS) PURE; + STDMETHOD (VUMeter) (THIS_ WORD) PURE; + STDMETHOD (AttribChanged) (THIS_ DWORD) PURE; + STDMETHOD (Interference) (THIS_ DWORD) PURE; + STDMETHOD (Training) (THIS_ DWORD) PURE; + STDMETHOD (Dictating) (THIS_ PCSTR, BOOL) PURE; + + STDMETHOD (Error) (THIS_ LPUNKNOWN) PURE; + STDMETHOD (Warning) (THIS_ LPUNKNOWN) PURE; +}; + +typedef IVDctNotifySink2A FAR * PIVDCTNOTIFYSINK2A; + + +#ifdef _S_UNICODE + #define IVDctNotifySink2 IVDctNotifySink2W + #define IID_IVDctNotifySink2 IID_IVDctNotifySink2W + #define PIVDCTNOTIFYSINK2 PIVDCTNOTIFYSINK2W + +#else + #define IVDctNotifySink2 IVDctNotifySink2A + #define IID_IVDctNotifySink2 IID_IVDctNotifySink2A + #define PIVDCTNOTIFYSINK2 PIVDCTNOTIFYSINK2A + +#endif // _S_UNICODE + + + +/* + * IVoiceDictation + */ +#undef INTERFACE +#define INTERFACE IVoiceDictationW + +// {88AD7DC3-67D5-11cf-9B8B-08005AFC3A41} +DEFINE_GUID(IID_IVoiceDictationW, +0x88ad7dc3, 0x67d5, 0x11cf, 0x9b, 0x8b, 0x8, 0x0, 0x5a, 0xfc, 0x3a, 0x41); + +DECLARE_INTERFACE_ (IVoiceDictationW, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVoiceDictation members + STDMETHOD (Register) (THIS_ PCWSTR, PCWSTR, LPSTORAGE, PCWSTR, + PIVDCTNOTIFYSINK, GUID, DWORD) PURE; + STDMETHOD (SiteInfoGet) (THIS_ PCWSTR, PVDSITEINFOW) PURE; + STDMETHOD (SiteInfoSet) (THIS_ PCWSTR, PVDSITEINFOW) PURE; + STDMETHOD (SessionSerialize) (THIS_ LPSTORAGE) PURE; + STDMETHOD (SessionDeserialize) (THIS_ LPSTORAGE) PURE; + STDMETHOD (TopicEnum) (THIS_ PSDATA) PURE; + STDMETHOD (TopicAddString) (THIS_ PCWSTR, LANGUAGEW *) PURE; + STDMETHOD (TopicRemove) (THIS_ PCWSTR) PURE; + STDMETHOD (TopicSerialize) (THIS_ LPSTORAGE) PURE; + STDMETHOD (TopicDeserialize) (THIS_ LPSTORAGE) PURE; + STDMETHOD (Activate) (THIS_ HWND) PURE; + STDMETHOD (Deactivate) (THIS) PURE; + STDMETHOD (TopicAddGrammar) (THIS_ PCWSTR, SDATA) PURE; + STDMETHOD (CFGSet) (THIS_ LANGID, PCWSTR, PCWSTR) PURE; +}; + +typedef IVoiceDictationW FAR * PIVOICEDICTATIONW; + + +#undef INTERFACE +#define INTERFACE IVoiceDictationA + +// {88AD7DC4-67D5-11cf-9B8B-08005AFC3A41} +DEFINE_GUID(IID_IVoiceDictationA, +0x88ad7dc4, 0x67d5, 0x11cf, 0x9b, 0x8b, 0x8, 0x0, 0x5a, 0xfc, 0x3a, 0x41); + +DECLARE_INTERFACE_ (IVoiceDictationA, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVoiceDictation members + STDMETHOD (Register) (THIS_ PCSTR, PCSTR, LPSTORAGE, PCSTR, + PIVDCTNOTIFYSINK, GUID, DWORD) PURE; + STDMETHOD (SiteInfoGet) (THIS_ PCSTR, PVDSITEINFOA) PURE; + STDMETHOD (SiteInfoSet) (THIS_ PCSTR, PVDSITEINFOA) PURE; + STDMETHOD (SessionSerialize) (THIS_ LPSTORAGE) PURE; + STDMETHOD (SessionDeserialize) (THIS_ LPSTORAGE) PURE; + STDMETHOD (TopicEnum) (THIS_ PSDATA) PURE; + STDMETHOD (TopicAddString) (THIS_ PCSTR, LANGUAGEA *) PURE; + STDMETHOD (TopicRemove) (THIS_ PCSTR) PURE; + STDMETHOD (TopicSerialize) (THIS_ LPSTORAGE) PURE; + STDMETHOD (TopicDeserialize) (THIS_ LPSTORAGE) PURE; + STDMETHOD (Activate) (THIS_ HWND) PURE; + STDMETHOD (Deactivate) (THIS) PURE; + STDMETHOD (TopicAddGrammar) (THIS_ PCSTR, SDATA) PURE; + STDMETHOD (CFGSet) (THIS_ LANGID, PCSTR, PCSTR) PURE; +}; + +typedef IVoiceDictationA FAR * PIVOICEDICTATIONA; + + +#ifdef _S_UNICODE + #define IVoiceDictation IVoiceDictationW + #define IID_IVoiceDictation IID_IVoiceDictationW + #define PIVOICEDICTATION PIVOICEDICTATIONW + +#else + #define IVoiceDictation IVoiceDictationA + #define IID_IVoiceDictation IID_IVoiceDictationA + #define PIVOICEDICTATION PIVOICEDICTATIONA + +#endif //_S_UNICODE + + + +/* + * IVDctText + */ +#undef INTERFACE +#define INTERFACE IVDctTextW + +// {6D62B3A0-6893-11cf-9B8B-08005AFC3A41} +DEFINE_GUID(IID_IVDctTextW, +0x6d62b3a0, 0x6893, 0x11cf, 0x9b, 0x8b, 0x8, 0x0, 0x5a, 0xfc, 0x3a, 0x41); + +DECLARE_INTERFACE_ (IVDctTextW, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVDctText members + STDMETHOD (Lock) (THIS) PURE; + STDMETHOD (UnLock) (THIS) PURE; + STDMETHOD (TextGet) (THIS_ DWORD, DWORD, PSDATA) PURE; + STDMETHOD (TextSet) (THIS_ DWORD, DWORD, PCWSTR, DWORD) PURE; + STDMETHOD (TextMove) (THIS_ DWORD, DWORD, DWORD, DWORD) PURE; + STDMETHOD (TextRemove) (THIS_ DWORD, DWORD, DWORD) PURE; + STDMETHOD (TextSelSet) (THIS_ DWORD, DWORD) PURE; + STDMETHOD (TextSelGet) (THIS_ DWORD *, DWORD *) PURE; + STDMETHOD (TextLengthGet) (THIS_ DWORD *) PURE; + STDMETHOD (GetChanges) (THIS_ DWORD *, DWORD *, DWORD *, DWORD *) PURE; + STDMETHOD (BookmarkAdd) (THIS_ PVDCTBOOKMARK) PURE; + STDMETHOD (BookmarkRemove) (THIS_ DWORD) PURE; + STDMETHOD (BookmarkMove) (THIS_ DWORD, DWORD) PURE; + STDMETHOD (BookmarkQuery) (THIS_ DWORD, PVDCTBOOKMARK) PURE; + STDMETHOD (BookmarkEnum) (THIS_ DWORD, DWORD, PVDCTBOOKMARK *, + DWORD *) PURE; + STDMETHOD (Hint) (THIS_ PCWSTR) PURE; + STDMETHOD (Words) (THIS_ PCWSTR) PURE; + STDMETHOD (ResultsGet) (THIS_ DWORD, DWORD, DWORD *, DWORD *, + LPUNKNOWN *) PURE; + STDMETHOD (FX) (THIS_ DWORD) PURE; +}; +typedef IVDctTextW FAR * PIVDCTTEXTW; + + +#undef INTERFACE +#define INTERFACE IVDctTextA + +// {6D62B3A1-6893-11cf-9B8B-08005AFC3A41} +DEFINE_GUID(IID_IVDctTextA, +0x6d62b3a1, 0x6893, 0x11cf, 0x9b, 0x8b, 0x8, 0x0, 0x5a, 0xfc, 0x3a, 0x41); + +DECLARE_INTERFACE_ (IVDctTextA, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVDctText members + STDMETHOD (Lock) (THIS) PURE; + STDMETHOD (UnLock) (THIS) PURE; + STDMETHOD (TextGet) (THIS_ DWORD, DWORD, PSDATA) PURE; + STDMETHOD (TextSet) (THIS_ DWORD, DWORD, PCSTR, DWORD) PURE; + STDMETHOD (TextMove) (THIS_ DWORD, DWORD, DWORD, DWORD) PURE; + STDMETHOD (TextRemove) (THIS_ DWORD, DWORD, DWORD) PURE; + STDMETHOD (TextSelSet) (THIS_ DWORD, DWORD) PURE; + STDMETHOD (TextSelGet) (THIS_ DWORD *, DWORD *) PURE; + STDMETHOD (TextLengthGet) (THIS_ DWORD *) PURE; + STDMETHOD (GetChanges) (THIS_ DWORD *, DWORD *, DWORD *, DWORD *) PURE; + STDMETHOD (BookmarkAdd) (THIS_ PVDCTBOOKMARK) PURE; + STDMETHOD (BookmarkRemove) (THIS_ DWORD) PURE; + STDMETHOD (BookmarkMove) (THIS_ DWORD, DWORD) PURE; + STDMETHOD (BookmarkQuery) (THIS_ DWORD, PVDCTBOOKMARK) PURE; + STDMETHOD (BookmarkEnum) (THIS_ DWORD, DWORD, PVDCTBOOKMARK *, + DWORD *) PURE; + STDMETHOD (Hint) (THIS_ PCSTR) PURE; + STDMETHOD (Words) (THIS_ PCSTR) PURE; + STDMETHOD (ResultsGet) (THIS_ DWORD, DWORD, DWORD *, DWORD *, + LPUNKNOWN *) PURE; + STDMETHOD (FX) (THIS_ DWORD) PURE; +}; +typedef IVDctTextA FAR * PIVDCTTEXTA; + + +#ifdef _S_UNICODE + #define IVDctText IVDctTextW + #define IID_IVDctText IID_IVDctTextW + #define PIVDCTTEXT PIVDCTTEXTW + +#else + #define IVDctText IVDctTextA + #define IID_IVDctText IID_IVDctTextA + #define PIVDCTTEXT PIVDCTTEXTA + +#endif //_S_UNICODE + + + +/* + * IVDctText2 + */ +#undef INTERFACE +#define INTERFACE IVDctText2W + +// {238004E1-F0C4-11d1-BED9-006008317CE8} +DEFINE_GUID(IID_IVDctText2W, +0x238004e1, 0xf0c4, 0x11d1, 0xbe, 0xd9, 0x0, 0x60, 0x8, 0x31, 0x7c, 0xe8); + +DECLARE_INTERFACE_ (IVDctText2W, IVDctTextW) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVDctText members + STDMETHOD (Lock) (THIS) PURE; + STDMETHOD (UnLock) (THIS) PURE; + STDMETHOD (TextGet) (THIS_ DWORD, DWORD, PSDATA) PURE; + STDMETHOD (TextSet) (THIS_ DWORD, DWORD, PCWSTR, DWORD) PURE; + STDMETHOD (TextMove) (THIS_ DWORD, DWORD, DWORD, DWORD) PURE; + STDMETHOD (TextRemove) (THIS_ DWORD, DWORD, DWORD) PURE; + STDMETHOD (TextSelSet) (THIS_ DWORD, DWORD) PURE; + STDMETHOD (TextSelGet) (THIS_ DWORD *, DWORD *) PURE; + STDMETHOD (TextLengthGet) (THIS_ DWORD *) PURE; + STDMETHOD (GetChanges) (THIS_ DWORD *, DWORD *, DWORD *, DWORD *) PURE; + STDMETHOD (BookmarkAdd) (THIS_ PVDCTBOOKMARK) PURE; + STDMETHOD (BookmarkRemove) (THIS_ DWORD) PURE; + STDMETHOD (BookmarkMove) (THIS_ DWORD, DWORD) PURE; + STDMETHOD (BookmarkQuery) (THIS_ DWORD, PVDCTBOOKMARK) PURE; + STDMETHOD (BookmarkEnum) (THIS_ DWORD, DWORD, PVDCTBOOKMARK *, + DWORD *) PURE; + STDMETHOD (Hint) (THIS_ PCWSTR) PURE; + STDMETHOD (Words) (THIS_ PCWSTR) PURE; + STDMETHOD (ResultsGet) (THIS_ DWORD, DWORD, DWORD *, DWORD *, + LPUNKNOWN *) PURE; + STDMETHOD (FX) (THIS_ DWORD) PURE; + + // IVDctText2 + STDMETHOD (ITNApply) (THIS_ DWORD, DWORD) PURE; + STDMETHOD (ITNExpand) (THIS_ DWORD, DWORD) PURE; + STDMETHOD (ResultsGet2) (THIS_ DWORD, DWORD, DWORD *, DWORD *, + LPUNKNOWN *, DWORD*, DWORD*) PURE; + STDMETHOD (ResultsSet) (THIS_ DWORD, DWORD, + LPUNKNOWN, DWORD, DWORD) PURE; + +}; +typedef IVDctText2W FAR * PIVDCTTEXT2W; + + +#undef INTERFACE +#define INTERFACE IVDctText2A + +// {238004E2-F0C4-11d1-BED9-006008317CE8} +DEFINE_GUID(IID_IVDctText2A, +0x238004e2, 0xf0c4, 0x11d1, 0xbe, 0xd9, 0x0, 0x60, 0x8, 0x31, 0x7c, 0xe8); + +DECLARE_INTERFACE_ (IVDctText2A, IVDctTextA) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVDctText members + STDMETHOD (Lock) (THIS) PURE; + STDMETHOD (UnLock) (THIS) PURE; + STDMETHOD (TextGet) (THIS_ DWORD, DWORD, PSDATA) PURE; + STDMETHOD (TextSet) (THIS_ DWORD, DWORD, PCSTR, DWORD) PURE; + STDMETHOD (TextMove) (THIS_ DWORD, DWORD, DWORD, DWORD) PURE; + STDMETHOD (TextRemove) (THIS_ DWORD, DWORD, DWORD) PURE; + STDMETHOD (TextSelSet) (THIS_ DWORD, DWORD) PURE; + STDMETHOD (TextSelGet) (THIS_ DWORD *, DWORD *) PURE; + STDMETHOD (TextLengthGet) (THIS_ DWORD *) PURE; + STDMETHOD (GetChanges) (THIS_ DWORD *, DWORD *, DWORD *, DWORD *) PURE; + STDMETHOD (BookmarkAdd) (THIS_ PVDCTBOOKMARK) PURE; + STDMETHOD (BookmarkRemove) (THIS_ DWORD) PURE; + STDMETHOD (BookmarkMove) (THIS_ DWORD, DWORD) PURE; + STDMETHOD (BookmarkQuery) (THIS_ DWORD, PVDCTBOOKMARK) PURE; + STDMETHOD (BookmarkEnum) (THIS_ DWORD, DWORD, PVDCTBOOKMARK *, + DWORD *) PURE; + STDMETHOD (Hint) (THIS_ PCSTR) PURE; + STDMETHOD (Words) (THIS_ PCSTR) PURE; + STDMETHOD (ResultsGet) (THIS_ DWORD, DWORD, DWORD *, DWORD *, + LPUNKNOWN *) PURE; + STDMETHOD (FX) (THIS_ DWORD) PURE; + + // IVDctText2 + STDMETHOD (ITNApply) (THIS_ DWORD, DWORD) PURE; + STDMETHOD (ITNExpand) (THIS_ DWORD, DWORD) PURE; + STDMETHOD (ResultsGet2) (THIS_ DWORD, DWORD, DWORD *, DWORD *, + LPUNKNOWN *, DWORD*, DWORD*) PURE; + STDMETHOD (ResultsSet) (THIS_ DWORD, DWORD, + LPUNKNOWN, DWORD, DWORD) PURE; +}; +typedef IVDctText2A FAR * PIVDCTTEXT2A; + + +#ifdef _S_UNICODE + #define IVDctText2 IVDctText2W + #define IID_IVDctText2 IID_IVDctText2W + #define PIVDCTTEXT2 PIVDCTTEXT2W + +#else + #define IVDctText2 IVDctText2A + #define IID_IVDctText2 IID_IVDctText2A + #define PIVDCTTEXT2 PIVDCTTEXT2A + +#endif //_S_UNICODE + + + + +/* + * IVDctTextCache + */ +#undef INTERFACE +#define INTERFACE IVDctTextCache + +// {238004E3-F0C4-11d1-BED9-006008317CE8} +DEFINE_GUID(IID_IVDctTextCache, +0x238004e3, 0xf0c4, 0x11d1, 0xbe, 0xd9, 0x0, 0x60, 0x8, 0x31, 0x7c, 0xe8); + +DECLARE_INTERFACE_ (IVDctTextCache, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVDctTextCache members + STDMETHOD (CopyToBin) (THIS_ DWORD, DWORD, DWORD) PURE; + STDMETHOD (CopyToMemory) (THIS_ DWORD, DWORD, PVOID*, DWORD*, LPUNKNOWN**, DWORD*) PURE; + STDMETHOD (PasteFromBin) (THIS_ DWORD, DWORD, DWORD) PURE; + STDMETHOD (PasteFromMemory) (THIS_ DWORD, DWORD, PVOID, DWORD, LPUNKNOWN*, DWORD) PURE; +}; +typedef IVDctTextCache FAR * PIVDCTTEXTCACHE; + + + +/* + * IVDctInvTextNorm + */ +#undef INTERFACE +#define INTERFACE IVDctInvTextNormW + +// {90A84EA0-6E51-11d0-9BC2-08005AFC3A41} +DEFINE_GUID(IID_IVDctInvTextNormW, +0x90a84ea0, 0x6e51, 0x11d0, 0x9b, 0xc2, 0x8, 0x0, 0x5a, 0xfc, 0x3a, 0x41); + +DECLARE_INTERFACE_ (IVDctInvTextNormW, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVDctInvTextNorm members + STDMETHOD (OptionsEnum) (THIS_ PWSTR *, DWORD *) PURE; + STDMETHOD (OptionsGet) (THIS_ PCWSTR, BOOL *) PURE; + STDMETHOD (OptionsSet) (THIS_ PCWSTR, BOOL) PURE; +}; + +typedef IVDctInvTextNormW FAR * PIVDCTINVTEXTNORMW; + + +#undef INTERFACE +#define INTERFACE IVDctInvTextNormA + +// {90A84EA1-6E51-11d0-9BC2-08005AFC3A41} +DEFINE_GUID(IID_IVDctInvTextNormA, +0x90a84ea1, 0x6e51, 0x11d0, 0x9b, 0xc2, 0x8, 0x0, 0x5a, 0xfc, 0x3a, 0x41); + +DECLARE_INTERFACE_ (IVDctInvTextNormA, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVDctInvTextNorm members + STDMETHOD (OptionsEnum) (THIS_ PSTR *, DWORD *) PURE; + STDMETHOD (OptionsGet) (THIS_ PCSTR, BOOL *) PURE; + STDMETHOD (OptionsSet) (THIS_ PCSTR, BOOL) PURE; +}; + +typedef IVDctInvTextNormA FAR * PIVDCTINVTEXTNORMA; + + +#ifdef _S_UNICODE + #define IVDctInvTextNorm IVDctInvTextNormW + #define IID_IVDctInvTextNorm IID_IVDctInvTextNormW + #define PIVDCTINVTEXTNORM PIVDCTINVTEXTNORMW + +#else + #define IVDctInvTextNorm IVDctInvTextNormA + #define IID_IVDctInvTextNorm IID_IVDctInvTextNormA + #define PIVDCTINVTEXTNORM PIVDCTINVTEXTNORMA + +#endif // _S_UNICODE + + + +/* + * IVDctAttributes + */ +#undef INTERFACE +#define INTERFACE IVDctAttributesW + +// {88AD7DC5-67D5-11cf-9B8B-08005AFC3A41} +DEFINE_GUID(IID_IVDctAttributesW, +0x88ad7dc5, 0x67d5, 0x11cf, 0x9b, 0x8b, 0x8, 0x0, 0x5a, 0xfc, 0x3a, 0x41); + +DECLARE_INTERFACE_ (IVDctAttributesW, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVDctAttributes members + STDMETHOD (AutoGainEnableGet) (THIS_ DWORD *) PURE; + STDMETHOD (AutoGainEnableSet) (THIS_ DWORD) PURE; + STDMETHOD (AwakeStateGet) (THIS_ DWORD *) PURE; + STDMETHOD (AwakeStateSet) (THIS_ DWORD) PURE; + STDMETHOD (ThresholdGet) (THIS_ DWORD *) PURE; + STDMETHOD (ThresholdSet) (THIS_ DWORD) PURE; + STDMETHOD (EchoGet) (THIS_ BOOL *) PURE; + STDMETHOD (EchoSet) (THIS_ BOOL) PURE; + STDMETHOD (EnergyFloorGet) (THIS_ WORD *) PURE; + STDMETHOD (EnergyFloorSet) (THIS_ WORD) PURE; + STDMETHOD (RealTimeGet) (THIS_ DWORD *) PURE; + STDMETHOD (RealTimeSet) (THIS_ DWORD) PURE; + STDMETHOD (TimeOutGet) (THIS_ DWORD *, DWORD *) PURE; + STDMETHOD (TimeOutSet) (THIS_ DWORD, DWORD) PURE; + STDMETHOD (ModeGet) (THIS_ DWORD *) PURE; + STDMETHOD (ModeSet) (THIS_ DWORD) PURE; + STDMETHOD (MemoryGet) (THIS_ VDCTMEMORY *) PURE; + STDMETHOD (MemorySet) (THIS_ VDCTMEMORY *) PURE; + STDMETHOD (IsAnyoneDictating) (THIS_ HWND, PWSTR, DWORD, DWORD *) PURE; + STDMETHOD (MicrophoneGet) (THIS_ PWSTR, DWORD, DWORD *) PURE; + STDMETHOD (MicrophoneSet) (THIS_ PCWSTR) PURE; + STDMETHOD (SpeakerGet) (THIS_ PWSTR, DWORD, DWORD *) PURE; + STDMETHOD (SpeakerSet) (THIS_ PCWSTR) PURE; +}; + +typedef IVDctAttributesW FAR * PIVDCTATTRIBUTESW; + + +#undef INTERFACE +#define INTERFACE IVDctAttributesA + +// {88AD7DC6-67D5-11cf-9B8B-08005AFC3A41} +DEFINE_GUID(IID_IVDctAttributesA, +0x88ad7dc6, 0x67d5, 0x11cf, 0x9b, 0x8b, 0x8, 0x0, 0x5a, 0xfc, 0x3a, 0x41); + +DECLARE_INTERFACE_ (IVDctAttributesA, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVDctAttributes members + STDMETHOD (AutoGainEnableGet) (THIS_ DWORD *) PURE; + STDMETHOD (AutoGainEnableSet) (THIS_ DWORD) PURE; + STDMETHOD (AwakeStateGet) (THIS_ DWORD *) PURE; + STDMETHOD (AwakeStateSet) (THIS_ DWORD) PURE; + STDMETHOD (ThresholdGet) (THIS_ DWORD *) PURE; + STDMETHOD (ThresholdSet) (THIS_ DWORD) PURE; + STDMETHOD (EchoGet) (THIS_ BOOL *) PURE; + STDMETHOD (EchoSet) (THIS_ BOOL) PURE; + STDMETHOD (EnergyFloorGet) (THIS_ WORD *) PURE; + STDMETHOD (EnergyFloorSet) (THIS_ WORD) PURE; + STDMETHOD (RealTimeGet) (THIS_ DWORD *) PURE; + STDMETHOD (RealTimeSet) (THIS_ DWORD) PURE; + STDMETHOD (TimeOutGet) (THIS_ DWORD *, DWORD *) PURE; + STDMETHOD (TimeOutSet) (THIS_ DWORD, DWORD) PURE; + STDMETHOD (ModeGet) (THIS_ DWORD *) PURE; + STDMETHOD (ModeSet) (THIS_ DWORD) PURE; + STDMETHOD (MemoryGet) (THIS_ VDCTMEMORY *) PURE; + STDMETHOD (MemorySet) (THIS_ VDCTMEMORY *) PURE; + STDMETHOD (IsAnyoneDictating) (THIS_ HWND, PSTR, DWORD, DWORD *) PURE; + STDMETHOD (MicrophoneGet) (THIS_ PSTR, DWORD, DWORD *) PURE; + STDMETHOD (MicrophoneSet) (THIS_ PCSTR) PURE; + STDMETHOD (SpeakerGet) (THIS_ PSTR, DWORD, DWORD *) PURE; + STDMETHOD (SpeakerSet) (THIS_ PCSTR) PURE; +}; + +typedef IVDctAttributesA FAR * PIVDCTATTRIBUTESA; + + +#ifdef _S_UNICODE + #define IVDctAttributes IVDctAttributesW + #define IID_IVDctAttributes IID_IVDctAttributesW + #define PIVDCTATTRIBUTES PIVDCTATTRIBUTESW + +#else + #define IVDctAttributes IVDctAttributesA + #define IID_IVDctAttributes IID_IVDctAttributesA + #define PIVDCTATTRIBUTES PIVDCTATTRIBUTESA + +#endif // _S_UNICODE + + + + +/* + * IVDctCommandsBuiltInW Interface + */ +// {D4E3F8E0-6521-11d1-8C35-006097DF5D01} +DEFINE_GUID(IID_IVDctCommandsBuiltInW, +0xd4e3f8e0, 0x6521, 0x11d1, 0x8c, 0x35, 0x0, 0x60, 0x97, 0xdf, 0x5d, 0x1); + +// {8763AFD1-7ADE-11d1-BEA7-006008317CE8} +DEFINE_GUID(IID_IVDctCommandsBuiltInA, +0x8763afd1, 0x7ade, 0x11d1, 0xbe, 0xa7, 0x0, 0x60, 0x8, 0x31, 0x7c, 0xe8); + +#undef INTERFACE +#define INTERFACE IVDctCommandsBuiltInW + +DECLARE_INTERFACE_ (IVDctCommandsBuiltInW, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVDctCommandsBuiltInW members + STDMETHOD (Activate) (THIS_ HWND, DWORD) PURE; + STDMETHOD (Deactivate) (THIS) PURE; + STDMETHOD (FromMemory) (THIS_ PVOID, DWORD) PURE; + STDMETHOD (FromFile) (THIS_ PCWSTR) PURE; + STDMETHOD (FromStream) (THIS_ IStream *) PURE; + STDMETHOD (ListSet) (THIS_ PCWSTR, PVOID, DWORD) PURE; + STDMETHOD (TextGet) (THIS_ LPWSTR*, DWORD*) PURE; + STDMETHOD (ToMemory) (THIS_ PVOID*, DWORD*) PURE; + STDMETHOD (ToFile) (THIS_ PCWSTR) PURE; + STDMETHOD (ToStream) (THIS_ IStream *) PURE; +}; + +typedef IVDctCommandsBuiltInW * PIVDCTCOMMANDSBUILTINW; + + +#undef INTERFACE +#define INTERFACE IVDctCommandsBuiltInA + +DECLARE_INTERFACE_ (IVDctCommandsBuiltInA, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVDctCommandsBuiltInA members + STDMETHOD (Activate) (THIS_ HWND, DWORD) PURE; + STDMETHOD (Deactivate) (THIS) PURE; + STDMETHOD (FromMemory) (THIS_ PVOID, DWORD) PURE; + STDMETHOD (FromFile) (THIS_ PCSTR) PURE; + STDMETHOD (FromStream) (THIS_ IStream *) PURE; + STDMETHOD (ListSet) (THIS_ PCSTR, PVOID, DWORD) PURE; + STDMETHOD (TextGet) (THIS_ LPSTR*, DWORD*) PURE; + STDMETHOD (ToMemory) (THIS_ PVOID*, DWORD*) PURE; + STDMETHOD (ToFile) (THIS_ PCSTR) PURE; + STDMETHOD (ToStream) (THIS_ IStream *) PURE; +}; + +typedef IVDctCommandsBuiltInA * PIVDCTCOMMANDSBUILTINA; + +#ifdef _S_UNICODE + #define IVDctCommandsBuiltIn IVDctCommandsBuiltInW + #define IID_IVDctCommandsBuiltIn IID_IVDctCommandsBuiltInW + #define PIVDCTCOMMANDSBUILTIN PIVDCTCOMMANDSBUILTINW + +#else + #define IVDctCommandsBuiltIn IVDctCommandsBuiltInA + #define IID_IVDctCommandsBuiltIn IID_IVDctCommandsBuiltInA + #define PIVDCTCOMMANDSBUILTIN PIVDCTCOMMANDSBUILTINA + +#endif // _S_UNICODE + + + +/* + * IVDctCommandsApp Interface + */ +// {D4E3F8E1-6521-11d1-8C35-006097DF5D01} +DEFINE_GUID(IID_IVDctCommandsAppW, +0xd4e3f8e1, 0x6521, 0x11d1, 0x8c, 0x35, 0x0, 0x60, 0x97, 0xdf, 0x5d, 0x1); + +// {8763AFD2-7ADE-11d1-BEA7-006008317CE8} +DEFINE_GUID(IID_IVDctCommandsAppA, +0x8763afd2, 0x7ade, 0x11d1, 0xbe, 0xa7, 0x0, 0x60, 0x8, 0x31, 0x7c, 0xe8); + +typedef IVDctCommandsBuiltInA IVDctCommandsAppA; +typedef IVDctCommandsAppA * PIVDCTCOMMANDSAPPA; +typedef IVDctCommandsBuiltInW IVDctCommandsAppW; +typedef IVDctCommandsAppW * PIVDCTCOMMANDSAPPW; + +#ifdef _S_UNICODE + #define IVDctCommandsApp IVDctCommandsAppW + #define IID_IVDctCommandsApp IID_IVDctCommandsAppW + #define PIVDCTCOMMANDSAPP PIVDCTCOMMANDSAPPW +#else + #define IVDctCommandsApp IVDctCommandsAppA + #define IID_IVDctCommandsApp IID_IVDctCommandsAppA + #define PIVDCTCOMMANDSAPP PIVDCTCOMMANDSAPPA +#endif // _S_UNICODE + + + +/* + * IVDctCommands + */ +#undef INTERFACE +#define INTERFACE IVDctCommandsW + +// {A02C2CA0-AE50-11cf-833A-00AA00A21A29} +DEFINE_GUID(IID_IVDctCommandsW, +0xA02C2CA0, 0xAE50, 0x11cf, 0x83, 0x3A, 0x00, 0xAA, 0x00, 0xA2, 0x1A, 0x29); + +DECLARE_INTERFACE_ (IVDctCommandsW, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVDctCommands members + STDMETHOD (Add) (THIS_ BOOL, DWORD, SDATA, DWORD *) PURE; + STDMETHOD (Remove) (THIS_ BOOL, DWORD, DWORD, DWORD) PURE; + STDMETHOD (Get) (THIS_ BOOL, DWORD, DWORD, DWORD, SDATA*, DWORD *) PURE; + STDMETHOD (Set) (THIS_ BOOL, DWORD, DWORD, DWORD, SDATA) PURE; + STDMETHOD (EnableItem) (THIS_ BOOL, DWORD, DWORD, DWORD) PURE; + STDMETHOD (Num) (THIS_ BOOL, DWORD *) PURE; +}; + +typedef IVDctCommandsW FAR * PIVDCTCOMMANDSW; + + +#undef INTERFACE +#define INTERFACE IVDctCommandsA + +// {A02C2CA1-AE50-11cf-833A-00AA00A21A29} +DEFINE_GUID(IID_IVDctCommandsA, +0xA02C2CA1, 0xAE50, 0x11cf, 0x83, 0x3A, 0x00, 0xAA, 0x00, 0xA2, 0x1A, 0x29); + +DECLARE_INTERFACE_ (IVDctCommandsA, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVDctCommands members + STDMETHOD (Add) (THIS_ BOOL, DWORD, SDATA, DWORD *) PURE; + STDMETHOD (Remove) (THIS_ BOOL, DWORD, DWORD, DWORD) PURE; + STDMETHOD (Get) (THIS_ BOOL, DWORD, DWORD, DWORD, SDATA*, DWORD *) PURE; + STDMETHOD (Set) (THIS_ BOOL, DWORD, DWORD, DWORD, SDATA) PURE; + STDMETHOD (EnableItem) (THIS_ BOOL, DWORD, DWORD, DWORD) PURE; + STDMETHOD (Num) (THIS_ BOOL, DWORD *) PURE; +}; + +typedef IVDctCommandsA FAR * PIVDCTCOMMANDSA; + + +#ifdef _S_UNICODE + #define IVDctCommands IVDctCommandsW + #define IID_IVDctCommands IID_IVDctCommandsW + #define PIVDCTCOMMANDS PIVDCTCOMMANDSW + +#else + #define IVDctCommands IVDctCommandsA + #define IID_IVDctCommands IID_IVDctCommandsA + #define PIVDCTCOMMANDS PIVDCTCOMMANDSA + +#endif // _S_UNICODE + + + +/* + * IVDctGlossary + */ +#undef INTERFACE +#define INTERFACE IVDctGlossaryW + +// {A02C2CA2-AE50-11cf-833A-00AA00A21A29} +DEFINE_GUID(IID_IVDctGlossaryW, +0xA02C2CA2, 0xAE50, 0x11cf, 0x83, 0x3A, 0x00, 0xAA, 0x00, 0xA2, 0x1A, 0x29); + +DECLARE_INTERFACE_ (IVDctGlossaryW, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVDctGlossary members + STDMETHOD (Add) (THIS_ BOOL, DWORD, SDATA, DWORD *) PURE; + STDMETHOD (Remove) (THIS_ BOOL, DWORD, DWORD, DWORD) PURE; + STDMETHOD (Get) (THIS_ BOOL, DWORD, DWORD, DWORD, SDATA*, DWORD *) PURE; + STDMETHOD (Set) (THIS_ BOOL, DWORD, DWORD, DWORD, SDATA) PURE; + STDMETHOD (EnableItem) (THIS_ BOOL, DWORD, DWORD, DWORD) PURE; + STDMETHOD (Num) (THIS_ BOOL, DWORD *) PURE; +}; + +typedef IVDctGlossaryW FAR * PIVDCTGLOSSARYW; + + +#undef INTERFACE +#define INTERFACE IVDctGlossaryA + +// {A02C2CA3-AE50-11cf-833A-00AA00A21A29} +DEFINE_GUID(IID_IVDctGlossaryA, +0xA02C2CA3, 0xAE50, 0x11cf, 0x83, 0x3A, 0x00, 0xAA, 0x00, 0xA2, 0x1A, 0x29); + +DECLARE_INTERFACE_ (IVDctGlossaryA, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVDctGlossary members + STDMETHOD (Add) (THIS_ BOOL, DWORD, SDATA, DWORD *) PURE; + STDMETHOD (Remove) (THIS_ BOOL, DWORD, DWORD, DWORD) PURE; + STDMETHOD (Get) (THIS_ BOOL, DWORD, DWORD, DWORD, SDATA*, DWORD *) PURE; + STDMETHOD (Set) (THIS_ BOOL, DWORD, DWORD, DWORD, SDATA) PURE; + STDMETHOD (EnableItem) (THIS_ BOOL, DWORD, DWORD, DWORD) PURE; + STDMETHOD (Num) (THIS_ BOOL, DWORD *) PURE; +}; + +typedef IVDctGlossaryA FAR * PIVDCTGLOSSARYA; + + +#ifdef _S_UNICODE + #define IVDctGlossary IVDctGlossaryW + #define IID_IVDctGlossary IID_IVDctGlossaryW + #define PIVDCTGLOSSARY PIVDCTGLOSSARYW + +#else + #define IVDctGlossary IVDctGlossaryA + #define IID_IVDctGlossary IID_IVDctGlossaryA + #define PIVDCTGLOSSARY PIVDCTGLOSSARYA + +#endif // _S_UNICODE + + + + +/* + * IVDctDialog + */ +#undef INTERFACE +#define INTERFACE IVDctDialogsW + +// {88AD7DC7-67D5-11cf-9B8B-08005AFC3A41} +DEFINE_GUID(IID_IVDctDialogsW, +0x88ad7dc7, 0x67d5, 0x11cf, 0x9b, 0x8b, 0x8, 0x0, 0x5a, 0xfc, 0x3a, 0x41); + +DECLARE_INTERFACE_ (IVDctDialogsW, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVDctDialogs members + STDMETHOD (AboutDlg) (THIS_ HWND, PCWSTR) PURE; + STDMETHOD (GeneralDlg) (THIS_ HWND, PCWSTR) PURE; + STDMETHOD (LexiconDlg) (THIS_ HWND, PCWSTR) PURE; + STDMETHOD (TrainGeneralDlg) (THIS_ HWND, PCWSTR) PURE; + STDMETHOD (TrainMicDlg) (THIS_ HWND, PCWSTR) PURE; +}; + +typedef IVDctDialogsW FAR * PIVDCTDIALOGSW; + + +#undef INTERFACE +#define INTERFACE IVDctDialogsA + +// {88AD7DC8-67D5-11cf-9B8B-08005AFC3A41} +DEFINE_GUID(IID_IVDctDialogsA, +0x88ad7dc8, 0x67d5, 0x11cf, 0x9b, 0x8b, 0x8, 0x0, 0x5a, 0xfc, 0x3a, 0x41); + +DECLARE_INTERFACE_ (IVDctDialogsA, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVDctDialogs members + STDMETHOD (AboutDlg) (THIS_ HWND, PCSTR) PURE; + STDMETHOD (GeneralDlg) (THIS_ HWND, PCSTR) PURE; + STDMETHOD (LexiconDlg) (THIS_ HWND, PCSTR) PURE; + STDMETHOD (TrainGeneralDlg) (THIS_ HWND, PCSTR) PURE; + STDMETHOD (TrainMicDlg) (THIS_ HWND, PCSTR) PURE; +}; + +typedef IVDctDialogsA FAR * PIVDCTDIALOGSA; + + +#ifdef _S_UNICODE + #define IVDctDialogs IVDctDialogsW + #define IID_IVDctDialogs IID_IVDctDialogsW + #define PIVDCTDIALOGS PIVDCTDIALOGSW + +#else + #define IVDctDialogs IVDctDialogsA + #define IID_IVDctDialogs IID_IVDctDialogsA + #define PIVDCTDIALOGS PIVDCTDIALOGSA + +#endif // _S_UNICODE + + +#undef INTERFACE +#define INTERFACE IVDctGUI + +// {8953F1A0-7E80-11cf-8D15-00A0C9034A7E} +DEFINE_GUID(IID_IVDctGUI, +0x8953f1a0, 0x7e80, 0x11cf, 0x8d, 0x15, 0x0, 0xa0, 0xc9, 0x3, 0x4a, 0x7e); + +DECLARE_INTERFACE_ (IVDctGUI, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVDctDialogs members + STDMETHOD (SetSelRect) (THIS_ RECT *) PURE; + STDMETHOD (FlagsSet) (THIS_ DWORD) PURE; + STDMETHOD (FlagsGet) (THIS_ DWORD *) PURE; +}; + +typedef IVDctGUI FAR * PIVDCTGUI; + + + +/************************************************************************ +class guids */ + +// {25522CA0-67CE-11cf-9B8B-08005AFC3A41} +DEFINE_GUID(CLSID_VDct, +0x35522ca0, 0x67ce, 0x11cf, 0x9b, 0x8b, 0x8, 0x0, 0x5a, 0xfc, 0x3a, 0x41); + + + +/************************************************************************ +High-Level text-to-speech API +*/ + + +/************************************************************************ +defines */ + +#define ONE (1) + +// dwFlags parameter of IVoiceText::Register +#define VTXTF_ALLMESSAGES (ONE<<0) + +/* + * dwFlags parameter of IVoiceText::Speak + */ + +// type of speech +#define VTXTST_STATEMENT 0x00000001 +#define VTXTST_QUESTION 0x00000002 +#define VTXTST_COMMAND 0x00000004 +#define VTXTST_WARNING 0x00000008 +#define VTXTST_READING 0x00000010 +#define VTXTST_NUMBERS 0x00000020 +#define VTXTST_SPREADSHEET 0x00000040 + +// priorities +#define VTXTSP_VERYHIGH 0x00000080 +#define VTXTSP_HIGH 0x00000100 +#define VTXTSP_NORMAL 0x00000200 + +/************************************************************************ +typedefs */ + +// possible parameter to IVoiceText::Register +typedef struct { + DWORD dwDevice; + DWORD dwEnable; + DWORD dwSpeed; + GUID gModeID; +} VTSITEINFO, *PVTSITEINFO; + + +/************************************************************************ +interfaces */ + +/* + * IVCmdNotifySink + */ +#undef INTERFACE +#define INTERFACE IVTxtNotifySinkW + +// {FD3A2430-E090-11cd-A166-00AA004CD65C} +DEFINE_GUID(IID_IVTxtNotifySinkW, 0xfd3a2430, 0xe090, 0x11cd, 0xa1, 0x66, 0x0, 0xaa, 0x0, 0x4c, 0xd6, 0x5c); + +DECLARE_INTERFACE_ (IVTxtNotifySinkW, IUnknown) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVTxtNotifySinkW members + STDMETHOD (AttribChanged) (THIS_ DWORD) PURE; + STDMETHOD (Visual) (THIS_ WCHAR, WCHAR, DWORD, PTTSMOUTH) PURE; + STDMETHOD (Speak) (THIS_ PWSTR, PWSTR, DWORD) PURE; + STDMETHOD (SpeakingStarted) (THIS) PURE; + STDMETHOD (SpeakingDone) (THIS) PURE; +}; + +typedef IVTxtNotifySinkW FAR * PIVTXTNOTIFYSINKW; + + +#undef INTERFACE +#define INTERFACE IVTxtNotifySinkA + +// {D2C840E0-E092-11cd-A166-00AA004CD65C} +DEFINE_GUID(IID_IVTxtNotifySinkA, 0xd2c840e0, 0xe092, 0x11cd, 0xa1, 0x66, 0x0, 0xaa, 0x0, 0x4c, 0xd6, 0x5c); + +DECLARE_INTERFACE_ (IVTxtNotifySinkA, IUnknown) { + + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVTxtNotifySinkA members + STDMETHOD (AttribChanged) (THIS_ DWORD) PURE; + STDMETHOD (Visual) (THIS_ WCHAR, CHAR, DWORD, PTTSMOUTH) PURE; + STDMETHOD (Speak) (THIS_ PSTR, PSTR, DWORD) PURE; + STDMETHOD (SpeakingStarted) (THIS) PURE; + STDMETHOD (SpeakingDone) (THIS) PURE; +}; + +typedef IVTxtNotifySinkA FAR * PIVTXTNOTIFYSINKA; + + +#ifdef _S_UNICODE + #define IVTxtNotifySink IVTxtNotifySinkW + #define IID_IVTxtNotifySink IID_IVTxtNotifySinkW + #define PIVTXTNOTIFYSINK PIVTXTNOTIFYSINKW + +#else + #define IVTxtNotifySink IVTxtNotifySinkA + #define IID_IVTxtNotifySink IID_IVTxtNotifySinkA + #define PIVTXTNOTIFYSINK PIVTXTNOTIFYSINKA + +#endif // _S_UNICODE + + + +/* + * IVoiceText + */ +#undef INTERFACE +#define INTERFACE IVoiceTextW + +// {C4FE8740-E093-11cd-A166-00AA004CD65C} +DEFINE_GUID(IID_IVoiceTextW, 0xc4fe8740, 0xe093, 0x11cd, 0xa1, 0x66, 0x0, 0xaa, 0x0, 0x4c, 0xd6, 0x5c); + +DECLARE_INTERFACE_ (IVoiceTextW, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVoiceText members + + STDMETHOD (Register) (THIS_ PCWSTR, PCWSTR, + PIVTXTNOTIFYSINK, GUID, + DWORD, PVTSITEINFO) PURE; + STDMETHOD (Speak) (THIS_ PCWSTR, DWORD, PCWSTR) PURE; + STDMETHOD (StopSpeaking) (THIS) PURE; + STDMETHOD (AudioFastForward) (THIS) PURE; + STDMETHOD (AudioPause) (THIS) PURE; + STDMETHOD (AudioResume) (THIS) PURE; + STDMETHOD (AudioRewind) (THIS) PURE; +}; + +typedef IVoiceTextW FAR * PIVOICETEXTW; + + +#undef INTERFACE +#define INTERFACE IVoiceTextA + +// {E1B7A180-E093-11cd-A166-00AA004CD65C} +DEFINE_GUID(IID_IVoiceTextA, 0xe1b7a180, 0xe093, 0x11cd, 0xa1, 0x66, 0x0, 0xaa, 0x0, 0x4c, 0xd6, 0x5c); + +DECLARE_INTERFACE_ (IVoiceTextA, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVoiceText members + + STDMETHOD (Register) (THIS_ PCSTR, PCSTR, + PIVTXTNOTIFYSINK, GUID, + DWORD, PVTSITEINFO) PURE; + STDMETHOD (Speak) (THIS_ PCSTR, DWORD, PCSTR) PURE; + STDMETHOD (StopSpeaking) (THIS) PURE; + STDMETHOD (AudioFastForward) (THIS) PURE; + STDMETHOD (AudioPause) (THIS) PURE; + STDMETHOD (AudioResume) (THIS) PURE; + STDMETHOD (AudioRewind) (THIS) PURE; +}; + +typedef IVoiceTextA FAR * PIVOICETEXTA; + + +#ifdef _S_UNICODE + #define IVoiceText IVoiceTextW + #define IID_IVoiceText IID_IVoiceTextW + #define PIVOICETEXT PIVOICETEXTW + +#else + #define IVoiceText IVoiceTextA + #define IID_IVoiceText IID_IVoiceTextA + #define PIVOICETEXT PIVOICETEXTA + +#endif //_S_UNICODE + + + +/* + * IVTxtAttributes + */ +#undef INTERFACE +#define INTERFACE IVTxtAttributesW + +// {6A8D6140-E095-11cd-A166-00AA004CD65C} +DEFINE_GUID(IID_IVTxtAttributesW, 0x6a8d6140, 0xe095, 0x11cd, 0xa1, 0x66, 0x0, 0xaa, 0x0, 0x4c, 0xd6, 0x5c); + +DECLARE_INTERFACE_ (IVTxtAttributesW, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVTxtAttributes members + STDMETHOD (DeviceGet) (THIS_ DWORD *) PURE; + STDMETHOD (DeviceSet) (THIS_ DWORD) PURE; + STDMETHOD (EnabledGet) (THIS_ DWORD *) PURE; + STDMETHOD (EnabledSet) (THIS_ DWORD) PURE; + STDMETHOD (IsSpeaking) (THIS_ BOOL *) PURE; + STDMETHOD (SpeedGet) (THIS_ DWORD *) PURE; + STDMETHOD (SpeedSet) (THIS_ DWORD) PURE; + STDMETHOD (TTSModeGet) (THIS_ GUID *) PURE; + STDMETHOD (TTSModeSet) (THIS_ GUID) PURE; +}; + +typedef IVTxtAttributesW FAR * PIVTXTATTRIBUTESW; + + +#undef INTERFACE +#define INTERFACE IVTxtAttributesA + +// {8BE9CC30-E095-11cd-A166-00AA004CD65C} +DEFINE_GUID(IID_IVTxtAttributesA, 0x8be9cc30, 0xe095, 0x11cd, 0xa1, 0x66, 0x0, 0xaa, 0x0, 0x4c, 0xd6, 0x5c); + +DECLARE_INTERFACE_ (IVTxtAttributesA, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVTxtAttributes members + STDMETHOD (DeviceGet) (THIS_ DWORD *) PURE; + STDMETHOD (DeviceSet) (THIS_ DWORD) PURE; + STDMETHOD (EnabledGet) (THIS_ DWORD *) PURE; + STDMETHOD (EnabledSet) (THIS_ DWORD) PURE; + STDMETHOD (IsSpeaking) (THIS_ BOOL *) PURE; + STDMETHOD (SpeedGet) (THIS_ DWORD *) PURE; + STDMETHOD (SpeedSet) (THIS_ DWORD) PURE; + STDMETHOD (TTSModeGet) (THIS_ GUID *) PURE; + STDMETHOD (TTSModeSet) (THIS_ GUID) PURE; +}; + +typedef IVTxtAttributesA FAR * PIVTXTATTRIBUTESA; + + +#ifdef _S_UNICODE + #define IVTxtAttributes IVTxtAttributesW + #define IID_IVTxtAttributes IID_IVTxtAttributesW + #define PIVTXTATTRIBUTES PIVTXTATTRIBUTESW + +#else + #define IVTxtAttributes IVTxtAttributesA + #define IID_IVTxtAttributes IID_IVTxtAttributesA + #define PIVTXTATTRIBUTES PIVTXTATTRIBUTESA + +#endif // _S_UNICODE + + + +/* + * IVTxtDialog + */ +#undef INTERFACE +#define INTERFACE IVTxtDialogsW + +// {D6469210-E095-11cd-A166-00AA004CD65C} +DEFINE_GUID(IID_IVTxtDialogsW, 0xd6469210, 0xe095, 0x11cd, 0xa1, 0x66, 0x0, 0xaa, 0x0, 0x4c, 0xd6, 0x5c); + +DECLARE_INTERFACE_ (IVTxtDialogsW, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVTxtDialogs members + + STDMETHOD (AboutDlg) (THIS_ HWND, PCWSTR) PURE; + STDMETHOD (LexiconDlg) (THIS_ HWND, PCWSTR) PURE; + STDMETHOD (GeneralDlg) (THIS_ HWND, PCWSTR) PURE; + STDMETHOD (TranslateDlg) (THIS_ HWND, PCWSTR) PURE; +}; + +typedef IVTxtDialogsW FAR * PIVTXTDIALOGSW; + + +#undef INTERFACE +#define INTERFACE IVTxtDialogsA + +// {E8F6FA20-E095-11cd-A166-00AA004CD65C} +DEFINE_GUID(IID_IVTxtDialogsA, 0xe8f6fa20, 0xe095, 0x11cd, 0xa1, 0x66, 0x0, 0xaa, 0x0, 0x4c, 0xd6, 0x5c); + +DECLARE_INTERFACE_ (IVTxtDialogsA, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IVTxtDialogs members + STDMETHOD (AboutDlg) (THIS_ HWND, PCSTR) PURE; + STDMETHOD (LexiconDlg) (THIS_ HWND, PCSTR) PURE; + STDMETHOD (GeneralDlg) (THIS_ HWND, PCSTR) PURE; + STDMETHOD (TranslateDlg) (THIS_ HWND, PCSTR) PURE; +}; + +typedef IVTxtDialogsA FAR * PIVTXTDIALOGSA; + + +#ifdef _S_UNICODE + #define IVTxtDialogs IVTxtDialogsW + #define IID_IVTxtDialogs IID_IVTxtDialogsW + #define PIVTXTDIALOGS PIVTXTDIALOGSW + +#else + #define IVTxtDialogs IVTxtDialogsA + #define IID_IVTxtDialogs IID_IVTxtDialogsA + #define PIVTXTDIALOGS PIVTXTDIALOGSA + +#endif // _S_UNICODE + + + +/************************************************************************ +class guids */ + +// {080EB9D0-E096-11cd-A166-00AA004CD65C} +// DEFINE_GUID(CLSID_VTxt, 0x80eb9d0, 0xe096, 0x11cd, 0xa1, 0x66, 0x0, 0xaa, 0x0, 0x4c, 0xd6, 0x5c); +// {F1DC95A0-0BA7-11ce-A166-00AA004CD65C} +DEFINE_GUID(CLSID_VTxt, +0xf1dc95a0, 0xba7, 0x11ce, 0xa1, 0x66, 0x0, 0xaa, 0x0, 0x4c, 0xd6, 0x5c); + + +// {70618F72-D1ED-11d0-8FAC-08002BE4E62A} +DEFINE_GUID(CLSID_STGramComp, +0x70618f72, 0xd1ed, 0x11d0, 0x8f, 0xac, 0x8, 0x0, 0x2b, 0xe4, 0xe6, 0x2a); + +// {EFD0E6BA-DB5F-11d0-8FAC-08002BE4E62A} +DEFINE_GUID(CLSID_STTTSQueue, +0xefd0e6ba, 0xdb5f, 0x11d0, 0x8f, 0xac, 0x8, 0x0, 0x2b, 0xe4, 0xe6, 0x2a); + +// {B3613D9F-E26E-11d0-8FAC-08002BE4E62A} +DEFINE_GUID(CLSID_STLog, +0xb3613d9f, 0xe26e, 0x11d0, 0x8f, 0xac, 0x8, 0x0, 0x2b, 0xe4, 0xe6, 0x2a); + +// {B3613DA0-E26E-11d0-8FAC-08002BE4E62A} +DEFINE_GUID(CLSID_AudioSourceLog, +0xb3613da0, 0xe26e, 0x11d0, 0x8f, 0xac, 0x8, 0x0, 0x2b, 0xe4, 0xe6, 0x2a); + +// {2EC5A8A5-E65B-11d0-8FAC-08002BE4E62A} +DEFINE_GUID(CLSID_AudioSourceTel, +0x2ec5a8a5, 0xe65b, 0x11d0, 0x8f, 0xac, 0x8, 0x0, 0x2b, 0xe4, 0xe6, 0x2a); + +// {2EC5A8A6-E65B-11d0-8FAC-08002BE4E62A} +DEFINE_GUID(CLSID_AudioDestTel, +0x2ec5a8a6, 0xe65b, 0x11d0, 0x8f, 0xac, 0x8, 0x0, 0x2b, 0xe4, 0xe6, 0x2a); + +// {61935832-FC85-11d0-8FAE-08002BE4E62A} +DEFINE_GUID(CLSID_STRecord, +0x61935832, 0xfc85, 0x11d0, 0x8f, 0xae, 0x8, 0x0, 0x2b, 0xe4, 0xe6, 0x2a); + +/* interfaces */ +// ISTRecord Interface + +#undef INTERFACE +#define INTERFACE ISTRecord + +// {61935833-FC85-11d0-8FAE-08002BE4E62A} +DEFINE_GUID(IID_ISTRecord, +0x61935833, 0xfc85, 0x11d0, 0x8f, 0xae, 0x8, 0x0, 0x2b, 0xe4, 0xe6, 0x2a); + +typedef struct { + DWORD dwBetweenUtt; // acceptable time between utterance, milliseconds + DWORD dwInitialBuf; // milliseconds of audio in the initial buffer + DWORD dwReallocBuf; // amount to increase a buffer every time new audio + DWORD dwMaxBuf; // maximum number of milliseconds that buffer can be + DWORD dwNoAnswer; // milliseconds of silence before get no-answer +} STRECORDPARAM, *PSTRECORDPARAM; + +DECLARE_INTERFACE_ (ISTRecord, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISTGramComp members + STDMETHOD (Init) (THIS_ LPUNKNOWN, DWORD, LPUNKNOWN) PURE; + STDMETHOD (ParamsSet) (THIS_ PSTRECORDPARAM) PURE; + STDMETHOD (Start) (THIS) PURE; + STDMETHOD (Stop) (THIS_ DWORD) PURE; + STDMETHOD (GetWAV) (THIS_ PVOID*, DWORD*) PURE; + STDMETHOD (ClearWAV) (THIS) PURE; + }; + +typedef ISTRecord FAR * PISTRECORD; + + +// ISTRecordNotifySink Interface + +#undef INTERFACE +#define INTERFACE ISTRecordNotifySink + +// {61935834-FC85-11d0-8FAE-08002BE4E62A} +DEFINE_GUID(IID_ISTRecordNotifySink, +0x61935834, 0xfc85, 0x11d0, 0x8f, 0xae, 0x8, 0x0, 0x2b, 0xe4, 0xe6, 0x2a); + +DECLARE_INTERFACE_ (ISTRecordNotifySink, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISTGramComp members + STDMETHOD (AutoStop) (THIS) PURE; + STDMETHOD (VU) (THIS_ WORD) PURE; + }; + +typedef ISTRecordNotifySink FAR * PISTRECORDNOTIFYSINK; + + + +// ISTGramComp Interface + +#undef INTERFACE +#define INTERFACE ISTGramComp + +// {70618F73-D1ED-11d0-8FAC-08002BE4E62A} +DEFINE_GUID(IID_ISTGramComp, +0x70618f73, 0xd1ed, 0x11d0, 0x8f, 0xac, 0x8, 0x0, 0x2b, 0xe4, 0xe6, 0x2a); + +DECLARE_INTERFACE_ (ISTGramComp, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISTGramComp members + STDMETHOD (FromMemory) (THIS_ PVOID, DWORD) PURE; + STDMETHOD (FromResource) (THIS_ HINSTANCE, DWORD) PURE; + STDMETHOD (FromFile) (THIS_ PCWSTR) PURE; + STDMETHOD (FromStream) (THIS_ IStream *) PURE; + STDMETHOD (Compile) (THIS_ LPWSTR*, DWORD*) PURE; + STDMETHOD (IsCompiled) (THIS_ BOOL*) PURE; + STDMETHOD (ToMemory) (THIS_ PVOID*, DWORD*) PURE; + STDMETHOD (ToFile) (THIS_ PCWSTR) PURE; + STDMETHOD (ToStream) (THIS_ IStream *) PURE; + STDMETHOD (TextGet) (THIS_ LPWSTR*, DWORD*) PURE; + STDMETHOD (LanguageGet) (THIS_ LANGUAGEW*) PURE; + STDMETHOD (GrammarFormatGet) (THIS_ SRGRMFMT*) PURE; + STDMETHOD (GrammarDataGet) (THIS_ BOOL, PVOID*, DWORD*) PURE; + STDMETHOD (GrammarDataSet) (THIS_ PVOID, DWORD) PURE; + STDMETHOD (AutoList) (THIS_ PISRGRAMCFGW) PURE; + STDMETHOD (PhraseParse) (THIS_ PSRPHRASEW, DWORD *, LPWSTR *, DWORD *) PURE; + STDMETHOD (GrammarLoad) (THIS_ LPUNKNOWN, PVOID, IID, LPUNKNOWN *) PURE; + STDMETHOD (PhraseParseAlt) (THIS_ DWORD, DWORD *, LPWSTR *, DWORD *) PURE; + STDMETHOD (PhraseParseRule) (THIS_ PCWSTR, PSRPHRASEW, DWORD *, LPWSTR *, DWORD *) PURE; + }; + +typedef ISTGramComp FAR * PISTGRAMCOMP; + + + +// ISTTTSQueue Interface + +#undef INTERFACE +#define INTERFACE ISTTTSQueue + +// {EFD0E6BB-DB5F-11d0-8FAC-08002BE4E62A} +DEFINE_GUID(IID_ISTTTSQueue, +0xefd0e6bb, 0xdb5f, 0x11d0, 0x8f, 0xac, 0x8, 0x0, 0x2b, 0xe4, 0xe6, 0x2a); + +DECLARE_INTERFACE_ (ISTTTSQueue, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISTTTSQueue members + STDMETHOD (WaveAddFromFile) (THIS_ PCWSTR, PCWSTR) PURE; + STDMETHOD (WaveAddFromStream) (THIS_ PCWSTR, IStream *) PURE; + STDMETHOD (WaveAddFromMemory) (THIS_ PCWSTR, PVOID, DWORD) PURE; + STDMETHOD (WaveAddFromResource) (THIS_ PCWSTR, HMODULE, DWORD) PURE; + STDMETHOD (WaveAddFromList) (THIS_ PCWSTR, HMODULE) PURE; + STDMETHOD (WaveRemove) (THIS_ PCWSTR) PURE; + STDMETHOD (WaveAudioDestSet) (THIS_ LPUNKNOWN) PURE; + STDMETHOD (WaveLevelSet) (THIS_ DWORD) PURE; + STDMETHOD (WaveLevelGet) (THIS_ DWORD *) PURE; + STDMETHOD (TTSAdd) (THIS_ PCWSTR, LPUNKNOWN) PURE; + STDMETHOD (TTSRemove) (THIS_ PCWSTR) PURE; + STDMETHOD (TTSGet) (THIS_ PCWSTR, LPUNKNOWN *) PURE; + STDMETHOD (Speak) (THIS_ PCWSTR, PCWSTR, DWORD) PURE; + STDMETHOD (TextData) (THIS_ VOICECHARSET, DWORD, SDATA, PCWSTR, DWORD) PURE; + STDMETHOD (AudioPause) (THIS) PURE; + STDMETHOD (AudioResume) (THIS) PURE; + STDMETHOD (AudioReset) (THIS) PURE; + STDMETHOD (Register) (THIS_ PVOID, REFIID) PURE; + STDMETHOD (UseLogging) (THIS_ LPUNKNOWN) PURE; + STDMETHOD (IsSpeaking) (THIS_ DWORD*) PURE; + }; + +typedef ISTTTSQueue FAR * PISTTTSQUEUE; + + +// ISTTTSQueueNotifySink Interface + +#undef INTERFACE +#define INTERFACE ISTTTSQueueNotifySink + +// {8412FA0C-DB6A-11d0-8FAC-08002BE4E62A} +DEFINE_GUID(IID_ISTTTSQueueNotifySink, +0x8412fa0c, 0xdb6a, 0x11d0, 0x8f, 0xac, 0x8, 0x0, 0x2b, 0xe4, 0xe6, 0x2a); + +DECLARE_INTERFACE_ (ISTTTSQueueNotifySink, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISTTTSQueueNotifySink members + STDMETHOD (Start) (THIS) PURE; + STDMETHOD (Stop) (THIS) PURE; + STDMETHOD (SpeakID) (THIS_ DWORD) PURE; + STDMETHOD (Error) (THIS_ HRESULT) PURE; + STDMETHOD (Bookmark) (THIS_ DWORD) PURE; + }; + +typedef ISTTTSQueueNotifySink FAR * PISTTTSQUEUENOTIFYSINK; + + +// ISTLog Interface + +#undef INTERFACE +#define INTERFACE ISTLog + +// {B3613DA1-E26E-11d0-8FAC-08002BE4E62A} +DEFINE_GUID(IID_ISTLog, +0xb3613da1, 0xe26e, 0x11d0, 0x8f, 0xac, 0x8, 0x0, 0x2b, 0xe4, 0xe6, 0x2a); + +DECLARE_INTERFACE_ (ISTLog, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // ISTLog members + STDMETHOD (ToFile) (THIS_ PCWSTR) PURE; + STDMETHOD (ToStream) (THIS_ IStream *) PURE; + STDMETHOD (Text) (THIS_ PCWSTR, PCWSTR, WORD) PURE; + STDMETHOD (Data) (THIS_ PCWSTR, PCWSTR, WORD, PVOID, DWORD) PURE; + STDMETHOD (MaxDetailSet) (THIS_ WORD) PURE; + STDMETHOD (MaxDetailGet) (THIS_ WORD*) PURE; + STDMETHOD (ShowOutput) (THIS_ BOOL) PURE; + }; + +typedef ISTLog FAR * PISTLOG; + + +// IAudioSourceLog Interface + +#undef INTERFACE +#define INTERFACE IAudioSourceLog + +// {B3613DA2-E26E-11d0-8FAC-08002BE4E62A} +DEFINE_GUID(IID_IAudioSourceLog, +0xb3613da2, 0xe26e, 0x11d0, 0x8f, 0xac, 0x8, 0x0, 0x2b, 0xe4, 0xe6, 0x2a); + +DECLARE_INTERFACE_ (IAudioSourceLog, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IAudioSourceLog members + STDMETHOD (AudioSource) (THIS_ LPUNKNOWN) PURE; + STDMETHOD (UseLogging) (THIS_ LPUNKNOWN) PURE; + }; + +typedef IAudioSourceLog FAR * PIAUDIOSOURCELOG; + + + +// IAudioTel Interface + +#undef INTERFACE +#define INTERFACE IAudioTel + +// {2EC5A8A7-E65B-11d0-8FAC-08002BE4E62A} +DEFINE_GUID(IID_IAudioTel, +0x2ec5a8a7, 0xe65b, 0x11d0, 0x8f, 0xac, 0x8, 0x0, 0x2b, 0xe4, 0xe6, 0x2a); + +DECLARE_INTERFACE_ (IAudioTel, IUnknown) { + // IUnknown members + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IAudioTel members + STDMETHOD (AudioObject) (THIS_ LPUNKNOWN) PURE; + STDMETHOD (WaveFormatSet) (THIS_ SDATA) PURE; + }; + +typedef IAudioTel FAR * PIAUDIOTEL; + + + + + +/************************************************************************ +External speech synthesizer - This is for using external, hardware +based speech synthesizers with SAPI */ + + +/************************************************************************ +defines */ + + +// Synthesizer Attributes +#define TTS_LANGUAGE SETBIT(0) +#define TTS_VOICE SETBIT(1) +#define TTS_GENDER SETBIT(2) +#define TTS_VOLUME SETBIT(3) +#define TTS_PITCH SETBIT(4) +#define TTS_SPEED SETBIT(5) +#define TTS_ABBREVIATION SETBIT(6) +#define TTS_PUNCTUATION SETBIT(7) +#define TTS_PAUSEWORD SETBIT(8) +#define TTS_PAUSEPHRASE SETBIT(9) +#define TTS_PAUSESENTENCE SETBIT(10) +#define TTS_SPELLING SETBIT(11) +#define TTS_QUALITY SETBIT(12) +#define TTS_FRICATION SETBIT(13) +#define TTS_ASPIRATION SETBIT(14) +#define TTS_INTONATION SETBIT(15) + + +// Attribute minimums and maximums +#define TTSATTR_MINPAUSEWORD 0x00000000 +#define TTSATTR_MAXPAUSEWORD 0xffffffff +#define TTSATTR_MINPAUSEPHRASE 0x00000000 +#define TTSATTR_MAXPAUSEPHRASE 0xffffffff +#define TTSATTR_MINPAUSESENTENCE 0x00000000 +#define TTSATTR_MAXPAUSESENTENCE 0xffffffff +#define TTSATTR_MINASPIRATION 0x00000000 +#define TTSATTR_MAXASPIRATION 0xffffffff +#define TTSATTR_MINFRICATION 0x00000000 +#define TTSATTR_MAXFRICATION 0xffffffff +#define TTSATTR_MININTONATION 0x00000000 +#define TTSATTR_MAXINTONATION 0xffffffff + + +// ITTSNotifySink +#define TTSNSAC_LANGUAGE 100 +#define TTSNSAC_VOICE 101 +#define TTSNSAC_GENDER 102 +#define TTSNSAC_ABBREVIATION 103 +#define TTSNSAC_PUNCTUATION 104 +#define TTSNSAC_PAUSEWORD 105 +#define TTSNSAC_PAUSEPHRASE 106 +#define TTSNSAC_PAUSESENTENCE 107 +#define TTSNSAC_SPELLING 108 +#define TTSNSAC_QUALITY 109 +#define TTSNSAC_FRICATION 110 +#define TTSNSAC_ASPIRATION 111 +#define TTSNSAC_INTONATION 112 + + +// Interfaces +#define TTSI_ITTSEXTERNALSYNTHESIZER SETBIT(4) + + +// TTSERR Result codes +#define TTSERR_SYNTHESIZERBUSY TTSERROR(100) +#define TTSERR_ALREADYDISPLAYED TTSERROR(101) +#define TTSERR_INVALIDATTRIB TTSERROR(102) +#define TTSERR_SYNTHESIZERACCESSERROR TTSERROR(103) +#define TTSERR_DRIVERERROR TTSERROR(104) +#define TTSERR_UNRECOVERABLEERROR TTSERROR(105) +#define TTSERR_DRIVERACCESSERROR TTSERROR(106) +#define TTSERR_BUFFERTOOSMALL TTSERROR(107) +#define TTSERR_DRIVERNOTFOUND TTSERROR(108) +#define TTSERR_CANNOTREGISTER TTSERROR(109) +#define TTSERR_LANGUAGENOTSUPPORTED TTSERROR(110) + + +/************************************************************************ +Class IDs */ + +// {479DFDCB-01A8-11d1-A7A5-00C04FBBE8AB} +DEFINE_GUID(CLSID_SynthAudioDest, +0x479dfdcb, 0x1a8, 0x11d1, 0xa7, 0xa5, 0x0, 0xc0, 0x4f, 0xbb, 0xe8, 0xab); + +// {26C328C1-F26F-11d0-9DFF-006097622195} +DEFINE_GUID(CLSID_SynthEngine, +0x26c328c1, 0xf26f, 0x11d0, 0x9d, 0xff, 0x0, 0x60, 0x97, 0x62, 0x21, 0x95); + +// {AC8FCCA1-FFD7-11d0-9E22-006097622195} +DEFINE_GUID(CLSID_SynthEngineEnumerator, +0xac8fcca1, 0xffd7, 0x11d0, 0x9e, 0x22, 0x0, 0x60, 0x97, 0x62, 0x21, 0x95); + + + +/************************************************************************ +typedefs */ + +// Definition of Preset +typedef struct +{ + LANGID Language; + DWORD Voice; + DWORD Gender; + + DWORD Volume; + DWORD Pitch; + DWORD Speed; + + DWORD Abbreviation; + DWORD Punctuation; + DWORD PauseWord; + DWORD PausePhrase; + DWORD PauseSentence; + + DWORD Spelling; + DWORD Quality; + + DWORD Frication; + DWORD Aspiration; + DWORD Intonation; +} +TTSPRESET, *PTTSPRESET; + + +/************************************************************************ +interfaces */ + + +/* + * ITTSExternalSynthesizer + */ + + +#undef INTERFACE +#define INTERFACE ITTSExternalSynthesizerW + +// {A3F8B9C0-2010-11d1-A306-006097622195} +DEFINE_GUID(IID_ITTSExternalSynthesizerW, +0xa3f8b9c0, 0x2010, 0x11d1, 0xa3, 0x6, 0x0, 0x60, 0x97, 0x62, 0x21, 0x95); + +DECLARE_INTERFACE_(ITTSExternalSynthesizerW, IUnknown) +{ + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + STDMETHOD (AttributeGet) (THIS_ DWORD dwAttribute, DWORD *pdwValue) PURE; + STDMETHOD (AttributeSet) (THIS_ DWORD dwAttribute, DWORD dwValue) PURE; + STDMETHOD (PresetGet) (THIS_ PTTSPRESET pPreset, DWORD *pdwResult) PURE; + STDMETHOD (PresetSet) (THIS_ TTSPRESET Preset, DWORD *pdwResult) PURE; + + STDMETHOD (GetAttributeElements) (THIS_ DWORD dwAttr, DWORD *pdwNumElems) PURE; + STDMETHOD (GetAttributeRange) (THIS_ DWORD dwAttr, DWORD *pdwMin, DWORD *pdwMax) PURE; + STDMETHOD (GetAttributeValue) (THIS_ DWORD dwAttr, DWORD dwIndex, DWORD *pdwValue, PWSTR szText, DWORD dwMaxChars) PURE; + STDMETHOD (GetAttributeIndex) (THIS_ DWORD dwAttr, DWORD dwValue, DWORD *pdwIndex, PWSTR szText, DWORD dwMaxChars) PURE; + + STDMETHOD (AudioFlush) (THIS) PURE; + + STDMETHOD (TextDataInterrupt)(THIS_ VOICECHARSET eCharacterSet, DWORD dwFlags, SDATA dText, PVOID pNotifyInterface, IID IIDNotifyInterface) PURE; + STDMETHOD (TextDataCritical) (THIS_ SDATA) PURE; + + STDMETHOD (MiscellaneousDlg) (THIS_ HWND hWndParent, PCWSTR pszTitle) PURE; +}; +typedef ITTSExternalSynthesizerW *PITTSEXTERNALSYNTHESIZERW; + + +#undef INTERFACE +#define INTERFACE ITTSExternalSynthesizerA + +// {3D11C963-F210-11d0-A788-00C04FBBE8AB} +DEFINE_GUID(IID_ITTSExternalSynthesizerA, +0x3d11c963, 0xf210, 0x11d0, 0xa7, 0x88, 0x0, 0xc0, 0x4f, 0xbb, 0xe8, 0xab); + +DECLARE_INTERFACE_(ITTSExternalSynthesizerA, IUnknown) +{ + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + STDMETHOD (AttributeGet) (THIS_ DWORD dwAttribute, DWORD *pdwValue) PURE; + STDMETHOD (AttributeSet) (THIS_ DWORD dwAttribute, DWORD dwValue) PURE; + STDMETHOD (PresetGet) (THIS_ PTTSPRESET pPreset, DWORD *pdwResult) PURE; + STDMETHOD (PresetSet) (THIS_ TTSPRESET Preset, DWORD *pdwResult) PURE; + + STDMETHOD (GetAttributeElements) (THIS_ DWORD dwAttr, DWORD *pdwNumElems) PURE; + STDMETHOD (GetAttributeRange) (THIS_ DWORD dwAttr, DWORD *pdwMin, DWORD *pdwMax) PURE; + STDMETHOD (GetAttributeValue) (THIS_ DWORD dwAttr, DWORD dwIndex, DWORD *pdwValue, PSTR szText, DWORD dwMaxChars) PURE; + STDMETHOD (GetAttributeIndex) (THIS_ DWORD dwAttr, DWORD dwValue, DWORD *pdwIndex, PSTR szText, DWORD dwMaxChars) PURE; + + STDMETHOD (AudioFlush) (THIS) PURE; + + STDMETHOD (TextDataInterrupt)(THIS_ VOICECHARSET eCharacterSet, DWORD dwFlags, SDATA dText, PVOID pNotifyInterface, IID IIDNotifyInterface) PURE; + STDMETHOD (TextDataCritical) (THIS_ SDATA) PURE; + + STDMETHOD (MiscellaneousDlg) (THIS_ HWND hWndParent, PCSTR pszTitle) PURE; +}; +typedef ITTSExternalSynthesizerA *PITTSEXTERNALSYNTHESIZERA; + + +#ifdef _S_UNICODE + #define ITTSExternalSynthesizer ITTSExternalSynthesizerW + #define IID_ITTSExternalSynthesizer IID_ITTSExternalSynthesizerW + #define PITTSEXTERNALSYNTHESIZER PITTSEXTERNALSYNTHESIZERW + +#else + #define ITTSExternalSynthesizer ITTSExternalSynthesizerA + #define IID_ITTSExternalSynthesizer IID_ITTSExternalSynthesizerA + #define PITTSEXTERNALSYNTHESIZER PITTSEXTERNALSYNTHESIZERA + +#endif // _S_UNICODE + + + +/* + * IAudioExternalSynthesizer + */ + +#undef INTERFACE +#define INTERFACE IAudioExternalSynthesizer + +// {33E0E76B-70CE-11d1-A826-00C04FBBE8AB} +DEFINE_GUID(IID_IAudioExternalSynthesizer, +0x33e0e76b, 0x70ce, 0x11d1, 0xa8, 0x26, 0x0, 0xc0, 0x4f, 0xbb, 0xe8, 0xab); + +DECLARE_INTERFACE_(IAudioExternalSynthesizer, IUnknown) +{ + STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID *ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; +}; +typedef IAudioExternalSynthesizer *PIAUDIOEXTERNALSYNTHESIZER; + + +#endif // _SPEECH_