85 lines
2.8 KiB
Bash
Executable File
85 lines
2.8 KiB
Bash
Executable File
#!/bin/sh
|
|
# One-shot installer for MicroslopSam. Runs all setup steps, idempotently:
|
|
# 1. system dependencies (Wine, Winelib, helpers; needs sudo)
|
|
# 2. wine prefix + SAPI4 runtime + MSTTS voices + registration
|
|
# 3. Flextalk extraction + voices + registration
|
|
# 4. host build (Winelib and PE)
|
|
# 5. quick voice check
|
|
#
|
|
# Usage: setup/install.sh
|
|
# Re-running is safe.
|
|
set -eu
|
|
|
|
HERE=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
|
|
ROOT=$(CDPATH= cd -- "$HERE/.." && pwd)
|
|
ASSETS=${ASSETS:-$ROOT/../Microsoft-Sam-Mary-Mike-TruVoice-WSAPI4}
|
|
FLEXTALK_DIR=${FLEXTALK_DIR:-$ROOT/../flextalk}
|
|
|
|
log() { printf '\n== %s\n' "$*"; }
|
|
|
|
# 1) system dependencies -----------------------------------------------------
|
|
if [ "$(id -u)" = "0" ]; then
|
|
log "installing system dependencies"
|
|
"$HERE/install-deps.sh"
|
|
else
|
|
log "installing system dependencies (sudo)"
|
|
sudo "$HERE/install-deps.sh"
|
|
fi
|
|
|
|
# 2) SAPI4 runtime + MSTTS voices --------------------------------------------
|
|
log "setting up wine prefix, SAPI4 runtime and MSTTS voices"
|
|
"$HERE/setup-prefix.sh" "$ASSETS"
|
|
|
|
# 3) Flextalk voices ----------------------------------------------------------
|
|
EXTRACTED="$FLEXTALK_DIR/extracted/TTS_Executables"
|
|
if [ ! -d "$EXTRACTED/EngineDLLs" ]; then
|
|
CAB=""
|
|
for c in "$FLEXTALK_DIR/installer/flextalk/data1.cab" \
|
|
"$ASSETS/flextalk/data1.cab"; do
|
|
if [ -f "$c" ]; then CAB="$c"; break; fi
|
|
done
|
|
if [ -z "$CAB" ]; then
|
|
echo "Flextalk data1.cab not found; set FLEXTALK_DIR to the archive dir" >&2
|
|
exit 1
|
|
fi
|
|
command -v unshield >/dev/null 2>&1 || {
|
|
echo "unshield is required to extract the Flextalk installer" >&2
|
|
exit 1
|
|
}
|
|
log "extracting Flextalk installer ($CAB)"
|
|
rm -rf "$FLEXTALK_DIR/extracted"
|
|
unshield -O -d "$FLEXTALK_DIR/extracted" x "$CAB" >/dev/null
|
|
fi
|
|
log "installing Flextalk voices"
|
|
"$HERE/setup-flextalk.sh" "$EXTRACTED"
|
|
|
|
# 4) host build ---------------------------------------------------------------
|
|
log "building the host"
|
|
mkdir -p "$ROOT/build"
|
|
winegcc -m32 -O2 -o "$ROOT/build/sapi4host-winlib" "$ROOT/host/sapi4host.c" \
|
|
-I"$ROOT/../reference" -lole32 -luser32 -ladvapi32
|
|
if command -v i686-w64-mingw32-gcc >/dev/null 2>&1; then
|
|
i686-w64-mingw32-gcc -O2 -static -o "$ROOT/build/sapi4host.exe" \
|
|
"$ROOT/host/sapi4host.c" -I"$ROOT/../reference" \
|
|
-lole32 -luser32 -ladvapi32 -luuid
|
|
fi
|
|
|
|
# 5) check --------------------------------------------------------------------
|
|
log "installed voices"
|
|
"$HERE/run.sh" -l || true
|
|
|
|
cat <<EOF
|
|
|
|
Done.
|
|
|
|
Veskslop configuration:
|
|
VESKSLOP_TTS_CMD="$HERE/vekslop-tts.sh {out} {text_file}"
|
|
VESKSLOP_TTS_VOICES="\$($HERE/vekslop-tts.sh --voices)"
|
|
|
|
Manual test:
|
|
$HERE/run.sh -v Sam -t "Hello." -o /tmp/hello.wav
|
|
|
|
Normalized 48 kHz output (what Veskslop hears):
|
|
VESKSLOP_TTS_VOICE=keith-bell $HERE/vekslop-tts.sh /tmp/keith.wav /tmp/text.txt
|
|
EOF
|