diff --git a/ttstoy/morshu-server/server.py b/ttstoy/morshu-server/server.py index 234f437..7498421 100644 --- a/ttstoy/morshu-server/server.py +++ b/ttstoy/morshu-server/server.py @@ -3,18 +3,22 @@ Morshu TTS Server — standalone HTTP API for MorshuTalk engine. Runs on port 3002. GET /say?text=... returns WAV audio. """ +import os import sys import io from pathlib import Path from http.server import HTTPServer, BaseHTTPRequestHandler from urllib.parse import urlparse, parse_qs -# Add ttstoy to path so we can import the engine -sys.path.insert(0, str(Path(__file__).parent.parent)) +# Add ttstoy root to path so we can import the engine +SCRIPT_DIR = Path(__file__).resolve().parent +TTSTOY_DIR = SCRIPT_DIR.parent +sys.path.insert(0, str(TTSTOY_DIR)) + from morshutalk_engine import Morshu morshu = Morshu() -PORT = 3002 +PORT = int(os.environ.get("PORT", 3002)) class Handler(BaseHTTPRequestHandler): diff --git a/ttstoy/morshu-server/start.sh b/ttstoy/morshu-server/start.sh index a8981fe..932a209 100755 --- a/ttstoy/morshu-server/start.sh +++ b/ttstoy/morshu-server/start.sh @@ -4,7 +4,8 @@ echo "🗣️ Starting Morshu TTS Server..." -cd "$(dirname "$0")" +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +cd "$SCRIPT_DIR" # Check if python3 is available if ! command -v python3 &> /dev/null; then @@ -22,12 +23,13 @@ for pkg in pydub nltk g2p_en numpy; do done # Check if the morshu wav file exists -if [ ! -f "../morshutalk_morshu.wav" ]; then +if [ ! -f "$SCRIPT_DIR/../morshutalk_morshu.wav" ]; then echo "❌ Error: morshutalk_morshu.wav not found in parent directory" exit 1 fi # Start the server -echo "✅ Starting server on port ${PORT:-3002}..." +export PORT="${PORT:-3002}" +echo "✅ Starting server on port $PORT..." echo "🗣️ Using MorshuTalk engine" -exec python3 server.py +exec python3 "$SCRIPT_DIR/server.py" diff --git a/ttstoy/ttstoy.py b/ttstoy/ttstoy.py index b18be7d..129f02c 100644 --- a/ttstoy/ttstoy.py +++ b/ttstoy/ttstoy.py @@ -523,6 +523,10 @@ class TtsToy(Cog): log.info("Morshu server already running") return True + if not self.morshu_dir.exists(): + log.error(f"Morshu server directory not found: {self.morshu_dir}") + return False + server_py = self.morshu_dir / "server.py" if not server_py.exists(): log.error(f"Morshu server not found: {server_py}") @@ -533,7 +537,7 @@ class TtsToy(Cog): self.morshu_process = await asyncio.to_thread( subprocess.Popen, - [sys.executable, "server.py"], + [sys.executable, str(server_py)], cwd=str(self.morshu_dir), env=env, stdout=subprocess.PIPE, @@ -541,10 +545,18 @@ class TtsToy(Cog): text=True ) + # Wait for server to start await asyncio.sleep(3) + # Check if it's still running if self.morshu_process.poll() is not None: - log.error("Morshu server failed to start") + stderr = self.morshu_process.stderr.read() + stdout = self.morshu_process.stdout.read() + log.error(f"Morshu server failed to start (exit {self.morshu_process.returncode})") + if stderr: + log.error(f"Morshu stderr: {stderr}") + if stdout: + log.error(f"Morshu stdout: {stdout}") return False log.info(f"Morshu server started on port {self.morshu_port}")