package main import ( "log" "net/http" "os" "os/signal" "syscall" "github.com/yourname/cyrene-ai/voice-service/internal/config" "github.com/yourname/cyrene-ai/voice-service/internal/handler" "github.com/yourname/cyrene-ai/voice-service/internal/service" ) func main() { log.SetFlags(log.LstdFlags | log.Lshortfile) log.Println("🎤 Voice-Service (STT + TTS) 启动中...") // 加载配置 cfg := config.Load() log.Printf("配置: 端口=%s, WhisperBinary=%s, WhisperModel=%s, Language=%s", cfg.Port, cfg.WhisperBinary, cfg.WhisperModel, cfg.WhisperLanguage) // 初始化 STT 服务 sttSvc := service.NewSTTService(cfg) // 检查 whisper 引擎是否可用 if !sttSvc.IsAvailable() { log.Printf("⚠️ Whisper 引擎未安装 (%s),STT 功能不可用", cfg.WhisperBinary) log.Printf(" 请运行: bash scripts/setup-whisper.sh") } else { log.Println("✅ Whisper 引擎已就绪") } // 初始化 TTS 服务 ttsSvc := service.NewTTSService() if !ttsSvc.IsAvailable() { log.Println("⚠️ TTS 引擎不可用 (请安装: pip install edge-tts)") } else { ttsStatus := ttsSvc.GetEngineStatus() log.Printf("✅ TTS 引擎已就绪 (引擎: %s)", ttsStatus["engine"]) } // 初始化 HTTP 处理器 sttHandler := handler.NewSTTHandler(sttSvc, cfg) sttHandler.SetTTSService(ttsSvc) ttsHandler := handler.NewTTSHandler(ttsSvc) // 注册路由 mux := http.NewServeMux() sttHandler.RegisterRoutes(mux) ttsHandler.RegisterRoutes(mux) // 启动 HTTP 服务 srv := &http.Server{ Addr: ":" + cfg.Port, Handler: mux, } go func() { log.Printf("🚀 Voice-Service 已启动在端口 %s", cfg.Port) if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { log.Fatalf("服务启动失败: %v", err) } }() // 优雅关闭 quit := make(chan os.Signal, 1) signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) <-quit log.Println("正在关闭 Voice-Service...") srv.Close() log.Println("Voice-Service 已关闭") }