Реализация синтеза речи с выбором голоса и тембра

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Реализация синтеза речи с выбором голоса и тембра
Простая
от 1 рабочего дня до 3 рабочих дней
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1240
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1167
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    867
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1084
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    563
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    829

Реализация синтеза речи с выбором голоса и тембра

Выбор голоса и тембра — пользовательский интерфейс над TTS-системой. Разные голоса для разных контекстов: официальный для банка, дружелюбный для ретейла, нейтральный для IVR.

Каталог голосов и маппинг

from dataclasses import dataclass
from enum import Enum

class VoiceGender(Enum):
    MALE = "male"
    FEMALE = "female"

@dataclass
class VoiceProfile:
    id: str
    name: str
    gender: VoiceGender
    language: str
    provider: str
    style: str  # formal | friendly | neutral | energetic
    sample_url: str

VOICE_CATALOG = [
    VoiceProfile("alena", "Алёна", VoiceGender.FEMALE, "ru", "yandex",
                 "friendly", "/samples/alena.mp3"),
    VoiceProfile("filipp", "Филипп", VoiceGender.MALE, "ru", "yandex",
                 "neutral", "/samples/filipp.mp3"),
    VoiceProfile("sv-svetlana", "Светлана", VoiceGender.FEMALE, "ru", "azure",
                 "formal", "/samples/svetlana.mp3"),
    VoiceProfile("alloy", "Alloy", VoiceGender.MALE, "en", "openai",
                 "neutral", "/samples/alloy.mp3"),
]

def select_voice(gender: VoiceGender, language: str,
                 style: str = "neutral") -> VoiceProfile:
    candidates = [v for v in VOICE_CATALOG
                  if v.gender == gender and v.language == language
                  and v.style == style]
    return candidates[0] if candidates else VOICE_CATALOG[0]

Параметры тембра (prosody)

@dataclass
class VoiceSettings:
    rate: float = 1.0      # скорость: 0.5–2.0
    pitch: float = 0.0     # тональность: -20 до +20 полутонов
    volume: float = 1.0    # громкость: 0.0–2.0

def apply_voice_settings(text: str, settings: VoiceSettings) -> str:
    """Оборачиваем текст в SSML с параметрами тембра"""
    rate_map = {0.5: "x-slow", 0.75: "slow", 1.0: "medium",
                1.25: "fast", 1.5: "x-fast"}
    rate_str = f"{int(settings.rate * 100)}%"
    pitch_str = f"{settings.pitch:+.0f}st"

    return f"""<speak>
  <prosody rate="{rate_str}" pitch="{pitch_str}">
    {text}
  </prosody>
</speak>"""

A/B тестирование голосов

Для оптимизации голосового бренда по метрикам удовлетворённости:

import random

def get_voice_for_user(user_id: str, test_name: str) -> str:
    # Детерминированное распределение по user_id
    hash_val = hash(f"{user_id}:{test_name}") % 100
    if hash_val < 50:
        return "alena"  # control
    else:
        return "filipp"  # variant

Сроки: каталог голосов с UI выбора — 2–3 дня. Полная система с A/B и аналитикой — 1 неделя.