MCPcopy Index your code
hub / github.com/Femoon/tts-azure-web

github.com/Femoon/tts-azure-web @v2.0.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v2.0.0 ↗ · + Follow
84 symbols 187 edges 33 files 0 documented · 0%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

TTS Azure Web

English / 简体中文

TTS Azure Web is an Azure Text-to-Speech (TTS) web application built with Next.js 15 and React 19. Fine-tune the output speech results using Speech Synthesis Markup Language (SSML). It allows you to run it locally or deploy it with a single click using your Azure Key.

Key Features

Core Functionality

  • Voice Customization: Selection of voice, language, style, and character
  • Audio Controls: Adjustments of speech speed, intonation, and volume
  • Audio Export: Download generated audio files
  • Dual Mode System: Switch between Normal mode (UI controls) and SSML mode (direct markup)
  • Configuration Management: Import and export SSML configurations

Technical Features

  • Modern Stack: Next.js 15 with App Router, React 19, TypeScript
  • Responsive UI: HeroUI (NextUI v2) with Tailwind CSS v4 and Framer Motion
  • Internationalization: Built-in i18n support (English/Chinese) with automatic locale detection
  • State Management: Zustand with persistent storage and mode switching
  • Multiple Deployment Options: Vercel, Docker, or local development

This application is ideal for those looking to minimize setup while experiencing the full capabilities of Azure TTS.

Live demo: https://tts.femoon.top

Getting Started

Get your API Key

  • Go to Microsoft Azure Text to Speech and click "Try Text to Speech Free"
  • Go to Azure AI services
  • In the "Speech services" block, click "Add"
  • A region and two subscription keys will be listed beside Speech Services. You only need one key and its corresponding region.

Deployment Options

Deploy on Vercel

Deploy with Vercel

Docker Deployment

# Build the Docker image
docker build -t tts-azure-web .

# Run with environment variables
docker run -p 3000:3000 \
  -e SPEECH_KEY=your_azure_key \
  -e SPEECH_REGION=your_azure_region \
  tts-azure-web

Local Production Deployment

# Install yarn (if not already installed)
npm i -g yarn

# Install dependencies
yarn

# Build for production
yarn build

# Start production server
yarn start

Development

Environment Setup

Before starting development, create a .env.local file at the project root with your Azure credentials:

# Required: Azure Cognitive Services credentials
SPEECH_KEY=your_azure_key
SPEECH_REGION=your_azure_region

# Optional: Application configuration
NEXT_PUBLIC_MAX_INPUT_LENGTH=4000  # Maximum text input length (default: 4000)

# Optional: Next.js configuration
NEXT_TELEMETRY_DISABLED=1         # Disable Next.js telemetry

Common Azure regions: eastus, westus2, eastasia, westeurope, etc.

Development Server

# Install yarn (if not already installed)
npm i -g yarn

# Install dependencies
yarn

# Start development server (localhost only)
yarn dev

# Or start development server accessible on LAN
yarn lan-dev
  • Local development: Open http://localhost:3000
  • LAN development: Access via your machine's IP address on port 3000

Development Commands

yarn dev       # Start development server
yarn lan-dev   # Start development server on LAN (0.0.0.0)
yarn build     # Build for production
yarn start     # Start production server
yarn lint      # Run ESLint with auto-fix (max 0 warnings)

Architecture Overview

Technology Stack

  • Frontend: React 19 with TypeScript
  • Framework: Next.js 15 with App Router
  • UI Library: HeroUI (NextUI v2) + Tailwind CSS v4 + Framer Motion
  • State Management: Zustand with persistence middleware
  • Internationalization: Built-in Next.js i18n with locale detection
  • Speech Service: Microsoft Azure Cognitive Services Speech SDK

Project Structure

app/
├── [lang]/              # Internationalized routes (en/cn)
│   ├── ui/             # UI components
│   │   └── components/ # Reusable components
│   └── page.tsx        # Main application page
├── api/                # API routes
│   ├── audio/         # TTS audio generation
│   ├── token/         # Azure authentication
│   └── list/          # Voice list fetching
└── lib/               # Utilities and stores
    ├── stores/        # Zustand state management
    ├── hooks/         # Custom React hooks
    └── i18n/          # Internationalization config

Key Features

  • Dual Mode System: Toggle between Normal mode (UI controls) and SSML mode (direct markup)
  • State Persistence: Automatic localStorage sync for user preferences and configurations
  • Mode Switching: Seamless switching between modes with state caching
  • Responsive Design: Mobile-first design with adaptive layouts

Contributing

Git Commit Convention

This project follows the Conventional Commits specification:

  • feat: Add new functions
  • fix: Fix issues/bugs
  • perf: Optimize performance
  • style: Change code style without affecting functionality
  • refactor: Refactor code
  • revert: Undo changes
  • test: Test related, does not involve business code changes
  • docs: Documentation and annotations
  • chore: Update dependencies/modify configuration
  • ci: CI/CD related changes

Development Workflow

  1. Pre-commit hooks: Husky runs ESLint and Prettier on staged files
  2. Linting: ESLint with TypeScript, Prettier, and import ordering rules
  3. Commit validation: Commitlint enforces conventional commit messages
  4. Code quality: Maximum 0 ESLint warnings allowed

License

This project is licensed under the MIT License - see the LICENSE file for details.

Support

Acknowledgments

Extension points exported contracts — how you extend this code

ProcessEnv (Interface)
(no doc)
typings.d.ts
ListItem (Interface)
(no doc)
app/lib/types.ts
ExtendedPropertyMap (Interface)
(no doc)
app/lib/types.ts
Config (Interface)
(no doc)
app/lib/types.ts
KeyValue (Interface)
(no doc)
app/lib/types.ts
GenderItem (Interface)
(no doc)
app/lib/types.ts

Core symbols most depended-on inside this repo

generateSSML
called by 3
app/lib/tools.ts
handleSelectVoiceName
called by 3
app/[lang]/ui/content.tsx
setSecurityHeaders
called by 2
middleware.ts
saveAs
called by 2
app/lib/tools.ts
getFormatDate
called by 2
app/lib/tools.ts
useTheme
called by 2
app/lib/hooks/use-theme.ts
insertTextAtCursor
called by 2
app/[lang]/ui/content.tsx
getExportData
called by 2
app/[lang]/ui/content.tsx

Shape

Function 70
Interface 14

Languages

TypeScript100%

Modules by API surface

app/[lang]/ui/content.tsx20 symbols
app/lib/tools.ts11 symbols
app/lib/types.ts9 symbols
app/[lang]/ui/nav.tsx6 symbols
app/lib/stores/theme-store.ts5 symbols
middleware.ts4 symbols
app/lib/stores/tts-store.ts3 symbols
app/[lang]/ui/components/import-from-normal-button.tsx3 symbols
app/[lang]/ui/components/export-import-setting-button.tsx3 symbols
app/api/list/fetch-list.ts2 symbols
app/api/audio/route.ts2 symbols
app/[lang]/ui/components/theme-toggle.tsx2 symbols

For agents

$ claude mcp add tts-azure-web \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact