Озвучка текста во 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, когда голос — часть продукта: репетитор, игровой персонаж, медитация с ведущим, бренд, который должен звучать одинаково на каждом телефоне.