Воспроизведение звука средствами Windows

14.03.13

Разработка - Механизмы платформы 1С

Еще один способ воспроизводить звуки из 1С, средствами Windows без использования внешних программ.

Всем привет! Давно ничего не писал. Хочу поделиться найденным, на просторах интернета, способом воспроизведения звука. Но обо всем по порядку.

Я часто делаю воспроизведение звука в 1С, когда стоит вопрос о сканировании штрих-кодов, чтобы подтвердить факт добавления товара в документ, или сообщить об ошибке. Эта необходимость возникла при большом потоке товаров и работе в терминальном режиме со сканерами через эмуляцию клавиатуры. Дело в том, что из-за проблем с задержками, например WiFi, сканированный код может доходить с задержками до двух секунд, и драйвер некорректно распознает код. Если никак не сообщать об этом менеджеру, то в потоке товаров они не замечают, что товар не был добавлен в документ.

Собственно никогда проблем, с воспроизведением звуков, у меня не возникало. Я использовал встроенный в Windows плеер mplay32.exe и скрипты WScript. Однако в новых версиях Windows этого плеера нет, копирование его ни к чему хорошему не приводит, приходится полностью отключать защиту на уровне пользователей и другие сложности с ошибкой 0x80070002 при работе в терминале на Windows Server 2008 R2.
Были опробованы варианты с проигрыванием через ActiveX или в поле HTML документа. С ними проблема в том, что звук не воспроизводится, если форма с полем не видна. А мне надо звук воспроизводить фоном. Вставлять ActiveX на каждую форму работающую с штрих-кодом не вариант.

Наконец, решение было найдено, простое и 100% работающее. Проверено на Windows 7/2008R2:

oVoice = Новый COMObject("SAPI.SpVoice");

oSpFileStream = Новый COMObject("SAPI.SpFileStream");
oSpFileStream.Open(ПутьДоФайла);
oVoice.SpeakStream(oSpFileStream);
oSpFileStream.Close();

Для 1С 7-ки:

oVoice = СоздатьОбъект("SAPI.SpVoice");
oSpFileStream = СоздатьОбъект("SAPI.SpFileStream");
oSpFileStream.Open(ПутьДоФайла);
oVoice.SpeakStream(oSpFileStream);
oSpFileStream.Close();

Visual Basic (Excel, Word и т.п.)

Dim oVoice As Object
Dim oSpFileStream As Object
Set oVoice = CreateObject("SAPI.SpVoice")
Set oSpFileStream = CreateObject("SAPI.SpFileStream")
oSpFileStream.Open ПутьДоФайла
oVoice.SpeakStream oSpFileStream
oSpFileStream.Close

Проверял на WAV файлах, на счет mp3 сказать не могу, не тестировал.

Сам интерфейс используется для проговаривания строк, поэтому можно пользоваться и основной его функцией:

oVoice.Speak("Hello!");

См. также

Динамическое обновление - это зло?

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Копнем глубже в тему "Что же такое динамическое обновление" и почему оно может привести к проблемам. И может ли?

09.05.2022    27413    Infostart    83    

243

Совместимость работы со строками. Жизнь до 8.3.6 и после

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Немного о совместимости со старыми версиям платформы 1С в работе со строками.

21.02.2020    8401    Infostart    25    

69

Эволюция расширения конфигурации

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

С каждым днем всё больше возможностей появляется в расширении конфигурации, но не все до сих пор работают даже на платформе 8.3.6! Давайте окунемся в историю появления и эволюции расширения конфигурации, чтобы знать и понимать, когда можно применить тот или иной функционал!

06.02.2020    26774    Xershi    51    

223

Как работают управляемые формы и тонкий клиент 1С – взгляд "из-под капота"

Механизмы платформы 1С Управляемые формы Бесплатно (free)

Переход на управляемые формы перевернул процесс разработки на 1С, заставив программистов менять привычные подходы к описанию логики работы интерфейса. Руководитель компании «Цифровой Кот» Юрий Лазаренко в своем докладе на конференции Infostart Event 2019 Inception рассказал о том, как устроены управляемые формы и как правильно работать с тонким клиентом платформы 1С:Предприятие.

23.12.2019    25143    TitanLuchs    23    

100

30 задач. Странных и не очень

Математика и алгоритмы Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

30 задач на знание языка программирования 1С и некоторого поведения платформы. Маленьких. Странных и не очень.

02.12.2019    50764    Infostart    65    

164

Фишечки-рюшечки

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

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

06.11.2019    11204    mpeg1989    95    

66

ЧтениеДанных и ЗаписьДанных. Работа со строками

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Использование потоков и двоичных данных для работы со строками.

04.10.2019    23851    Yashazz    16    

76
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. andrewks 1370 14.03.13 10:22 Сейчас в теме
уже есть публикация по SAPI.SpVoice, и, по-моему, даже не одна
+
2. zsrg 343 14.03.13 10:38 Сейчас в теме
1, Все верно. Но в этих публикациях ничего не сказано про воспроизведение WAV файлов, только про говорилку...
+
7. andrewks 1370 14.03.13 12:35 Сейчас в теме
(2) zsrg, ну дык есть же оф.описание объектной модели http://msdn.microsoft.com/en-us/library/ms722561%28v=vs.85%29.aspx
+
12. Milokko 14.03.13 14:22 Сейчас в теме
(2) zsrg, Шпарит WAV-ки как миленький
+
3. orefkov 1152 14.03.13 12:21 Сейчас в теме
Все таки "Новый COMObject" и "без ActiveX" - взаимоисключающие параграфы.
Я бы "без ActiveX" убрал из названия публикации.
А то такое чувство, что повелся на "без голоданий и диет", но понял, что чудес не бывает.
cool.vlad4; +1
9. zsrg 343 14.03.13 12:36 Сейчас в теме
(3) orefkov, Новый COMObject прямого отношения к ActiveX не имеет, но раз смущает, то уберу :)
+
11. cool.vlad4 2 14.03.13 13:58 Сейчас в теме
(9)как бы имеет. ActiveX суть ком сервер, просто реализующий в довесок пару дополнительных интерфейсов.
+
24. sikuda 673 09.01.14 09:48 Сейчас в теме
(3)orefkov,
Без ActiveX можно через html bgsound http://infostart.ru/public/248770/
+
4. yuraos 991 14.03.13 12:26 Сейчас в теме
Клево!!!

Сам интерфейс используется для проговаривания строк, поэтому можно пользоваться и основной его функцией:
oVoice.Speak("Hello!");

Что напишешь - то комп и скажет????
+
5. andrewks 1370 14.03.13 12:30 Сейчас в теме
(4) yuraos, а что в этом сверхординарного? ещё под DOS, помню, была прога, принимающая с ком.строки текст, и озвучивающая его на PC Speaker :-)
+
6. yuraos 991 14.03.13 12:33 Сейчас в теме
(4)
А русский язык понимает? И в частности не нормативную лексику???

А то я нарулю в 1С-ке всяких проверок,
если юзер чё не то нажмет -
- она его тремя буквами и тремя этажами!!!!!

Нет, на нынешней работе не прокатит - тогда придется на все компы колонки покупать...
Фин.директор - удавится.
Он и так всех заставил печатать договора с двух сторон печатать,
не взирая на замяте бумаги и повышенный износ принтеров.
;))))
+
8. andrewks 1370 14.03.13 12:36 Сейчас в теме
(6) yuraos,
А русский язык понимает? И в частности не нормативную лексику???

она и английский-то понимает с трудом, куда уж русский :-)
+
10. zsrg 343 14.03.13 12:38 Сейчас в теме
(6) yuraos, у меня русский не держит, на Windows Server, только по английски. Но у меня просто русский MUI установлен. Возможно на полной русской версии и заговорит по русски. Должен, по идее, так как говорилка встроена для поддержки людей с ограниченными возможностями.
+
18. AlexO 135 26.03.13 13:17 Сейчас в теме
(4) yuraos,
Что напишешь - то комп и скажет????

А то! Сейчас такие студенты пошли, что ого-го! Что напишут на русском - то комп и выполняет.
Без дураков.
(9) zsrg,
Новый COMObject прямого отношения к ActiveX не имеет

Браво!
БравО!!!
А к чему COM, реализованный в 1С, имеет отношение?
Автор, а что "опустил", что этот "SAPI.SpVoice" должен быть установлен прежде всего?
И, наконец, "решение простое и 100% работающее" - это воспроизведение звуковых файлов посредством открытия через 1С.
И как в анекдоте с динозавром: "50 на 50 - либо заиграет (если есть драйвера и звуковуха), либо нет" :)
+
13. Dnki 4 20.03.13 20:51 Сейчас в теме
Проверил. WAV воспроизводит. MP3 - нет. Что-то смешное говорит.
+
14. zsrg 343 21.03.13 07:37 Сейчас в теме
Не удивительно. WAV родной форматы винды, а mp3 уже расширение кодека для мультимедиа плеера.
+
15. Кошки рулят 25.03.13 11:45 Сейчас в теме
Так чисто для прикола, наверное можно поюзать, но в реальных базах врядли.
Говорилку пользователи отключают или сразу или максимум через день - мешает работать.
Звуковые файлы можно проигрывать
ЗапуститьПриложение(ПутьДоФайла)
и не надо думать какой виндовс, какой формат файла ...
А вот подать сигнал (не работающая почему-то нигде и никогда Сигнал()) я предпочитаю баяном. Например:
Баян=CreateObject("DynamicWrapper");
Баян.Register("KERNEL32.DLL", "Beep", "i=ll", "f=s", "r=l");
Баян.Beep(330*4,300);
Баян.Beep(494*4,200);

Работает тоже в любом виндовсе, звучать будет через все, что сможет, даже через динамик системного блока ...
Не полифония, конечно, но можно довольно затейливые рулады воспроизвести ...
Lapitskiy; +1
16. Aleks1973 25.03.13 11:52 Сейчас в теме
(15) {Форма.Форма.Форма(3,6)}: Процедура или функция с указанным именем не определена (CreateObject)
Баян=<<?>>CreateObject("DynamicWrapper"); (Проверка: Толстый клиент (обычное приложение))
+
17. Кошки рулят 25.03.13 11:54 Сейчас в теме
(16) Aleks1973, Забудь про снеговик ...
+
29. Lapitskiy 1057 12.08.18 19:18 Сейчас в теме
(15)
Для восьмерки:

DW = Новый COMОбъект("DynamicWrapper");
DW.Register("KERNEL32.DLL", "Beep", "i=ll", "f=s", "r=l");

DW.Beep(330*4,300);
DW.Beep(494*4,200);
+
19. Vovus 3 12.09.13 17:25 Сейчас в теме
На сервере Управляемые Формы не воспроизводить звук Выдает ошибку что oSpFileStream.Open не определено
+
20. zsrg 343 12.09.13 20:32 Сейчас в теме
Все правильно и не должно воспроизводить. Звук должен воспроизводиться на клиенте, а не на сервере!
+
21. Vovus 3 15.09.13 16:56 Сейчас в теме
(20) zsrg,
Скрипт = Новый COMОбъект("MSScriptControl.ScriptControl");
Скрипт.Language="vbscript";
Скрипт.AddCode("
|Function Main()
|Set oVoice = CreateObject(""SAPI.SpVoice"")
|set oSpFileStream = CreateObject(""SAPI.SpFileStream"")
|oSpFileStream.Open ""D:\Muz\1.wav""
|oVoice.SpeakStream oSpFileStream
|End Function");
Скрипт.Run("Main");
Так работает на сервере но вопрос как записать в место жесткой привязки к пути значение например реквизита или константы!?
+
22. zsrg 343 15.09.13 17:59 Сейчас в теме
Если я правильно понял:

|oSpFileStream.Open """+ПутьДоФайла+"""
+
23. androidT1C 76 25.10.13 09:50 Сейчас в теме
Отлично!

Хоть и выдает ошибку

Ошибка при вызове метода контекста (SpeakStream): Произошла исключительная ситуация (0x80070057)
oVoice.SpeakStream(oSpFileStream);
по причине:
Произошла исключительная ситуация (0x80070057)

но звук воспроизводит!

Но есть одно "но". Как сделать, чтобы 1С не ждала окончания воспроизведения звука, а продолжала работать?

Как, например, через WshShell.Run(,0,0) это замутить?
SITR-utyos; +1
27. SITR-utyos 1420 28.07.17 19:53 Сейчас в теме
(23) Хороший вопрос! - я сделал так: http://infostart.ru/public/655524/
+
25. Serge_ASB 29.10.14 12:01 Сейчас в теме
внёс
oVoice = Новый COMObject("SAPI.SpVoice");

oSpFileStream = Новый COMObject("SAPI.SpFileStream");
oSpFileStream.Open(ПутьДоФайла);
oVoice.SpeakStream(oSpFileStream);
oSpFileStream.Close();

в процедуру.
Вызов ее, как написано выше, производится только &НаКлиенте
Почему-то вызов этой процедуры (&НаКлиенте Посигналить();) не производится: программа не находит ее. А из других клиентских - пожалуйста.
+
26. websamson 306 12.05.17 08:32 Сейчас в теме
Столкнулся с тем, что при выполнении кода выходила ошибка 0x80045003
Решение: формат звукового файла .wav обязательно должен быть mono, а не stereo.
Конвертировали с помощью плагина AIMP.
bashhhh; TrbVLAD; +2
30. artjurMV 07.11.19 11:55 Сейчас в теме
(26) Не факт. Стерео тоже может быть, но надо формат семплов устанавливать в 16 бит
+
31. bashhhh 26 25.06.20 13:18 Сейчас в теме
(26) Спасибо за коммент. Долго понять не мог в чем проблема, и еще столько же бы просидел.
+
28. sertak 314 05.10.17 09:02 Сейчас в теме
Благодарю, чувак! Сэкономил кучу нервов и времени коллеге. Плюс 1 в карму.
+
32. shiaju 25 17.11.21 09:57 Сейчас в теме
Спасибо, четко и по делу. Голосовой движок кстати и русский понимает, будем учить ТСД разговаривать с кладовщиком))
+
Оставьте свое сообщение