Настройка синтеза речи (TTS)
Синтез речи (TTS) читает вслух сообщения чата и игровое повествование. В этом руководстве описано, как его включить, выбрать голосовой сервис и голоса, настроить автовоспроизведение и пользоваться кнопками у каждого сообщения.
Быстрый старт
- Откройте карточку синтеза речи (шаги ниже) и включите Use text to speech (использовать синтез речи).
- Выберите Source (источник) и вставьте ключ в поле API key (ключ API).
- Нажмите Preview (прослушать), чтобы услышать пример.
- В чате нажмите Speak (озвучить) под сообщением.
Включение синтеза речи
Почти все настройки TTS собраны в одной карточке. Включение TTS само по себе ничего не озвучивает. Оно показывает кнопку Speak у каждого сообщения и настройки Auto-play (автовоспроизведение). Что и когда читать, вы по-прежнему решаете сами.
- Нажмите Connections (подключения) на верхней панели, затем Add (добавить). Откроется окно Add account (добавить аккаунт).
- В разделе Voice (голос) выберите Text to speech (синтез речи). Откроется карточка. Если вы уже пользуетесь PocketTTS, та же карточка есть и в группе On this device (на этом устройстве).
- Включите Use text to speech. Пока эта настройка выключена, вслух ничего не читается.
- Откройте список Source и выберите сервис.
Source – это сервис, который создает звук.
- OpenAI-compatible: OpenAI или любой сервер, повторяющий формат TTS от OpenAI. Это вариант по умолчанию.
- ElevenLabs: голосовой сервис ElevenLabs.
- PocketTTS: бесплатный голосовой сервер, который вы запускаете на своем компьютере.
- xAI Voice: голосовой сервис xAI.
Marinara хранит отдельный сохраненный профиль для каждого источника: его ключ, адрес, модель, голоса и параметры. При переключении источника возвращаются его прежние настройки. Источник, который вы еще не настраивали, начинает со значений по умолчанию.
Запросы идут через собственный сервер Marinara. Ключ API хранится на сервере в зашифрованном виде. После сохранения в поле видны точки маскировки, а настоящий ключ никогда не возвращается в браузер.
Использование аудиоподключения
Если вы уже добавили аккаунт Audio (смотрите Поддерживаемые провайдеры ИИ), вводить его данные заново не нужно. Он появляется в списке Source в группе Audio providers (аудиопровайдеры), а в скобках указан тип его источника.
- Откройте список Source и выберите аккаунт.
- Выберите его голоса и остальные настройки, описанные ниже.
Тогда Marinara использует адрес, ключ, модель и Request timeout (seconds) (тайм-аут запроса в секундах) этого аккаунта, поэтому карточка скрывает эти поля. Ключ остается в аккаунте: он никогда не копируется в карточку и не отправляется в браузер. Изменения в аккаунте, например новый ключ, вступают в силу сразу.
Голоса, скорость и остальные настройки речи сохраняются отдельно для каждого аккаунта. Два аккаунта одного типа никогда не делят их между собой. Ваши настройки для четырех обычных источников остаются прежними. Переключатель карточки по-прежнему включает и выключает обычный синтез речи.
Если выбранный аккаунт удален или им нельзя воспользоваться, карточка показывает Missing Audio provider, и ничего не озвучивается, пока вы не выберете другой источник. Marinara никогда не переключается сама. Если аккаунт отдает список своих голосов, карточка называет каждый сохраненный голос, которого нет в этом списке.
Настройка адреса, ключа и модели
Пропустите этот раздел, если выбрали аккаунт Audio. Эти данные берутся из аккаунта.
- Проверьте поле Base URL (базовый адрес). Каждый источник подставляет значение по умолчанию (таблица ниже). Меняйте его только для прокси или сервера, который вы запускаете сами.
- Вставьте ключ в поле API key. Чтобы сохранить прежний ключ, не трогайте точки маскировки. Чтобы удалить ключ, очистите поле.
- Проверьте поле Model (модель). Каждый источник подставляет модель по умолчанию. Можно вписать другую модель, которую поддерживает ваш сервис.
| Источник | Base URL по умолчанию | Модель по умолчанию | Голос по умолчанию |
| OpenAI-compatible | https://api.openai.com/v1 | tts-1 | alloy |
| ElevenLabs | https://api.elevenlabs.io | eleven_multilingual_v2 | нет, нужно выбрать самостоятельно |
| PocketTTS | http://localhost:8000 | pocket-tts | alba |
| xAI Voice | https://api.x.ai/v1 | grok-tts | eve |
Для ElevenLabs список Model загружает речевые модели, доступные вашему аккаунту. Выбирайте обычную речевую модель. Модели, в идентификаторе которых есть ttv, предназначены для конструирования голоса и читать текст не умеют. Если выбрать такую модель, воспроизведение прервется ошибкой с просьбой указать речевую модель.
PocketTTS
PocketTTS не встроен в Marinara. Установите официальный сервер PocketTTS отдельно и запустите его командой uvx pocket-tts serve. Marinara не загружает его и не управляет им. Официальный сервер использует http://localhost:8000. Оставьте это значение в Base URL, если не меняли хост или порт. Marinara определяет официальный multipart API /tts. Собственные URL для OpenAI-совместимой обертки PocketTTS по-прежнему работают.
Тайм-аут запроса
Marinara ждет каждую озвученную реплику до 60 секунд. Голосовому серверу на вашем собственном компьютере, особенно на ноутбуке, для длинной реплики может понадобиться больше времени. Увеличьте Request timeout (seconds) под полем Model. Диапазон – от 10 до 3 600 секунд.
У аккаунта Audio есть собственное поле Request timeout (seconds) под полем Default voice (голос по умолчанию) в его редакторе. Чаты, которые озвучиваются через аккаунт Audio, в том числе выбранный как Source, используют этот лимит. Лимит карточки действует для речи по собственным настройкам карточки, включая Preview. Если реплика занимает слишком много времени, ошибка сообщает, сколько секунд ждала Marinara и какую настройку нужно увеличить.
Выбор голосов
Настройка Voice option (выбор голоса) определяет, как распределяются голоса.
- One voice for all: все говорящие используют один и тот же голос. Это значение по умолчанию.
- Selected per character or persona: вы назначаете выбранным персонажам и персонам собственные голоса.
Один голос для всех
Выберите голос в поле Shared voice (общий голос). Чтобы загрузить настоящий список голосов вашего сервиса, введите его данные и нажмите Refresh voices from provider (обновить голоса от провайдера; иконка круговой стрелки). Сначала эта кнопка сохраняет карточку, поэтому только что введенный ключ используется сразу. До подключения показывается короткий встроенный список, чтобы поле не было пустым. Если сервис вернул ошибку, показывается она, а запасной список не выдается за успешное обновление.
У официального сервера PocketTTS нет эндпоинта со списком голосов, поэтому Marinara показывает его встроенные голоса и оставляет рядом со списком текстовое поле для другого встроенного имени или поддерживаемого URL голоса. Совместимые серверы-обертки могут возвращать свой список и принимать собственные ID или пути.
Для ElevenLabs голос выбрать обязательно. Marinara загружает всю библиотеку аккаунта: личные голоса, голоса рабочего пространства, сохраненные и стандартные. В окне выбора есть поле поиска и счетчик загруженных голосов. Изначально в нем стоит "Select an ElevenLabs voice", и до выбора настоящего голоса воспроизведение заблокировано.
Отдельные голоса для персонажей и персон
- Установите Voice option в значение Selected per character or persona.
- В блоке Character and persona voices (голоса персонажей и персон) нажмите Add voice (добавить голос).
- Выберите персонажа или персону в левом списке и голос в правом.
- Повторите для каждого.
Голос персонажа можно задать и на вкладке Voice редактора Character Editor. Это меняет ту же строку. Refresh (обновить) в этом блоке перезагружает список голосов. Сначала создайте персонажей. Если их нет, приложение просит добавить персонажа или персону, прежде чем назначать голоса.
Персонаж без личного голоса использует голос карточки с совпадающим именем, например оригинала AU-копии (версии персонажа в альтернативной вселенной). Иначе он говорит общим голосом. См. Создание и редактирование персонажей.
Голос рассказчика
Повествование – это текст, который не произносит ни один персонаж: например, описание сцены или реплики ведущего игры.
- В блоке Narrator voice (голос рассказчика) включите Use separate narrator voice (использовать отдельный голос рассказчика).
- Выберите голос.
Этот голос звучит, когда автор реплики – Narrator, GM, Game Master или System, в сообщениях Roleplay и Conversation, а также в повествовании Game Mode без указанного автора. При работе с ElevenLabs выберите голос рассказчика здесь. Если оставить поле пустым, повествование получает запасной голос только при заданном глобальном голосе.
Случайные голоса NPC (только Game Mode)
Эта настройка выдает свободные голоса второстепенным игровым персонажам, за которыми следит Game Mode. В Roleplay и Conversation она ничего не делает.
- В блоке Random NPC voices (случайные голоса NPC) включите Use default voices for random NPCs (использовать голоса по умолчанию для случайных NPC).
- Отметьте голоса в Male NPC defaults (мужские голоса NPC по умолчанию) и Female NPC defaults (женские голоса NPC по умолчанию).
Отслеживаемый персонаж NPC без личного голоса получает устойчивый выбор из подходящего набора и сохраняет его до конца сессии. Персонаж NPC с назначенным голосом сохраняет этот голос. Персонажи NPC с неясным полом выбирают из обоих наборов. Если приложение не находит голосов с пометкой мужских или женских, каждый набор использует полный список.
Формат звука и скорость
Настройка Audio format (формат звука) – это MP3 (по умолчанию) или WAV. Выбирайте WAV для локальных серверов, которые не умеют отдавать MP3. Для ElevenLabs эта настройка скрыта: он всегда использует MP3. Для xAI Voice она видна, но ни на что не влияет, потому что xAI всегда возвращает MP3.
Диапазон ползунка Speed (скорость) зависит от источника:
| Источник | Диапазон |
| OpenAI-compatible | от 0,25 до 4,0 от обычной скорости |
| PocketTTS | от 0,25 до 4,0 на совместимых обертках. Официальный сервер сам управляет скоростью. |
| ElevenLabs | от 0,7 до 1,2 от обычной скорости |
| xAI Voice | от 0,7 до 1,5 от обычной скорости |
Сохраненная скорость вне диапазона подтягивается к ближайшему допустимому значению. Для ElevenLabs есть еще две настройки: Language (язык; можно жестко задать язык или оставить Auto detect) и Stability (стабильность; от более выразительной речи к более ровной).
Автовоспроизведение
Каждый переключатель Auto-play читает один вид новых сообщений сразу после окончания генерации. Они работают только при включенном Use text to speech. Изначально все они выключены.
- Roleplay messages: новые ответы в Roleplay.
- Conversation messages: новые ответы в Conversation.
- Game narration: новое повествование и реплики боя в Game Mode.
- Progressive playback: первая строка ответа из нескольких строк начинает звучать сразу, не дожидаясь всего ответа.
- Only read dialogues: читает только реплики в кавычках или с пометкой речи и пропускает обычное повествование.
Автовоспроизведение срабатывает один раз – на самом новом ответе, в момент его завершения. Старые сообщения не перечитываются, когда вы открываете чат заново или прокручиваете его.
В Roleplay подготовка голоса начинается сразу после сохранения основного ответа. Если включенный агент переписывает ответ, например Prose Guardian, Marinara ждет окончательного текста.
Фильтры текста и указания эмоций
Эти фильтры действуют при ручном воспроизведении и автовоспроизведении, включая повествование Game и определение говорящих в Roleplay. Блоки кода пропускаются по умолчанию. Два других фильтра изначально выключены.
- Skip text inside HTML and custom tags (пропускать текст внутри HTML- и пользовательских тегов): удаляет заключенный в них текст, например скрытый блок
<simulation>...</simulation>. Теги говорящих, по которым выбираются голоса, остаются. - Skip fenced code blocks (пропускать огражденные блоки кода).
- Skip text inside square brackets (пропускать текст в квадратных скобках).
Включите Roleplay speaker extractor (определение говорящих в Roleplay), чтобы появился переключатель Enable emotion indicators (включить пометки эмоций). Пометки эмоций добавляют указания для голоса, не меняя слов реплик. Когда пометки эмоций включены, текст в квадратных скобках передается сервису синтеза речи, даже если включен Skip text inside square brackets. В этот текст могут входить и заметки. Чтобы заметки в скобках не попадали в озвучивание, выключите пометки эмоций и оставьте пропуск включенным. Указания вроде [Low, steady voice, restrained urgency] сохраняются целиком, когда длинная реплика делится на части. Известные метки говорящих и сцен по-прежнему удаляются. Модель синтеза речи сама решает, как использовать каждое указание. Когда включены Use text to speech, Game narration и пометки эмоций, указания могут появляться и в диалогах Game: в сценах, в разговорах отряда и в бою.
Озвучивание одного сообщения
При включенном TTS в панели инструментов под каждым сообщением персонажа или рассказчика появляется кнопка Speak (иконка микрофона).
- Нажмите Speak, чтобы прочитать сообщение. Пока звук загружается, кнопка показывает состояние загрузки.
- Нажмите ее еще раз во время воспроизведения, чтобы остановить. Всплывающая подсказка при этом читается Stop speaking.
- Сообщение без читаемого текста, например только с картинкой, показывает No dialogue to speak, и кнопка остается недоступной.
Пока сообщение звучит, появляются кнопки Pause speaking (приостановить озвучивание), Resume speaking (продолжить озвучивание) и Restart speaking (озвучить заново). Кнопка с иконкой громкоговорителя открывает ползунок Line volume (громкость реплики) от 0 до 100 процентов (по умолчанию 50). Эта громкость не связана ни с микшером Game Mode, ни с громкостью звонков в Conversation.
Если не получилось, смотрите раздел Устранение неполадок.
Кешированные клипы
Marinara сохраняет сгенерированный звук в браузере, чтобы не создавать одну и ту же реплику дважды. Панель Cached clips (кешированные клипы) показывает текущее количество клипов и их общий размер. Нажмите Export cached TTS clips (экспортировать кешированные клипы TTS; иконка скачивания), чтобы сохранить все кешированные клипы отдельными звуковыми файлами. Кеш сам удаляет самые старые клипы. Кнопки очистки в приложении нет. Чтобы очистить кеш, удалите данные браузера.
TTS в разных режимах чата
- Roleplay использует переключатель Roleplay messages и кнопки Speak. См. Режим Roleplay: начало работы.
- Conversation использует переключатель Conversation messages и те же кнопки. Аудиозвонки описаны в руководстве Аудио- и видеозвонки в режиме Conversation.
- Game Mode использует переключатель Game narration. В его микшере есть канал TTS рядом с Master, Music, Sound Effects и Ambient. Он задает громкость речи в игре и начинается со 100 процентов. См. Элементы управления игрой.
Фонетическое имя (произношение в звонках)
Если голос неверно произносит имя персонажа или персоны, добавьте Phonetic name (фонетическое имя) и впишите, как оно должно звучать. В редакторе Character Editor это поле находится на вкладке Voice. В редакторе Persona Editor оно стоит среди полей основных сведений. Оно используется только во время аудио- и видеозвонков в Conversation. Speak, автовоспроизведение и повествование Game Mode его не учитывают.
Устранение неполадок
- Ничего не звучит: проверьте, что Use text to speech включен. Затем проверьте нужный переключатель Auto-play или воспользуйтесь кнопкой Speak у сообщения.
- Карточка показывает Missing Audio provider: аккаунт, выбранный как Source, удален или им нельзя воспользоваться. Выберите другой источник. Смотрите Использование аудиоподключения.
- В списке нет голосов: сохраните карточку при включенном TTS и верном ключе, затем нажмите Refresh voices from provider. Официальный сервер PocketTTS использует встроенный список Marinara. Для совместимой обертки PocketTTS проверьте, что
<Base URL>/v1/voicesотвечает. - ElevenLabs не говорит: выберите настоящий голос, а не подсказку в поле "Select an ElevenLabs voice". Проверьте, что в Model указана речевая модель, а не модель конструирования голоса, в идентификаторе которой есть
ttv. - Реплика обрывается с сообщением "No audio after 60 s": голосовому серверу нужно больше времени. Увеличьте Request timeout (seconds) там, где указано в сообщении. См. раздел Тайм-аут запроса.
- Собственный сервер по локальному адресу заблокирован: включите
TTS_LOCAL_URLS_ENABLEDв.env. Так Marinara получает доступ к локальному или частному адресу для серверов в формате OpenAI-compatible или ElevenLabs. Для PocketTTS эта настройка не нужна. См. Настройки сервера: справочник. - Быстрая проверка: нажмите Preview в карточке, чтобы прослушать короткий пример с текущими настройками.
Справочник: музыка, звуковые эффекты и Gacha Forge
Эти разделы предназначены для продвинутых настроек.
Музыка и звуковые эффекты Game на совместимом аудиосервере
- В Connections откройте свой аккаунт Music & Sound Effects (музыка и звуковые эффекты) через Edit model (изменить модель) и выберите Custom compatible server (свой совместимый сервер). В окне Add account для этого типа аккаунта нет плитки: такой аккаунт появляется после обновления или импорта (смотрите справочник аккаунтов).
- Укажите адрес, ключ и модель своего сервера музыки или звуковых эффектов.
- Задайте Generation API format (формат API генерации) и введите пути эндпоинтов, которые предоставляет сервер. Пустой путь делает соответствующую возможность недоступной.
- Включите Music generation (генерация музыки), Sound-effect generation (генерация звуковых эффектов) или обе настройки.
- Выберите этот аккаунт при настройке Game или в настройках звука игры. Речевой аккаунт оставьте выбранным отдельно в карточке TTS.
Пути эндпоинтов добавляются к Base URL аккаунта. Для http://localhost:8002/v1 используйте chat/completions, чтобы обратиться к /v1/chat/completions. Локальным HTTP-эндпоинтам нужен TTS_LOCAL_URLS_ENABLED=true в .env, как и другим локальным запросам к совместимым аудиосерверам.
Поддерживаются два формата API:
- Prompt JSON → MP3 audio отправляет
{ "model": "your-model", "prompt": "the requested sound", "duration": 5, "response_format": "mp3" }и ожидает байты MP3. Музыка Game использует длительность контекстного трека (по умолчанию 120 секунд). Звуковые эффекты запрашивают 5 секунд. - Chat Completions → inline audio (ACE-Step compatible) отправляет
model, одну пользовательскую запись вmessages,stream: falseиaudio_configс полямиduration,instrumental: trueиformat: "mp3". Принимается встроенное MP3-аудио изchoices[0].message.audio: либо массив аудио-URL ACE-Step с URL данных base64, либо объект с полемdataв base64. См. контракт API, совместимого с ACE-Step. Удаленные URL результатов и асинхронные API задач не поддерживаются.
Включайте только то, что сервер действительно реализует. Один лишь речевой эндпоинт, совместимый с OpenAI, не означает поддержки музыки или звуковых эффектов. Сервис вроде Infermatic должен предоставлять один из этих форматов или адаптер. Его действующий музыкальный эндпоинт здесь не проверялся. Для нативной генерации ElevenLabs или SunoAPI выберите соответствующий источник в Music & Sound Effects. Смотрите справочник аккаунтов.
Сгенерированная контекстная музыка создается один раз для области или уровня столкновения и используется повторно. Повторяющиеся звуковые эффекты используют аудиокеш. Ошибка генерации оставляет кеш доступным для новой попытки.
Диалоги и звук в Gacha Forge
Gacha Forge 1.11.0 и новее использует аккаунт, выбранный в карточке TTS, и назначенные для него голоса персонажей. - Включите Read character dialogue (читать диалоги персонажей), чтобы озвучивать диалоги импортированных персонажей с назначенным голосом. Эта настройка находится на шаге Lore (лор) настройки нового мира, а для существующего мира – в собственных настройках мира Gacha Forge. Повествование, мысли, созданные генерацией бойцы без ID персонажа Engine и персонажи без голоса не озвучиваются. Одно лишь совпадение имени никогда не дает взять голос другого персонажа.
- Выбранный аккаунт Audio можно использовать при включенном переключателе TTS мира. Если вы напрямую используете собственные настройки источника карточки, Use text to speech тоже должен быть включен.
- Готовым музыке и звуковым эффектам Game аккаунт генерации не нужен. Чтобы создавать новые треки, включите Generate music and sound effects (генерировать музыку и звуковые эффекты) в Gacha Forge и выберите аккаунт Music & Sound Effects в Audio connection (аудиоподключение). Это поле появляется при включенной генерации. Треки главного экрана, боя, боссов, сюжетных сцен и историй персонажей создаются при первой необходимости, а затем используются повторно. Эти запросы используют ваш аккаунт в сервисе.
- Кнопка отключения звука справа вверху заглушает музыку, диалоги и звуковые эффекты одновременно. В визуальных настройках Gacha Forge есть отдельная громкость для каждого из трех, включая нулевую, а также пауза автовоспроизведения (по умолчанию 3 секунды, после того как текст полностью показан и озвученный диалог завершен). Выбор по-прежнему ожидает игрока. При выходе из сцены озвучивание диалога отменяется. При выходе из мира его звук останавливается.
Чтобы получить эти элементы управления, обновите и Engine, и установленный пакет Gacha Forge.
Смежные руководства
- Аудио- и видеозвонки в режиме Conversation
- Синхронизация губ с синтезом речи для 2D- и 3D-аватаров
- Режим Roleplay: начало работы
- Game Mode: начало работы
- Поддерживаемые провайдеры ИИ
- Создание и редактирование персонажей
- Настройки сервера: справочник