Чтение текста русским голосом в 1С

01.06.16

Разработка - Инструментарий разработчика

В компании есть электронная очередь, работающая на 1С. На монитор в торговом зале выводится в хронологическом порядке список заказов со статусом исполнения. Но клиенты иногда не смотрят на монитор и пропускают свой заказ или идут в кассу, или на склад раньше времени. Чтобы помочь клиентам сориентироваться, было решено озвучивать статусы заказов средствами 1С на русском языке с минимальными вложениями.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Архив с обработкой и всеми необходимыми компонентами
.zip 27,46Mb ver:1
124
124 Скачать (1 SM) Купить за 1 850 руб.
Голосовой движок Милена для SAPI5 (женский голос с отличной интонацией на русском и английском)
.rar 118,16Mb
67
67 Скачать (1 SM) Купить за 1 850 руб.

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

В Windows уже есть встроенный синтезатор речи SAPI 5, но он говорит только на английском, а русскую версию я сразу не нашел, поэтому устанавливаем от того же Microsoft другую версию синтезатора речи.

Microsoft Speech Platform - набор инструментов, позволяющих разработчикам строить решения с распознаванием голоса и перевода голоса в текст. Текущая версия 11.0 платформы предлагает голоса для 26 языков, включая русский.

Для работы синтезатора речи необходимо загрузить и установить следующие компоненты Microsoft Speech Platform:

  • Microsoft Speech Platform - Runtime – серверная часть платформы, предоставляющая API (набор функций) для программ (файл с именем "SpeechPlatformRuntime.msi" для 32-битных и 64-битных версий Windows).
  • Microsoft Speech Platform - Runtime Languages – набор языков для серверной части. Для каждого языка доступны для скачивания модули для распознавания речи (файлы, чьи имена начинаются с "MSSpeech_SR_") и компьютерные голоса (файлы, чьи имена начинаются с "MSSpeech_TTS_").


В списке голосов присутствует и русский голос Elena (файл с именем "MSSpeech_TTS_ru-RU_Elena.msi", размер 6 МБ).

Платформа поддерживает Windows XP, Windows Vista, Windows Server 2008 и Windows 7. На остальных не проверял.

Устанавливаем все эти компоненты из приложенного архива. Открываем 1С, запускаем обработку либо для управляемых, либо для обычных форм. Пишем текст, слушаем звук. Наличие звуковой карты и колонок или наушников обязательно.

UPD: 

Нашел для SAPI5 отличный движок, который умеет говорить на русском и английском, с интонацией и женским голосом, а зовут это чудо Милена. Файл движка очень большой, поэтому выложен отдельно. По качеству гораздо лучше, чем предлагаемый выше Elena.

Прямая ссылка на движок Милена: https://dl.dropboxusercontent.com/u/94504750/Russian_Milena.rar

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


Подключение компоненты синтезатора речи осуществляется через COM объект. 

КомпонентаСинтезатораРечи = Новый COMОбъект("SPEECH.SpVoice");

КомпонентаСинтезатораРечи.Speak("Привет, как дела?");


Дополнение от Kashemir:

Для асинхронного (фонового) выполнения второй параметр нужно установить в 1.

Пример: КомпонентаСинтезатораРечи.Speak("Привет, как дела?", 1 )

Информация о дополнительных параметрах для SAPI https://msdn.microsoft.com/en-us/library/ms720892%28v=vs.85%29.aspx

Озвучка Чтение текста

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

12000 руб.

02.09.2020    170236    940    403    

907

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    13225    100    46    

104

Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    26823    90    48    

134

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    16969    41    15    

75

SALE! %

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

4800 3840 руб.

14.01.2013    190763    1151    0    

918

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

15000 руб.

10.11.2023    11498    40    27    

66

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    954    2    0    

5

Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    104012    244    100    

306
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. jaroslav.h 180 01.06.16 15:21 Сейчас в теме
Цікаво, на майбутнє в закладки поклав, дякую. Хоча би не забути про закладку, якщо наступить такий момент :)
Luksez; Neuroproton; Kashemir; Stim213; cool.vlad4; bulpi; +6 6 Ответить
4. Makushimo 160 02.06.16 06:08 Сейчас в теме
(1) myr4ik07, renmen anpil, ou kominike nan yon lang enkonpreyansib yo ban nou
TreeDogNight; ixijixi; sats2003; Drak0n; nickpugachev; 1vasia1; +6 8 Ответить
8. bulpi 217 03.06.16 14:24 Сейчас в теме
(4)
Ты хвастаешься тем, что не понимаешь чужой язык ?
TreeDogNight; bossikd; Neuroproton; jaroslav.h; IgorS; dj_serega; Рамзес; +7 3 Ответить
7. Sheff 03.06.16 13:26 Сейчас в теме
(1) myr4ik07, мы в хохляндии чтоль?
sys1c; rpgshnik; sats2003; jONES1979; miller-adm; +5 6 Ответить
2. Xershi 1558 01.06.16 15:24 Сейчас в теме
Все довольно просто выходит. Буду иметь в виду, если придется решать вопрос по интеграции.
3. uk09 01.06.16 15:26 Сейчас в теме
"В Windows уже есть встроенный синтезатор речи SAPI 5, но он говорит только на английском, а русской версии я не нашел, поэтому устанавливаем от того же Microsoft другую версию синтезатора речи"

В 2010 году такое делали, пользуясь спичем от Офиса. Голос Звездочета выбрали тогда
5. lustin 02.06.16 08:48 Сейчас в теме
(0) автор - а что за хитрый подход к ссылкам ? почему не прямые ссылки на Microsoft ?
79044970523; 1vasia1; +2 Ответить
6. 79044970523 934 03.06.16 06:47 Сейчас в теме
10. GreenEye 08.06.16 11:03 Сейчас в теме
(5) lustin, Вроде на MS там ссылки
9. todelo@yandex.ru 06.06.16 10:36 Сейчас в теме
Забавная вещь, но больше напоминает показательные возможности 1С, чем практическое применение.
11. nikivr 08.06.16 12:08 Сейчас в теме
Добрый день!

Пожалуйста подскажите начинающему программисту, каким образом из 1С происходит обращение и вызов этого "волшебного" синтезатора речи ?

Спасибо.
12. 79044970523 934 08.06.16 14:47 Сейчас в теме
(11) nikivr, Подключение компоненты синтезатора речи осуществляется через COM объект.
КомпонентаСинтезатораРечи = Новый COMОбъект("SPEECH.SpVoice");
КомпонентаСинтезатораРечи.Speak("Привет, как дела?");
13. Kashemir 352 09.06.16 10:33 Сейчас в теме
Хорошая штука !
p.s. Пробовал обработкой с обычными формами под SAPI5. Сперва пришлось тип реквизита "Голос" ("любаяссылка") табличной части "СписокГолосов" на строку неопределенной длины поменять.

fyi Для асинхронного (фонового) выполнения второй параметр нужно установить в 1 ( https://msdn.microsoft.com/en-us/library/ms720892%28v=vs.85%29.aspx ) . Пример КомпонентаСинтезатораРечи.Speak("Привет, как дела?", 1 )
mai_k; 79044970523; +2 Ответить
14. 79044970523 934 10.06.16 07:06 Сейчас в теме
(13) Kashemir, Учел предложения и внес в публикацию. Спасибо.
Kashemir; +1 Ответить
21. rpgshnik 3819 15.01.19 10:30 Сейчас в теме
(14) асинхронный вызов не получается. Он точно работает из 1С? Windows 10.
15. V0fka 29 09.08.16 11:23 Сейчас в теме
Автор, вы бы не могли выложить несколько строк примера кода (или обработку куда-то в бесплатное место положить) как использовать движок Milena?
17. talych 17 02.05.17 14:33 Сейчас в теме
(15)
&НаКлиенте
Процедура Озвучить(Команда)
	объектСП = Новый COMОбъект("SAPI.SpVoice");
	объектСП.Rate = 1;
	объектСП.Volume = 90;
    	объектСП.Speak("Здравствуй мир!");
КонецПроцедуры
Показать
maksa2005; +1 Ответить
16. TreeDogNight 22 25.09.16 13:03 Сейчас в теме
В тонком и веб-клиенте платформы 8.3.8 будет работать?
18. pvlunegov 158 19.06.17 20:51 Сейчас в теме
Хорошая вещь, все установилось и стало работать с полтычка, спасибо автору!
Голос Милены гораздо приятнее чем Микрософтовской барышни.
19. biformatus 12.12.17 14:30 Сейчас в теме
Ссылка на движок Милена умерла
serjik777; +1 Ответить
20. Vodoley 2 25.04.18 22:09 Сейчас в теме
22. u_n_k_n_o_w_n 35 12.08.19 17:49 Сейчас в теме
Добрый день!

Оригинальное решение! Встроил в свою конфигурацию.

Теперь после выполнения фонового задания, тетка сообщает об этом.

Ранее приходилось постоянно переключаться и смотреть результаты, что постоянно отвлекало.

Однозначно +.
23. user1445247 03.08.20 16:01 Сейчас в теме
Если записанные сообщения, то нагенерить озвучку удобно тут https://zvukogram.com/speech/
24. user1475907 07.03.21 17:28 Сейчас в теме
Лучше голос Milena

объектСП = Новый COMОбъект("SAPI.SpVoice");
объектСП.Voice = объектСП.GetVoices().Item(4);	
объектСП.Rate = 3;
объектСП.Volume = 100;
объектСП.Speak("Альпен Гольд Два шоколада 90г");	

//************
//Тут подбираете Номер Голоса.
объектСП.Voice = объектСП.GetVoices().Item(1);	
объектСП.Voice = объектСП.GetVoices().Item(2);	
объектСП.Voice = объектСП.GetVoices().Item(3);	
объектСП.Voice = объектСП.GetVoices().Item(4);	
объектСП.Voice = объектСП.GetVoices().Item(5);	

Показать
25. user1475907 10.03.21 15:49 Сейчас в теме
Чтобы 1с не тормозила. Лучше запускать отдельно
//Voice.exe НомерГолоса УровеньЗвука Rate ТекстДляГолоса" ,
&НаКлиенте
Процедура Команда2(Команда)
Перем КодВозврата;
Сообщить("Запускаем ...");
ЗапуститьПриложение(
"c:\Voice.exe 3 25 0 345" ,
"", // текущий каталог для запускаемого приложения
Ложь, // дожидаться завершения работы запущенного приложения
КодВозврата // сюда попадёт код, возвращаемый программой
);
Сообщить("Уже тут");
КонецПроцедуры

//********************
Код программы Voice.exe на c#
static void Main()
{
string[] arguments = Environment.GetCommandLineArgs();
SpVoice speech = new SpVoice();
speech.Voice = speech.GetVoices().Item(int.Parse(arguments[1]));
speech.Volume = int.Parse(arguments[2]);
speech.Rate = int.Parse(arguments[3]);
String s = arguments[4];
speech.Speak(s);
}
Прикрепленные файлы:
Voice.exe
27. styleefiop 23.11.22 11:50 Сейчас в теме
(25) А где в программе на c# указание, какой COM-объект используется?
28. user1475907 23.11.22 12:33 Сейчас в теме
(27) Такого у меня нет. Просто через Расширение добавил где надо.
Просто подключаете виртуальный Дисплей покупателя. И ручками прописываете место Где приходят Данные для озвучки.
Лучше к программистам 1с обратиться они знают куда добавить.
Voice.exe 2 55 3 Альпен Гольд Два шоколада 90г 345 222
пароль 1
Прикрепленные файлы:
1.zip
ScreenRecorderProject4.mp4
29. styleefiop 23.11.22 16:53 Сейчас в теме
(28) Так вы только из 1С voice.exe запускаете? И там в 1С прописано Новый COMОбъект("SAPI.SpVoice") ??
Отдельно, без 1С, можете запустить voice.exe, чтоб она проговорила текст?

Или вы вообще не знаете текст своей программы и ее не писали, но на с# текст размещаете?
30. user1475907 24.11.22 09:20 Сейчас в теме
(29)

Процедура ГолосТекстНовый(НомерГолоса, ГромкостьГолоса, СкоростьГолоса, СуммПред, Сумм) Экспорт
	Перем КодВозврата;	
	Если ГромкостьГолоса<>0 Тогда
		Если СуммПред<>Сумм Тогда    
			//Сообщить("***"+Сумм+"***");   
			Сумм = СтрЗаменить(Сумм, Символ(34), "" );
			Попытка              
				ЗапуститьПриложение(
				"C:\BASE\Voice\Voice.exe " + НомерГолоса + " " + ГромкостьГолоса + " " + СкоростьГолоса + " " + Сумм,
				"", // текущий каталог для запускаемого приложения
				Ложь, // дожидаться завершения работы запущенного приложения
				КодВозврата // сюда попадёт код, возвращаемый программой
				);	
			Исключение       
				Сообщить("No VOICE");
			КонецПопытки;
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры



//на кассе Число
ГолосТекстНовый(НомерГолоса, ГромкостьГолоса, СкоростьГолоса, -1, СуммаИтого); 


//на кассе Текст
ГолосТекстНовый(НомерГолоса, ГромкостьГолосаОшибки, 3, -1, "Есть, Маркированный товар");


ТекстОшибки = "Ошибка Маркировки";
ГолосТекстНовый(НомерГолоса, ГромкостьГолоса, 3, -1,  ТекстОшибки);		

Показать
31. styleefiop 25.11.22 13:17 Сейчас в теме
(30) А про Новый COMОбъект("SAPI.SpVoice") в другой процедуре этой 1С программы прописано?
Там как?
26. user1475907 10.03.21 16:29 Сейчас в теме
Пример запуска
Voice.exe 3 25 0 "Альпен Гольд Два шоколада 90г 345"
32. user1475907 26.11.22 01:30 Сейчас в теме
(31) Все прописано и запрограммировано в EXE файле Voice.exe

    using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Net.Security;
using System.Threading.Tasks;
using System.Windows.Forms;
using SpeechLib;

namespace Voice
{
    static class Program
    {
        /// <summary>
        /// Главная точка входа для приложения.
        /// </summary>
        //[STAThread]
        static void Main()
        {
            //Console.WriteLine();
            //  Invoke this sample with an arbitrary set of command line arguments.
            string[] arguments = Environment.GetCommandLineArgs();
            //String ss = "GetCommandLineArgs: {0} " + string.Join(", ", arguments2);
            //MessageBox.Show(ss);
            int myInt = arguments.Length-1;
            //string myString = myInt.ToString();

            // string[] arguments = Environment.GetCommandLineArgs();
            if (myInt > 0)
            {
                if (arguments[1] == "/?") {
                    //MessageBox.Show(myInt.ToString());
                    MessageBox.Show("Voice.exe 2 100 3 Альпен Гольд Два шоколада 90г 345"); 
                }


                try
                {
                    SpVoice speech = new SpVoice();
                    speech.Voice = speech.GetVoices().Item(int.Parse(arguments[1]));
                    speech.Volume = int.Parse(arguments[2]);
                    speech.Rate = int.Parse(arguments[3]);
                    //String s = arguments[4] + " " + arguments[5] +" "+ arguments[6] +" "+ arguments[7] +" "+ arguments[8] +" "+ arguments[9];
                    //String s = arguments[4] + " " + arguments[5] + " " + arguments[6] + " " + arguments[7] + " " + arguments[8] + "  " + arguments[9] + "  " + arguments[10];
                    String s = "";
                    for (int i = 4; i <= myInt; i++)
                    {
                        s = s + "  " + arguments[i];
                    }

                    //MessageBox.Show(s);
                    speech.Speak(s);
                }
                catch (Exception)
                {
                    //MessageBox.Show("000 Voice.exe 2 100 3 Альпен Гольд Два шоколада 90г 345");
                }
            }
            //Application.EnableVisualStyles();
            //Application.SetCompatibleTextRenderingDefault(false);
            //Application.Run(new Form1());
        }
    }
}

    
Показать
33. wolder 133 28.06.23 10:16 Сейчас в теме
Отличная вещь! Спасибо.
Оставьте свое сообщение