РУКОВОДСТВО

Озвучка текста во Flutter естественными голосами

Во Flutter синтез речи обычно означает плагин flutter_tts, который говорит голосами самого телефона. Это работает офлайн и бесплатно, но голос меняется от устройства к устройству и редко звучит как ваш бренд или персонажи.

Бесплатный движок SuperClonica даёт приложению одинаковый естественный голос на любом телефоне — двумя способами: заранее озвученные файлы внутри приложения или сервер синтеза, к которому обращается приложение. В этом руководстве — оба способа с готовым кодом на Dart и когда flutter_tts всё же правильный выбор.

Три способа заставить Flutter-приложение говорить

Большинство приложений их сочетают: ассеты для интерфейса, сервер для пользовательского текста, системный голос как запасной вариант.

  • flutter_tts: голоса, установленные на телефоне, — офлайн и бесплатно, но на каждом устройстве свои.
  • Озвученные ассеты: каждая неизменная реплика озвучена один раз в SuperClonica и лежит в приложении.
  • Сервер синтеза: приложение отправляет текст на ваш сервер SuperClonica и проигрывает ответ — для меняющегося текста.
  • SuperClonica говорит на 31 языке; китайский пока не поддерживается.

Подберите голос бесплатно онлайн

На странице любого голоса впишите реплику своего приложения, от 30 до 100 символов, выберите язык и нажмите «Озвучить». Через несколько секунд вы услышите, подходит ли голос, без регистрации, в том числе с телефона.

Поставляйте озвученные реплики ассетами

MP3 держит приложение лёгким: реплика из одного предложения весит несколько десятков килобайт.

  • Озвучьте каждую реплику на компьютере движком: python -m pip install superclonica-cpu, затем superclonica --text "С возвращением!" --voice F1 --lang ru --output assets/voice/welcome.mp3.
  • Укажите папку в разделе flutter: assets: файла pubspec.yaml.
  • Проигрывайте реплику пакетом audioplayers: await AudioPlayer().play(AssetSource('voice/welcome.mp3'));
  • Ассеты работают офлайн и без задержки, но любая правка — это новая версия приложения.

Обращайтесь к своему серверу синтеза

Запустите сервер на машине, которой вы управляете: docker run -d -p 8000:8000 -v superclonica-models:/models superclonica/superclonica:cpu. Поставьте его за HTTPS, которого iOS и Android ждут по умолчанию, и задайте SUPERCLONICA_API_KEY, чтобы сервером пользовалось только ваше приложение. С пакетами http, path_provider и audioplayers реплика — это один запрос: final res = await http.post(Uri.parse('https://tts.example.com/synthesize'), headers: {'Content-Type': 'application/json'}, body: jsonEncode({'text': 'Ваш заказ уже в пути.', 'voice': 'F1', 'lang': 'ru'})); final file = File('${(await getTemporaryDirectory()).path}/line.wav'); await file.writeAsBytes(res.bodyBytes); await AudioPlayer().play(DeviceFileSource(file.path)); Добавьте заголовок Authorization: Bearer с ключом и кешируйте файлы повторяющихся реплик.

Когда хватит flutter_tts

flutter_tts хватит, когда голос нужно только понять: чтение уведомления, помощник доступности, прототип или приложение, которое должно говорить совсем без сети и не имеет неизменных реплик. Выбирайте SuperClonica, когда голос — часть продукта: репетитор, игровой персонаж, медитация с ведущим, бренд, который должен звучать одинаково на каждом телефоне.