Как реализовать синтез речи из текста в мобильном приложении 1С на Android?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Разработка мобильных решений на платформе 1С часто требует внедрения голосовых уведомлений, особенно в приложениях для складов (ТСД) или при автоматизации курьерских служб. В данной статье мы подробно разберем, как заставить ваше приложение «говорить», проанализируем стандартные возможности платформы и рассмотрим альтернативные варианты для улучшения качества синтеза.

Использование стандартных средств платформы 1С

Для начала рассмотрим самый простой и эффективный способ, встроенный в мобильную платформу 1С:Предприятие «из коробки». Платформа предоставляет объект СредстваМультимедиа, который позволяет воспроизводить текст без использования сторонних библиотек. Разберем программный код, который необходимо разместить в модуле:


&НаКлиенте
Процедура ОзвучитьТекст(ТекстДляОзвучки)
    #Если МобильныйКлиент Или МобильноеПриложениеКлиент Тогда
        Если СредстваМультимедиа.ПоддерживаетсяВоспроизведениеТекста("ru-RU") Тогда
            СредстваМультимедиа.ВоспроизвестиТекст(ТекстДляОзвучки);
        Иначе
            Сообщить("Синтез речи на русском языке не поддерживается на данном устройстве.");
        КонецЕсли;
    #КонецЕсли
КонецПроцедуры

Проанализируем этот фрагмент. Мы используем директиву #Если МобильныйКлиент, так как функционал синтеза речи недоступен в обычном тонком или толстом клиенте на Windows. Метод ПоддерживаетсяВоспроизведениеТекста проверяет наличие установленного языкового пакета в системе. Это критически важный шаг, так как без него вызов функции воспроизведения может привести к ошибке или отсутствию звука.

Разбор типичной ошибки «Язык не поддерживается»

Часто разработчики сталкиваются с ситуацией, когда код написан верно, но система выдает ошибку о не поддерживаемом языке. Выясним причину этой проблемы. Платформа 1С не содержит собственного «движка» синтеза речи, она является оболочкой (wrapper) над системным сервисом Android TextToSpeech (TTS).

Если вы получили сообщение о несовместимости, выполним следующие шаги по настройке Android-устройства:

  1. Перейдем в Настройки смартфона.
  2. Найдем раздел Расширенные настройки -> Язык и ввод.
  3. Выберем пункт Синтез речи.
  4. Убедимся, что выбран основной движок (обычно это Речевые сервисы от Google).
  5. Нажмем на иконку шестеренки рядом с движком и выберем Установка голосовых данных.
  6. Проверим, загружен ли пакет для русского языка (ru-RU). Если нет — его необходимо скачать.

Кроме того, при сборке мобильного приложения в 1С (через сборщик мобильных приложений) важно убедиться, что в настройках разрешены соответствующие разрешения и при необходимости включены сервисы Google в файле google-services.json.

Выбор альтернативного движка синтеза (Offline-решения)

Стандартный голос Google часто критикуют за неестественные интонации и ошибки в ударениях. Рассмотрим альтернативные движки, которые можно установить в систему Android как основные, и 1С будет использовать их автоматически.

RHVoice — один из самых популярных бесплатных движков с открытым исходным кодом. Он отличается высокой скоростью работы и низким потреблением ресурсов, что идеально подходит для ТСД. Рассмотрим его преимущества:

Vocalizer — коммерческое решение с очень естественным звучанием. Если ваше приложение предполагает длительное прослушивание текстов пользователем, стоит обратить внимание на голоса «Милена» или «Юрий». Они гораздо лучше справляются с интонационными паузами и сложными предложениями.

Современные методы: использование нейросетевых API (Online)

Если ваше мобильное приложение имеет постоянный доступ к интернету, мы можем рассмотреть вариант использования внешних API, таких как OpenAI TTS или Yandex SpeechKit. Это позволит добиться качества речи, практически не отличимого от человеческого.

Схема работы в 1С будет выглядеть следующим образом: мы отправляем HTTPЗапрос на сервер сервиса, передаем текст, а в ответ получаем аудиофайл (обычно в формате mp3). Далее мы воспроизводим этот файл через СредстваМультимедиа.ВоспроизвестиАудио(). Разберем пример логики запроса к API:


// Пример логики отправки запроса к облачному сервису
Запрос = Новый HTTPЗапрос("/v1/audio/speech");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + ТокенДоступа);
Запрос.Заголовки.Вставить("Content-Type", "application/json");

Параметры = Новый Структура;
Параметры.Вставить("model", "tts-1");
Параметры.Вставить("input", "Добрый день, необходимо отобрать товар на второй полке.");
Параметры.Вставить("voice", "alloy");

Запрос.УстановитьТелоИзСтроки(ЗаписатьJSONСтроку(Параметры));
// Далее следует отправка через HTTPСоединение и получение файла

Этот метод позволяет использовать возможности ChatGPT и других нейросетей для озвучивания. Как отмечают пользователи, нейросети могут даже имитировать эмоции и менять интонацию в зависимости от контекста сообщения.

Практические советы по работе на складе (ТСД)

Проанализируем специфику работы с синтезом речи в шумных помещениях. Если вы разрабатываете решение для складских работников, учтите следующие рекомендации:

  1. Четкость важнее естественности: В условиях шума лучше воспринимаются «роботизированные», но резкие и звонкие голоса.
  2. Управление очередью: Если кладовщик быстро сканирует штрихкоды, сообщения могут накладываться друг на друга. В Android TTS предусмотрен параметр QUEUE_FLUSH, который прерывает текущую фразу, если поступила новая. В стандартном методе 1С это поведение заложено по умолчанию — новый вызов ВоспроизвестиТекст прерывает предыдущий.
  3. Использование ударений: Если движок ошибается в словах (например, «зАмок» или «замОк»), попробуйте использовать спецсимволы. Многие синтезаторы воспринимают знак + перед ударной гласной (например, "Положите на ст+оящую полку").

Таким образом, мы выяснили, что реализация синтеза речи в 1С на Android — задача вполне решаемая стандартными средствами. Главное — правильно настроить системное окружение смартфона и выбрать подходящий движок в зависимости от задач вашего бизнеса.

← На главную