ОписаниеГолосаСинтезаРечи.Описание

Свойства · Description

Тип: Строка. Описание голоса на языке текущего сеанса.

Полное описание, параметры и ограничения

ОписаниеГолосаСинтезаРечи.Описание (TextToSpeechVoiceDescription.Description)

ОписаниеГолосаСинтезаРечи (TextToSpeechVoiceDescription)

Описание (Description)

Доступен, начиная с версии 8.3.25.

Использование:
Только чтение.
Описание:
Тип: Строка.
Описание голоса на языке текущего сеанса.
Доступность:

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.

Использование в версии:

Доступен, начиная с версии 8.3.25.

Методическая информация

Практические примеры

Получить каталог настоящих голосов и синтезировать короткий текст выбранным ключом

Сначала показываем голоса и метаданные их дополнительных параметров. Пользователь выбирает фактический ключ; перед синтезом он повторно проверяется в текущем каталоге. Результат остаётся двоичными данными в памяти, не фиктивным WAV-файлом.

Где и как запускать

Полный серверный общий модуль УчебнаяРечь85 в новой базе УчебныеКаталогиРечи85; два независимых ручных действия собственной управляемой формы ниже.

Подготовка

  1. Создайте новую отдельную файловую учебную базу с именем конфигурации УчебныеКаталогиРечи85. Не переименовывайте рабочую УТ/КА/УНФ/БП ради обхода проверки и не подключайте рабочие обмены или задания.

  2. Используйте платформу8.5.1.1343. Создайте общий модуль УчебнаяРечь85: Сервер=Да, Глобальный=Нет, Клиент=Нет. Каждый урок независим: вставляйте его полный основной код в пустой модуль, не объединяйте дублирующиеся процедуры двух уроков.

  3. Администратор должен заранее настроить именно этот собственный стенд для реального сервиса речи по условиям вашего аккаунта и региона. Здесь нет автоматической регистрации, выдуманного URL, токена или пароля. Без доступного сервиса урок может завершиться ошибкой подключения.

  4. Вызовы выполняются в серверном контексте. В файловой базе это серверная часть клиентского процесса; в клиент-серверной базе интернет, сертификаты, права и подключение нужны именно серверу, а не только браузеру пользователя.

  5. В конфигураторе: Обработки → УчебнаяРечь85 → Формы → Пульт, тип Управляемая. Добавьте Согласие типа Булево, Итог типа Строка неограниченной длины; поле Итог сделайте многострочным и только для просмотра.

  6. Вставьте полный модуль запуска из отдельного блока ниже. Назначьте обработчик ПриОткрытии событию формы. Создайте перечисленные команды формы и свяжите их с одноимёнными процедурами модуля; добавьте кнопки команд.

  7. Нажмите F7 для проверки модулей и обновите только эту учебную базу. F7 не подтверждает доступность сервиса, корректность его ответа или звучание голоса.

  8. Откройте собственную обработку и прочитайте условия тарифа, передачи данных и возможной оплаты. Согласие при каждом открытии сбрасывается в Ложь; установите его только перед осознанным ручным опытом.

  9. Здесь код не запускался в1С и сеть не вызывалась: runtimeVerifiedScenarios=0. Выводимые модели и голоса зависят от настоящего каталога; заранее заданного числа или фиксированных ключей нет.

  10. Добавьте реквизит формы КлючГолоса типа Строка неограниченной длины и обычное поле ввода. Создайте команды ПоказатьГолоса и СинтезироватьОбразец с одноимёнными обработчиками.

  11. Первым ручным нажатием получите каталог, скопируйте значение после Ключ: в поле КлючГолоса. Представление и Описание — подписи, не ключи. Второй командой разрешается передача только фиксированной учебной фразы без персональных данных.

Функция КаталогГолосов(Согласие) Экспорт
    ПроверитьСвойСтенд(Согласие);
    Голоса = ПолучитьСвоиГолоса();
    Итог = "Голосов: " + Строка(Голоса.Количество());
    Для Каждого Голос Из Голоса Цикл
        Итог = Итог + Символы.ПС + "Ключ: " + Голос.Голос
            + "; язык: " + Голос.КодЯзыка + "; название: " + Голос.Представление
            + "; описание: " + Голос.Описание;
        Параметры = Голос.Параметры;
        Если ТипЗнч(Параметры) <> Тип("ФиксированныйМассив") Тогда
            ВызватьИсключение "В описании голоса нужен фиксированный массив параметров";
        КонецЕсли;
        Для Каждого Параметр Из Параметры Цикл
            Если ТипЗнч(Параметр) <> Тип("ОписаниеПараметраГолосаСинтезаРечи") Тогда
                ВызватьИсключение "Параметр голоса должен быть настоящим дескриптором сервиса";
            КонецЕсли;
            Допустимые = Параметр.ДопустимыеЗначения;
            Если ТипЗнч(Допустимые) <> Тип("ФиксированныйМассив") Тогда
                ВызватьИсключение "Нужен фиксированный массив доступных значений";
            КонецЕсли;
            Итог = Итог + Символы.ПС + "  Параметр: " + Параметр.Параметр
                + "; название: " + Параметр.Представление + "; описание: " + Параметр.Описание
                + "; доступных значений: " + Строка(Допустимые.Количество());
        КонецЦикла;
    КонецЦикла;
    Если Голоса.Количество() = 0 Тогда
        Итог = Итог + Символы.ПС + "Нет доступных голосов; синтез невозможен до настройки подключения";
    КонецЕсли;
    Возврат Итог;
КонецФункции

Функция СинтезОбразца(Согласие, КлючГолоса) Экспорт
    ПроверитьСвойСтенд(Согласие);
    Если ТипЗнч(КлючГолоса) <> Тип("Строка") Или Не ЗначениеЗаполнено(КлючГолоса) Тогда
        ВызватьИсключение "Сначала получите каталог и введите настоящий ключ голоса, не его название";
    КонецЕсли;
    Голоса = ПолучитьСвоиГолоса();
    Найден = Неопределено;
    Для Каждого Голос Из Голоса Цикл
        Если Голос.Голос = КлючГолоса Тогда
            Если Найден <> Неопределено Тогда
                ВызватьИсключение "Сервис вернул неоднозначный ключ; не выбирайте произвольное совпадение";
            КонецЕсли;
            Найден = Голос;
        КонецЕсли;
    КонецЦикла;
    Если Найден = Неопределено Тогда
        ВызватьИсключение "Такого ключа уже нет в настоящем каталоге; синтез не выполнялся";
    КонецЕсли;
    Данные = РаботаСРечью.Синтезировать("Учебная проверка выбранного голоса.", Найден.Голос);
    Если ТипЗнч(Данные) <> Тип("ДвоичныеДанные") Тогда
        ВызватьИсключение "Синтез должен вернуть настоящие двоичные данные, а не текст или адрес файла";
    КонецЕсли;
    Если Данные.Размер() = 0 Или Данные.Размер() > 1048576 Тогда
        ВызватьИсключение "Собственный короткий образец должен быть непустым и не более1МиБ";
    КонецЕсли;
    Возврат Данные;
КонецФункции

Функция ПолучитьСвоиГолоса()
    Голоса = РаботаСРечью.ПолучитьДоступныеГолосаСинтеза();
    Если ТипЗнч(Голоса) <> Тип("Массив") Тогда
        ВызватьИсключение "Каталог должен быть массивом описаний голосов";
    КонецЕсли;
    Если Голоса.Количество() > 1000 Тогда
        ВызватьИсключение "Для учебного каталога допустимы не более1000голосов";
    КонецЕсли;
    Для Каждого Голос Из Голоса Цикл
        Если ТипЗнч(Голос) <> Тип("ОписаниеГолосаСинтезаРечи") Тогда
            ВызватьИсключение "Получен не настоящий дескриптор голоса";
        КонецЕсли;
    КонецЦикла;
    Возврат Голоса;
КонецФункции

Процедура ПроверитьСвойСтенд(Согласие)
    Если ТипЗнч(Согласие) <> Тип("Булево") Или Не Согласие Тогда
        ВызватьИсключение "Нужно явное согласие на обращение собственного стенда к сервису речи";
    КонецЕсли;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Не обращайтесь к сервису внутри транзакции";
    КонецЕсли;
    Если ТипЗнч(РаботаСРечью) <> Тип("МенеджерРаботыСРечью") Тогда
        ВызватьИсключение "Нужен настоящий глобальный менеджер работы с речью";
    КонецЕсли;
КонецПроцедуры
УчебныеКаталогиРечи85.Пульт

УчебныеКаталогиРечи85 → Обработки → УчебнаяРечь85 → Формы → Пульт → Модуль

Полный модуль собственной управляемой формы; здесь не выполнялся.

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    Согласие = Ложь;
    КлючГолоса = "";
    Итог = "Сначала получите каталог, затем скопируйте настоящий ключ в поле КлючГолоса";
КонецПроцедуры

&НаКлиенте
Процедура ПоказатьГолоса(Команда)
    Если Не Согласие Тогда
        ВызватьИсключение "Согласие не установлено";
    КонецЕсли;
    Итог = "Получение голосов; прошлый результат сброшен";
    ПолучитьГолосаНаСервере();
КонецПроцедуры

&НаСервере
Процедура ПолучитьГолосаНаСервере()
    Итог = "Получение каталога; прошлый результат сброшен";
    Попытка
        Итог = УчебнаяРечь85.КаталогГолосов(Согласие);
    Исключение
        Итог = "Каталог не получен; синтез автоматически не выполняется";
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры

&НаКлиенте
Процедура СинтезироватьОбразец(Команда)
    Если Не Согласие Тогда
        ВызватьИсключение "Согласие не установлено";
    КонецЕсли;
    Итог = "Синтез собственного образца; прошлый результат сброшен";
    СинтезироватьНаСервере();
КонецПроцедуры

&НаСервере
Процедура СинтезироватьНаСервере()
    Итог = "Синтез собственного короткого текста; прошлый результат сброшен";
    Попытка
        Данные = УчебнаяРечь85.СинтезОбразца(Согласие, КлючГолоса);
        Итог = "Получены двоичные данные: " + Строка(Данные.Размер())
            + "байт. По контракту это OPUS в OGG, не WAV. Файл не записан; воспроизведения и проверки звучания не было";
    Исключение
        Итог = "Синтез не завершён; повторных запросов, записи файла и воспроизведения автоматически нет";
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры

Разбор по шагам

  1. ПолучитьДоступныеГолосаСинтеза вызывается на сервере и возвращает настоящий массив дескрипторов, а не придуманный список голосов или системных дикторов Windows.

  2. Каждый голос проверяем по типу; показываем его фактический ключ, язык, представление и описание. Параметры — фиксированный массив описаний дополнительных настроек конкретного голоса.

  3. Каждый параметр показывает свой ключ, подпись, объяснение и фактическое число ДопустимыеЗначения. В опубликованной справке элементы этого массива описаны неоднозначно; урок не выдаёт их за строки или числа.

  4. В отдельной команде сначала проверяются согласие и непустой ключ. Получаем каталог заново: ранее показанный голос мог исчезнуть, а введённое название может вообще не быть ключом.

  5. Ищем строгое совпадение ключа. Отсутствие или неоднозначность — ошибка до Синтезировать, а не выбор произвольного голоса или незаметный переход на голос по умолчанию.

  6. Синтезировать вызывается с коротким фиксированным текстом и настоящим ключом. Дополнительные параметры намеренно не передаются: без подтверждённого контракта значений не выдумываем скорость, пол или громкость.

  7. Проверяем фактический тип и размер возвращённых данных. Непустые данные до1МиБ остаются результатом функции; форма сообщает размер, но не записывает файл и не запускает динамики.

Как проверить результат

  1. Без согласия оба действия должны отказаться. Пока ключ пуст, Синтезировать не вызывается даже при готовом сервисе.

  2. После получения каталога проверьте различие Голос и Представление. Вводите именно настоящий ключ своего каталога, а не имя из чужого примера.

  3. Введите заведомо отсутствующий ключ: должна возникнуть ошибка до синтеза. С пустым каталогом допустимого ключа также нет.

  4. С существующим ключом и доступным сервисом ожидаются настоящие непустые ДвоичныеДанные. Размер определяется сервисом, не учебной константой. Это ещё не проверка звучания или декодирования.

  5. У голоса без параметров дополнительный список пуст. Число допустимых значений может быть0; урок не назначает первый элемент произвольным параметром синтеза.

  6. Поиск и синтез выполняются отдельными вызовами: сервис всё ещё может измениться или отказать после проверки ключа. Ошибка должна остаться ошибкой; повторная платная попытка автоматически не запускается.

Ожидаемый результат

Реальный каталог и, после отдельной осознанной команды, настоящие данные короткой фразы выбранным голосом. По контракту Синтезировать возвращает OPUS в OGG; сохранения, воспроизведения и аудиотеста здесь нет.

На что обратить внимание

  1. Это сервисный менеджер речи, не СредстваМультимедиа.ВоспроизвестиТекст и не локальный системный диктор.

  2. Нативный НачатьСинтез имеет другой результат в обработчике — WAV. Нельзя переносить этот формат на синхронный Синтезировать: здесь OPUS в OGG.

  3. ДопустимыеЗначения в установленной справке объявлены фиксированным массивом, но описание типа его элементов неоднозначно. Каталог читается без догадок; настройка дополнительных параметров требует отдельного подтверждения реального контракта.

  4. Дескрипторы и их свойства readonly. Код не конструирует голос или параметр, не переписывает каталог, не предполагает выдуманный XDTO-тип.

  5. Предел1МиБ проверяется после получения данных; он не ограничивает серверную аллокацию или длительность сети. Короткий фиксированный текст уменьшает учебный объём, но не гарантирует конкретный размер.

  6. Каталог не гарантирует бесплатность или постоянную доступность. Проверьте тариф и условия передачи текста до установки согласия; сертификаты или ошибки подключения не отключайте ради прохождения урока.

  7. Форма намеренно не сохраняет аудио и не проверяет его на слух. Непустой двоичный результат — лишь структурная проверка; runtimeVerifiedScenarios=0, реальные сервисные вызовы здесь не выполнялись.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.