Содержание:
1. Стандартный (штатный) вариант использования системы звуковых сигналов
Здравствуйте, коллеги! Частенько бывает, что нужно оповестить пользователя или обратить его внимание на что-либо, используя звуковой сигнал. В данной публикации описано несколько вариантов активации звука в 1С: от стандартного до не самых тривиальных способов.
1. Стандартный (штатный) вариант использования системы звуковых сигналов
Синтаксис: Сигнал()
Данная функция не принимает никакие дополнительные параметры, а просто воспроизводит системные звуковые сигналы программ 1С. При этом характер и длительность звука может также зависеть от программно-аппаратного состава ПК и звуковых установок ОС.
Этот способ недоступен на сервере 1С:Предприятие 8 и не используется в модуле внешнего соединения устройств.
2. Код 1C v 8.3
&НаКлиенте
Процедура Команда(Команда)
Сигнал();
КонецПроцедуры
С подключением внешних компонент в коде 1C v 8.3 (с помощью Speech API) можно реализовать голосовое воспроизведение какого-либо текста (функция «Speak», параметр — строка текста). Сама технология поддерживает 26 языков, включая русский, однако для его поддержки необходимо скачивать и устанавливать специальную библиотеку. На сегодняшний день пока только так.
Код 1C v 8.х
// Способ №1
файл = "C:\1.wav";
Скрипт = Новый COMОбъект("MSScriptControl.ScriptControl");
Скрипт.Language="vbscript";
Скрипт.AddCode("
|Function Main()
|Set oVoice = CreateObject(""SAPI.SpVoice"")
|set oSpFileStream = CreateObject(""SAPI.SpFileStream"")
|oSpFileStream.Open """+файлз+"""
|oVoice.SpeakStream oSpFileStream
|End Function");
Скрипт.Run("Main");
// Способ №2
файлз = "C:\1.wav";
oVoice = Новый COMObject("SAPI.SpVoice");
oSpFileStream = Новый COMObject("SAPI.SpFileStream");
oSpFileStream.Open(файлз);
oVoice.SpeakStream(oSpFileStream);
oSpFileStream.Close();
// Способ №3
файлз = "C:\1.wav";
DynamicWrapper = Новый COMОбъект("DynamicWrapperX");
DynamicWrapper.Register("winmm.dll", "sndPlaySoundA", "i=su");
DynamicWrapper.sndPlaySoundA(файлз, 1);
// Способ №4
// Проигрыватель - это ActiveX компонента "Windows Media Player"
Процедура КнопкаВыполнитьНажатие(Кнопка)
ПроигратьЗвук("D:\Звуки\123.wav");
КонецПроцедуры
// Способ №5
Процедура ПроигратьЗвук(Путь)
Попытка
ЭлементыФормы.Проигрыватель.settings.autostart = Истина;
ЭлементыФормы.Проигрыватель.settings.volume = 100;
ЭлементыФормы.Проигрыватель.URL = Путь;
Исключение
КонецПопытки;
3. Поле HTML документа
И еще один способ — при помощи «bgsound» – html-тега в коде. На форме должен быть элемент «Поле HTML документа». Причем этот элемент должен быть именно виден на форме, т.к. звук не воспроизводится, если скрыть его (Видимость=Ложь).
Сама же реализация выглядит следующим образом:
// Способ №5
// при помощи html-тега bgsound, на форме должен быть элемент Поле HTML документа
&НаКлиенте
Процедура ВоспроизвестиMP3()
мФайл = ПолучитьАдресФайла();
ПолеHTML = "
| <HTML>
| <BODY scroll='no'>
| <BGSOUND id='sound_think' balance=0 volume='-1000'></BGSOUND>
| <div id=paperRaphael></div>
| <script>
| function PlaySound() {
| if (!window.HTMLAudioElement) {
| document.all.sound_think.volume=0;
| document.all.sound_think.src = '"+мФайл+"';
| }
| }
| window.onl oad = function(){
| PlaySound();
| }
| </script>
| </BODY>
| </HTML>";
КонецПроцедуры
&НаСервере
Функция ПолучитьАдресФайла()
Возврат ПоместитьВоВременноеХранилище(Обработки.ЗвукВ1С.ПолучитьМакет("sound"));
КонецФункции
В примере подразумевается, что существует макет с типом двоичные данные, в котором и храниться звуковой файл, а на форме имеется элемент «Поле HTML документа».
Специалист компании «Кодерлайн»
Александр Старосельский