gifts2017

Аудио проигрыватель на 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 23
.epf 11,20Kb
28.04.16
23
.epf 11,20Kb Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

1. Канат Джумадылов (Fox-trot) 27.04.16 11:04
2. Андрей Лукин (frkbvfnjh) 27.04.16 12:35
Спасибо! Деструктивненькая критика :)
3. Роман Ложкин (webester) 28.04.16 11:01
(1)Да? А когда было? Чота не вижу ничего похожего. Один абадона накатал ocx и на этом все.
4. Вадим Миляев (PrinzOfMunchen) 28.04.16 15:23
(2) frkbvfnjh, зачем для этого нужны внешние компоненты, когда http://v8.1c.ru/o7/201604mobile/index.htm ?
5. Андрей Лукин (frkbvfnjh) 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) 29.04.16 00:10
(5) frkbvfnjh, ну а в действительности, что разве разработчики платформы не правы в том, что возможность воспроизведения аудиофайлов в приложениях требуется крайне редко? По мне так это уже какие-то специфические задачи, все таки платформа предназначена для автоматизации учета, а не для реализации различных мультимедийных приложений.
Brawler; PrinzOfMunchen; +2 Ответить 2
7. Сергей Кудашкин (sikuda) 29.04.16 10:33
Для меня проблема не в том, что разработчики не предоставили Voice API, а в том что современные Web технологии в 1С появляются с опоздание в несколько лет.

А они уже позволяют сделать и звук и видео.
Эмуляции по подходы по поводу звука: http://infostart.ru/public/248770/
Эмуляции по поводу видео: http://infostart.ru/public/235751/
8. Роман Ложкин (webester) 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) 29.04.16 11:23
(6)
По мне так это уже какие-то специфические задачи, все таки платформа предназначена для автоматизации учета, а не для реализации различных мультимедийных приложений

Пользователь взял беспроводной сканер штрихкодов и пошел делать инвентаризацию. Если в процессе работы попался товар с левым штрихкодом, или попался товар, который не должен лежать на этой полке или еще, что то, система должна оповестить пользователя. А то он приходит через полчаса и ему говорят товар с штрихкодом 12345....02 отсутствует в базе. И как узнать что, он в этот момент держал в руках?
10. Андрей Лукин (frkbvfnjh) 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) 29.04.16 21:01
звуковое оповещение однозначно надо. У меня на WMS разработчики столкнулись с этим - я не спец по восьмерке - подключают какое-то расширение платформы, а в результате подвисает. Попробую подсунуть эту возможность.

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

так что надо! однозначно надо!!
13. Канат Джумадылов (Fox-trot) 29.04.16 21:53
(11) v3rter, вариант для твоей капилки в стиле нет
	Попытка
		ф = Новый COMОбъект("Net4Com.Audio");
		ф.PlaySystemSound(12);
	Исключение
	КонецПопытки;
...Показать Скрыть
14. Канат Джумадылов (Fox-trot) 29.04.16 21:56
15. Максим *** (premier) 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) 04.05.16 17:28
Таки боян действительно. Автор, а в тонком или веб-клиентах заработает?
19. Андрей Лукин (frkbvfnjh) 05.05.16 07:32
(18) Yashazz, конкретно эта обработка работает только в обычном приложении. Смысла переписывать под тонкий и веб нет, сам понимаете - боян...
20. Илья Вильчик (TreeDogNight) 21.05.16 11:35
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа