Аудио проигрыватель на 1С

Опубликовал Андрей Лукин (frkbvfnjh) в раздел Программирование - Практика программирования

Пример работы с COM-объектом "WMPlayer.OCX"

В публикации представлена обработка, которая демонстрирует работу с COM-объектом "WMPlayer.OCX". встроенным в ОС Windows, и позволяет проигрывать различные медиа-файлы, которые, видимо, поддерживаются Windows Media Player. Обработку тестировал на файлах *.mp3 (в том числе по протоколу http), видео файлы *.mp4 (воспроизводится только звук) и др. медиа-файлы. Обработка будет интересна тем, кто еще не знает, как воспроизвести аудио файл из 1С, и тем, кто хочет узнать, какие еще есть возможности в "WMPlayer.OCX" для работы с аудио файлами. Пример обработки только для обычного приложения, но воспроизвести звуковой файл с помощью данного com-объекта можно и в режиме управляемого приложения. Кратко работа с обработкой и ее внешний вид представлены в анимации ниже: 

WMPlayer

Также, кому интересно, код процедуры воспроизведения аудио файла разными способами: 

Процедура ВоспроизвестиЗвуковойФайл(ИмяФайла) Экспорт
	
	Ошибка = Ложь;
	
	Попытка
		COMОбъект = Новый COMОбъект("WMPlayer.OCX");
		COMОбъект.URL = ИмяФайла; 
		COMОбъект.controls.Play();			
	Исключение
		Ошибка = Истина;
	КонецПопытки;
	
	Если Ошибка Тогда
		Попытка
			COMОбъект = Новый COMОбъект("MediaPlayer.MediaPlayer");
			COMОбъект.Open(ИмяФайла);
			COMОбъект.Play();
			Ошибка = Ложь;
		Исключение
			Ошибка = Истина;
		КонецПопытки;	
	КонецЕсли;
	
	Если Ошибка Тогда
		Попытка
			COMОбъект = Новый COMОбъект("WScript.Shell");
			COMОбъект.Run("wmplayer """ + ИмяФайла + """", 0, Ложь);
			Ошибка = Ложь;
		Исключение
			Ошибка = Истина;
		КонецПопытки;	
	КонецЕсли;			
	
КонецПроцедуры

Каждый может добавить и свой способ.

UPD 2016/04/28
Добавил возможность проигрывания трека циклично (по кругу) средствами WMPlayer.OCX.

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

Наименование Файл Версия Размер
WMPlayer
.epf 11,20Kb
28.04.16
24
.epf 11,20Kb 24 Скачать

См. также

Комментарии
1. Канат Джумадылов (Fox-trot) 51 27.04.16 11:04 Сейчас в теме
2. Андрей Лукин (frkbvfnjh) 203 27.04.16 12:35 Сейчас в теме
Спасибо! Деструктивненькая критика :)
3. Роман Ложкин (webester) 22 28.04.16 11:01 Сейчас в теме
(1)Да? А когда было? Чота не вижу ничего похожего. Один абадона накатал ocx и на этом все.
4. Вадим Миляев (PrinzOfMunchen) 73 28.04.16 15:23 Сейчас в теме
(2) frkbvfnjh, зачем для этого нужны внешние компоненты, когда http://v8.1c.ru/o7/201604mobile/index.htm ?
5. Андрей Лукин (frkbvfnjh) 203 28.04.16 15:47 Сейчас в теме
(4) PrinzOfMunchen, ну во первых это будет только в далеком будущем и во вторых только для мобильной платформы, бьюсь об заклад, что разработчики никогда не добавят эту возможность для настольной платформы. Вот ссылка на ветку официального форума 1С по этому вопросу: https://partners.v8.1c.ru/forum/message/1476252#m_1476252 Если у Вас нет доступа у форуму, то цитирую:
В связи с Обсуждение 1474666 »» подниму тему о воспроизведении звука Обсуждение 827745 »»

Как-то странно получается, что возможности мобильной платформы в этом направлении опережают возможности обычного приложения (в смысле тонкого клиента). В мобильной платформе уже появляется метод ВоспроизвестиЗвуковоеОповещение(), а когда же тонкий клиент получит такую штатную возможность? Есть это в планах?

Оценить: -1 +1 Ответить
0 Сосна Евгений (1Service, Москва) 12.04.2016 15:36 1476208 Отвечает на
Что вам мешает использовать командную строку? Вызывать тот-же fmpeg и проигрывать необходимый звук хоть на linux, хоть на windows.

Оценить: -1 +1 Ответить
0 Буторин Александр (АйТимПро, Москва) 12.04.2016 16:29 1476245 Отвечает на
1. Командная строка позволит только запустить стороннее приложение наличие которого нужно проверить перед вызовом.

2. Необходимо загрузить звуковой файл который нужно воспроизвести

3. Без шаманства невозможно воспроизвести стандартный звук установленный для оповещения в ОС.

Оценить: -1 +1 Ответить
0 Кузин Александр (Дилакс, Волгоград) 12.04.2016 16:41 1476252 Отвечает на
Оно, в общем-то, понятно, что на компьютере большой простор для костылей.
Про fmpeg я не знал. Для себя написал внешнюю NativeAPI компоненту (туда же добавил и паузу, и ещё каких-то хотелок, пока только под windows).

По сути это все, что ему ответили, так что ждите маны небесной и дальше, наивные оптимисты. В другой ветке предложили такие же костыли. К сожалению не смог найти повторно ветку в которой разработчики ответили, что данная возможность (воспроизведение звуковых файлов) необходима слишком редко, что бы включать ее в состав платформы. У разработчиков платформы всегда свои взгляды на то, какие должны быть возможности в платформе, а какие никогда не понадобятся разработчикам прикладных решений...
adhocprog; Synoecium; +2 Ответить 1
6. Алексей Драчков (Bassgood) 569 29.04.16 00:10 Сейчас в теме
(5) frkbvfnjh, ну а в действительности, что разве разработчики платформы не правы в том, что возможность воспроизведения аудиофайлов в приложениях требуется крайне редко? По мне так это уже какие-то специфические задачи, все таки платформа предназначена для автоматизации учета, а не для реализации различных мультимедийных приложений.
Brawler; PrinzOfMunchen; +2 Ответить 2
7. Сергей Кудашкин (sikuda) 485 29.04.16 10:33 Сейчас в теме
Для меня проблема не в том, что разработчики не предоставили Voice API, а в том что современные Web технологии в 1С появляются с опоздание в несколько лет.

А они уже позволяют сделать и звук и видео.
Эмуляции по подходы по поводу звука: http://infostart.ru/public/248770/
Эмуляции по поводу видео: http://infostart.ru/public/235751/
8. Роман Ложкин (webester) 22 29.04.16 11:18 Сейчас в теме
(6)(7)Тут как я понял, что вся фишка, в том, что мы получаем кучу контролов типа ползунка воспроизведения, баланса, громкости и скорости. А если надо просто проиграть звук, то можно и так:
ScrptCtrl = Новый COMОбъект("MSScriptControl.ScriptControl");
    ScrptCtrl.Language = "VBScript";
    Стр = "function PlaySound()
    |Set oVoice = CreateObject(""SAPI.SpVoice"")
    |set oSpFileStream = CreateObject(""SAPI.SpFileStream"")
    |oSpFileStream.Open ""D:\123.wav""
    |oVoice.SpeakStream oSpFileStream
    |oSpFileStream.Close
    |end function";
    
    ScrptCtrl.AddCode(стр);     
    Код = ScrptCtrl.Run("PlaySound");
...Показать Скрыть
9. Роман Ложкин (webester) 22 29.04.16 11:23 Сейчас в теме
(6)
По мне так это уже какие-то специфические задачи, все таки платформа предназначена для автоматизации учета, а не для реализации различных мультимедийных приложений

Пользователь взял беспроводной сканер штрихкодов и пошел делать инвентаризацию. Если в процессе работы попался товар с левым штрихкодом, или попался товар, который не должен лежать на этой полке или еще, что то, система должна оповестить пользователя. А то он приходит через полчаса и ему говорят товар с штрихкодом 12345....02 отсутствует в базе. И как узнать что, он в этот момент держал в руках?
10. Андрей Лукин (frkbvfnjh) 203 29.04.16 14:04 Сейчас в теме
Я тоже считаю, что 1С не помешало бы встроить хотя бы базовую функциональность по работе со звуком, вполне достаточно добавить поддержку воспроизведения wav и mp3
adhocprog; +1 Ответить
11. Роберт В е р т и н с к и й (v3rter) 29.04.16 15:58 Сейчас в теме
Вот она, "базовая функциональность" - стандартный звук системы, он же "зведочка", он же echo ^G в консоли:

				wshShell=new COMobject("wscript.shell");
				wshShell.run("%comspec% /c echo "+Char(7),0,true);


Неоднократно видел.
12. Сергей (Che) Коцюра (CheBurator) 3375 29.04.16 21:01 Сейчас в теме
звуковое оповещение однозначно надо. У меня на WMS разработчики столкнулись с этим - я не спец по восьмерке - подключают какое-то расширение платформы, а в результате подвисает. Попробую подсунуть эту возможность.

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

так что надо! однозначно надо!!
13. Канат Джумадылов (Fox-trot) 51 29.04.16 21:53 Сейчас в теме
(11) v3rter, вариант для твоей капилки в стиле нет
	Попытка
		ф = Новый COMОбъект("Net4Com.Audio");
		ф.PlaySystemSound(12);
	Исключение
	КонецПопытки;
...Показать Скрыть
14. Канат Джумадылов (Fox-trot) 51 29.04.16 21:56 Сейчас в теме
15. Максим *** (premier) 135 30.04.16 12:07 Сейчас в теме
(0)? про возможность использования WMPlayer'a, действительно, уже не раз писали на Инфостарте.
Вот, в этой публикации, например : Интересные возможности 1С, которая была опубликована всего-то на один день раньше Вашей. Правда, скудно довольно описаны возможности этого COM объекта, но... есть, как правило документация к COM-объекту, а если нет, то существует инструментарий, позволяющий эту документацию получить. Например, вот этот: HTML Help COM Assistant.
16. Роберт В е р т и н с к и й (v3rter) 30.04.16 12:43 Сейчас в теме
(13) Fox-trot, Спасибо, попробую.
17. Сан Саныч (apic) 04.05.16 06:11 Сейчас в теме
А в демонстрации мелодия играет интересная! Нашел таки ее по названию файла, зачетная музЫчка...
dj_serega; +1 Ответить
18. Яков Коган (Yashazz) 2036 04.05.16 17:28 Сейчас в теме
Таки боян действительно. Автор, а в тонком или веб-клиентах заработает?
19. Андрей Лукин (frkbvfnjh) 203 05.05.16 07:32 Сейчас в теме
(18) Yashazz, конкретно эта обработка работает только в обычном приложении. Смысла переписывать под тонкий и веб нет, сам понимаете - боян...
20. Илья Вильчик (TreeDogNight) 14 21.05.16 11:35 Сейчас в теме
21. Александр Шпагин (alexandersh) 176 16.04.17 22:37 Сейчас в теме
Ну не знаю баян напишу или нет, но на УФ достаточно просто решается полем HTML следующего содержания:
ПолеHTML = "<html>
|<head>
|<meta http-equiv=""X-UA-Compatible"" content=""IE=edge""/>
|</head>
|<body>
|<audio controls>
|<source src=""" + АдресMP3 + """ type=""audio/mpeg"">
|Your browser does not support the audio element.
|</audio>
|</body>
|</html>";

где АдресMP3 - это адрес временного хранилища, куда положили двоичные данные записи
вот вам и бегунок и полоса прокрутки аудио)
Оставьте свое сообщение