СредстваМультимедиа.ВоспроизвестиТекст

Методы · PlayText

Воспроизвести заданный текст с помощью синтезатора речи на устройстве. Если стороннее приложение воспроизводит звук или выполняется метод ВоспроизвестиАудио, воспроизведение звука будет остановлено, после чего будет воспроизведен текст. Если во время произношения текста на мобильное приложение приходит системное уведомление, или с помощью метода ВоспроизвестиЗвуковоеОповещение инициируется звуковое оповещение, то мобильная платформа должна приостановить воспроизведение текста и продолжить его после завершения звука уведомления, с позиции, на которой воспроизведение было остановлено. Данный метод поддерживается не на всех устройствах. Для проверки совместимости устройства, перед вызовом метода следует использовать метод ПоддерживаетсяАудиозапись.

Синтаксис

ВоспроизвестиТекст(<Текст>, <Язык>, <Скорость>, <Тембр>, <ОбработчикОстановкиВоспроизведения>, <РазрешитьФоновое>)
Полное описание, параметры и ограничения

СредстваМультимедиа.ВоспроизвестиТекст (MultimediaTools.PlayText)

СредстваМультимедиа (MultimediaTools)

ВоспроизвестиТекст (PlayText)

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

Синтаксис:
ВоспроизвестиТекст(<Текст>, <Язык>, <Скорость>, <Тембр>, <ОбработчикОстановкиВоспроизведения>, <РазрешитьФоновое>)
Параметры:

<Текст> (обязательный)
Тип: Строка.
Текст, который требуется воспроизвести.

<Язык> (необязательный)
Тип: Строка, ОбъектМетаданных: Язык.
Идентификатор языка согласно стандарту BCP 47 (например, "en-US" для английского или "ru-RU" для русского). Если не указан, то проверяется возможность произнести текст на текущем языке операционной системы. Если идентификатор указан с ошибкой, либо выбранный язык не поддерживается в системе, будет сгенерировано исключение.

<Скорость> (необязательный)
Тип: Число.
Скорость воспроизведения текста в интервале от 0.5 до 2.0.
Значение по умолчанию: 1.0.

<Тембр> (необязательный)
Тип: Число.
Смещение тембра голоса в интервале от 0.5 до 2.0.
Значение по умолчанию: 1.0.

<ОбработчикОстановкиВоспроизведения> (необязательный)
Тип: ОписаниеОповещения.
Содержит описание процедуры, которая будет вызвана при остановке или прерывании воспроизведения текста со следующими параметрами:
<Дополнительно> - значение, которое было указано при создании объекта ОписаниеОповещения.

<РазрешитьФоновое> (необязательный)
Тип: Булево.
Разрешает воспроизведение текста в фоне.
Значение по умолчанию: Ложь.
Описание:

Воспроизвести заданный текст с помощью синтезатора речи на устройстве.
Если стороннее приложение воспроизводит звук или выполняется метод ВоспроизвестиАудио, воспроизведение звука будет остановлено, после чего будет воспроизведен текст.
Если во время произношения текста на мобильное приложение приходит системное уведомление, или с помощью метода ВоспроизвестиЗвуковоеОповещение инициируется звуковое оповещение, то мобильная платформа должна приостановить воспроизведение текста и продолжить его после завершения звука уведомления, с позиции, на которой воспроизведение было остановлено.
Данный метод поддерживается не на всех устройствах. Для проверки совместимости устройства, перед вызовом метода следует использовать метод ПоддерживаетсяАудиозапись.

Доступность:

Мобильный клиент, мобильное приложение (клиент).

Примечание:
Если в момент вызова метода, уже воспроизводится текст, воспроизведение будет прервано и начнется воспроизведение нового текста. Обработчик завершения для предыдущего воспроизведения текста вызван не будет.
См. также:
СредстваМультимедиа, метод ПоддерживаетсяАудиозапись

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

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

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

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

Мобильный текст в речь: голосовой пакет, остановка и краткий сигнал

Полный модуль своего автономного мобильного Пульта: мобильный текст в речь: голосовой пакет, остановка и краткий сигнал. Подготовка, действительные источники данных, отмена, границы контекста и контроль результата описаны отдельно.

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

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

Подготовка

  1. Создать НОВУЮ отдельную конфигурацию УчебноеМультимедиа85 для автономного мобильного приложения8.5.1.1343; совместимость Не использовать. Не рабочую базу. Для опытов нужен свой Android/iOS и соответствующая мобильная платформа, не Windows desktop и не подключенный мобильный клиент.

  2. Конфигуратор → Обработки → УчебноеМультимедиа85 → Формы → Пульт: управляемая форма. Вставить ВЕСЬ модуль только одного урока. Его ПриОткрытии и ПередЗакрытием назначить событиям формы через конструктор. ПриОткрытии имеет Отказ; ПередЗакрытием — четыре аргумента Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка.

  3. Реквизиты формы: Согласие — Булево, начальное значение Ложь; Итог — Строка неограниченной длины, многострочное поле только просмотра. Для камеры/документов дополнительно Предпросмотр — Картинка и поле картинки с этим путем к данным.

  4. Создать команды Произнести, ОстановитьТекст, КороткийСигнал, действия с точно теми же именами и кнопки. У поля Согласие назначить событие ПриИзменении обработчику СогласиеПриИзменении.

  5. Для штрихкодового урока добавить РазрешенныйКод — Строка длины13 и поле ввода; до открытия сканера вписать цифры своей реальной упаковки. Для остальных уроков реквизит не нужен.

  6. Сохранить свою конфигурацию, проверить и обновить собственную базу (F7). Включить требуемую функциональность мобильного приложения — камеру/микрофон для выбранного урока — и развернуть только собственный учебный пакет на своем устройстве обычным для вашей мобильной платформы способом. Здесь сборка пакета, установка и F7 не выполнялись.

  7. На устройстве самостоятельно дать нужные разрешения ОС только перед своим опытом. Согласие на форме не заменяет разрешение ОС. Снимать только свою бумагу/упаковку, записывать свою короткую фразу; не чужие лица, разговоры, документы или экран.

  8. Весь модуль содержит проверенные ветви препроцессора: мобильные API только в МобильноеПриложениеКлиент, имя базы — только в МобильноеПриложениеСервер. Проверка базы локальная для автономного приложения, не сетевой сервер. API также существует у мобильного клиента, но этот конкретный стенд намеренно автономный.

  9. runtimeVerifiedScenarios=0. Проверена только установленная справка и исходный HTML/код. Камера, микрофон, голос, устройство, 1С и ОС-разрешения здесь не запускались; новых резервных копий не создано.

#Если МобильноеПриложениеКлиент Тогда
Перем СвойЗапуск, СвояОперация, СвояГотовность;

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    СвойЗапуск = Неопределено;
    СвояОперация = "";
    СвояГотовность = Ложь;
    Согласие = Ложь;
    Итог = "Установите согласие только перед собственным опытом";
    Попытка
        ПроверитьСвойМобильныйСтендНаСервере();
        Если ТипЗнч(СредстваМультимедиа) <> Тип("СредстваМультимедиа") Тогда
            ВызватьИсключение "Нужен реальный глобальный мобильный объект мультимедиа";
        КонецЕсли;
        СвояГотовность = Истина;
    Исключение
        Отказ = Истина;
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры

&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
    СтандартнаяОбработка = Истина;
    Если СвояОперация <> "" Тогда
        Отказ = Истина;
        ТекстПредупреждения = "Сначала завершите только свой опыт: " + СвояОперация;
        Если Не ЗавершениеРаботы Тогда
            Сообщить(ТекстПредупреждения);
        КонецЕсли;
        Возврат;
    КонецЕсли;
    СвояГотовность = Ложь;
    СвойЗапуск = Неопределено;
КонецПроцедуры

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

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

&НаКлиенте
Функция ЭтоСвойОпыт(Запуск)
    Возврат СвояГотовность И СвойЗапуск <> Неопределено И Запуск = СвойЗапуск;
КонецФункции

&НаКлиенте
Процедура ЗавершитьСвойОпыт(Запуск)
    Если ЭтоСвойОпыт(Запуск) Тогда
        СвойЗапуск = Неопределено;
        СвояОперация = "";
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура Произнести(Команда)
    Запуск = НачатьСвойОпыт("Произношение текста");
    Попытка
        Если Не СредстваМультимедиа.ПоддерживаетсяВоспроизведениеТекста("ru-RU") Тогда
            ВызватьИсключение "На устройстве нет голосового пакета ru-RU; это не проверка микрофона";
        КонецЕсли;
        Оповещение = Новый ОписаниеОповещения("СвойТекстОстановлен", ЭтаФорма, Запуск);
        СредстваМультимедиа.ВоспроизвестиТекст("Учебный заказ: одна книга, сумма семьсот пятьдесят рублей", "ru-RU", 1, 1, Оповещение, Ложь);
    Исключение
        ЗавершитьСвойОпыт(Запуск);
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура СогласиеПриИзменении(Элемент)
    Если Не Согласие И СвояОперация = "Произношение текста" Тогда
        ОстановитьТекст(Неопределено);
    КонецЕсли;
КонецПроцедуры
#Иначе
&НаКлиенте
Процедура ПриОткрытии(Отказ)
    Отказ = Истина;
    Сообщить("Откройте свою отдельную автономную мобильную базу УчебноеМультимедиа85, не desktop или подключенный мобильный клиент");
КонецПроцедуры

&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
    Отказ = Ложь;
    СтандартнаяОбработка = Истина;
КонецПроцедуры

&НаКлиенте
Процедура СогласиеПриИзменении(Элемент)
    Согласие = Ложь;
КонецПроцедуры

&НаКлиенте
Процедура Произнести(Команда)
    ВызватьИсключение "Этот собственный урок только для автономного мобильного приложения";
КонецПроцедуры

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

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

&НаСервереБезКонтекста
Процедура ПроверитьСвойМобильныйСтендНаСервере()
#Если МобильноеПриложениеСервер Тогда
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Собственный опыт не запускается внутри чужой транзакции";
    КонецЕсли;
#Иначе
    ВызватьИсключение "Этот стенд требует локального сервера автономного мобильного приложения";
#КонецЕсли
КонецПроцедуры

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

  1. Проверить именно ПоддерживаетсяВоспроизведениеТекста("ru-RU"): нужна установленная речь для этого языка. Наличие микрофона не означает наличие русского голосового пакета.

  2. Произнести собственный фиксированный текст с языкомru-RU, скоростью1, тембром1 и РазрешитьФоновое=Ложь. Значения находятся в допустимом диапазоне0.5..2; личные данные или сетевой текст не используются.

  3. Публичный callback текста имеет один аргумент Дополнительно, не позицию и не результат аудиозаписи. В нем проверяется GUID текущего собственного произношения.

  4. Нажать КороткийСигнал: используется типизированное системное значение ПоУмолчанию и Вибрация=Ложь. Для него не нужен несуществующий файл в assets. При речи сигнал может временно приостановить произношение, которое затем продолжится.

  5. ОстановитьТекст завершает только свой зарегистрированный сеанс. Сам callback не позволяет отличить окончание от прерывания, поэтому разрешение на следующий опыт и закрытие снимает явная команда остановки.

  6. Не запускать второе произношение до завершения первого. При повторном вызове native может не вызвать callback для прошлого текста; отсутствие callback не считается успешным завершением.

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

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

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

  2. Без согласия новая операция должна отказать. Отмена должна оставлять отмену, а ошибка запуска — ошибку; второе нажатие не должно подменять активный GUID собственного опыта.

  3. Проверьте отдельный отрицательный опыт по шагам урока: отсутствие голосового пакета, отмену захвата, чужой код или низкое качество/лишнюю страницу. Не подставляйте фиктивный объект или ожидаемые байты вместо результата платформы.

  4. После освобождения собственного сеанса форму можно закрыть. При собственном активном сеансе ПередЗакрытием должен предложить сначала завершить его; поздний callback другого GUID не должен изменить Итог.

  5. runtimeVerifiedScenarios=0. Все аппаратные результаты, ошибки и проверки здесь — условия будущей ручной приемки, а не выполненный тест1С.

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

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

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

  1. СредстваМультимедиа — глобальное readonly-свойство мобильного контекста. Не создавать этот объект через Новый, не передавать неизвестный ИсходныйОбъект и не переносить вызовы в серверный/desktop-код.

  2. Этот полный стенд рассчитан на автономное мобильное приложение. Серверная проверка имени конфигурации работает локально на устройстве; Метаданные.Имя не читается в мобильной клиентской ветви.

  3. Поддерживается... — проверка возможностей, не разрешений ОС, занятости камеры/микрофона, качества изображения или слышимости звука. Отказ ОС и отмена пользователя требуют отдельной проверки.

  4. Имена публичных callback связаны с настоящими ОписаниеОповещения и проверяются по GUID. Для аудио, текста, страницы, завершения серии и штрихкода сигнатуры различны; их нельзя заменять одним универсальным обработчиком.

  5. Код явно не сохраняет медиа, не вызывает HTTP, почту, печать или бизнес-запись. Платформа/ОС могут использовать свой временный кэш; очистка переменной не доказывает удаление этого кэша. Размер32МиБ проверяется после получения байтов и не обещает предотвратить их первоначальную аллокацию.

  6. Нормированная оценка сканирования не является OCR, распознанным текстом или гарантией юридической пригодности документа. Строгая политика>=7 каждого показателя — решение этого собственного примера.

  7. Callback остановки звука/текста не всегда означает окончательное завершение: уведомление может временно прервать звук с последующим возобновлением. В этих уроках владелец сеанса снимается явной собственной командой остановки, не предположением о причине callback.

  8. ПередЗакрытием имеет четыре аргумента. При ЗавершениеРаботы=Истина нельзя открывать окна или вызывать сервер: заполняется ТекстПредупреждения. Пользователь или ОС могут принудительно завершить приложение; отказ от обычного закрытия не гарантирует запрет этого. Всегда явно остановите свой микрофон/звук до выхода.

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

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

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

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

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