Воспроизведение звука средствами 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!");

См. также

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Обмен между базами 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    3612    dsdred    48    

66

Как готовить и есть массивы

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

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

24.01.2024    5040    YA_418728146    25    

62

Планы обмена VS История данных

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

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    6170    dsdred    36    

110

1С-ная магия

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

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    18204    SeiOkami    46    

116

Дефрагментация и реиндексация после перехода на платформу 8.3.22

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

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    11777    human_new    27    

72

Валидация JSON через XDTO (включая массивы)

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

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8563    YA_418728146    6    

139

Внешние компоненты Native API на языке Rust - Просто!

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

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

20.08.2023    6201    sebekerga    54    

93

Все скопируем и вставим! (Буфер обмена в 1С 8.3.24)

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

Рассмотрим новую возможность 8.3.24 и как её можно эффективно использовать

27.06.2023    15536    SeiOkami    31    

103
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. andrewks 1367 14.03.13 10:22 Сейчас в теме
уже есть публикация по SAPI.SpVoice, и, по-моему, даже не одна
2. zsrg 343 14.03.13 10:38 Сейчас в теме
1, Все верно. Но в этих публикациях ничего не сказано про воспроизведение WAV файлов, только про говорилку...
7. andrewks 1367 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 Сейчас в теме
4. yuraos 991 14.03.13 12:26 Сейчас в теме
Клево!!!

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

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

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

Нет, на нынешней работе не прокатит - тогда придется на все компы колонки покупать...
Фин.директор - удавится.
Он и так всех заставил печатать договора с двух сторон печатать,
не взирая на замяте бумаги и повышенный износ принтеров.
;))))
8. andrewks 1367 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 1419 28.07.17 19:53 Сейчас в теме
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 25 25.06.20 13:18 Сейчас в теме
(26) Спасибо за коммент. Долго понять не мог в чем проблема, и еще столько же бы просидел.
28. sertak 313 05.10.17 09:02 Сейчас в теме
Благодарю, чувак! Сэкономил кучу нервов и времени коллеге. Плюс 1 в карму.
32. shiaju 25 17.11.21 09:57 Сейчас в теме
Спасибо, четко и по делу. Голосовой движок кстати и русский понимает, будем учить ТСД разговаривать с кладовщиком))
Оставьте свое сообщение