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

01.06.16

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

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

Скачать файлы

Наименование Файл Версия Размер
Архив с обработкой и всеми необходимыми компонентами
.zip 27,46Mb
122
.zip 1 27,46Mb 122 Скачать
Голосовой движок Милена для SAPI5 (женский голос с отличной интонацией на русском и английском)
.rar 118,16Mb
66
.rar 118,16Mb 66 Скачать

Здесь я привожу пример обработки, в которой доступно показано, как можно сделать озвучку любого текста из 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

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

См. также

SALE! 20%

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

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

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    122069    670    389    

712

SALE! 25%

Infostart PrintWizard

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

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

18000 15300 руб.

06.10.2023    7272    21    6    

39

SALE! 20%

Infostart УДиФ: Управление данными и формами

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

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

10000 8000 руб.

10.11.2023    3514    11    1    

33

SALE! 30%

PowerTools

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

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

3600 2520 руб.

14.01.2013    177730    1073    0    

849

Многопоточность. Универсальный «Менеджер потоков» 2.1

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

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

5000 руб.

07.02.2018    99342    239    97    

296

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18104    6    8    

39

1С HTML Шаблоны / HTML Templates

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

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28102    3    10    

15

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23598    15    15    

32
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
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 215 03.06.16 14:24 Сейчас в теме
(4)
Ты хвастаешься тем, что не понимаешь чужой язык ?
TreeDogNight; dendzu; 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 1474 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 929 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 929 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 929 10.06.16 07:06 Сейчас в теме
(13) Kashemir, Учел предложения и внес в публикацию. Спасибо.
Kashemir; +1 Ответить
21. rpgshnik 3631 15.01.19 10:30 Сейчас в теме
(14) асинхронный вызов не получается. Он точно работает из 1С? Windows 10.
15. V0fka 28 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 157 19.06.17 20:51 Сейчас в теме
Хорошая вещь, все установилось и стало работать с полтычка, спасибо автору!
Голос Милены гораздо приятнее чем Микрософтовской барышни.
19. biformatus 12.12.17 14:30 Сейчас в теме
Ссылка на движок Милена умерла
serjik777; +1 Ответить
20. Vodoley 1 25.04.18 22:09 Сейчас в теме
22. u_n_k_n_o_w_n 34 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 129 28.06.23 10:16 Сейчас в теме
Отличная вещь! Спасибо.
Оставьте свое сообщение