Остановить PlaySound()

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

serge_wddm
Сообщения: 9
Зарегистрирован: Вс июн 26, 2016 9:58 am
Благодарил (а): 8 раз
Поблагодарили: 2 раза

Остановить PlaySound()

Сообщение serge_wddm » Вс мар 12, 2017 7:34 pm

Подскажите пожалуйста, возможно ли досрочно остановить воспроизведение звукового файла запущенного командой PlaySound('filename.mp3')?
Суть проблемы вот в чём. Имеется звуковой файл сирены длительностью 2 мин. Допустим, сработал алгоритм охраны и запустил файл сирены командой PlaySound('filename.mp3'). Иногда, при проверке и тестировании алгоритма я досрочно, не дожидаясь 2 мин, хочу отключить сирену.
Подскажите, возможно ли это? PlaySound, похоже, запускает каждый файл в отдельном потоке.
Спасибо!

MDM на OrangePi (Linux).
Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 375 раз

Re: Остановить PlaySound()

Сообщение Bagir » Вс мар 12, 2017 8:24 pm

По простому остановить не получится. Да и не хорошо это в PlaySound двух минутный файл заряжать. Не для этого инструмент задуман. Лучше создавайте событие, в цикле проверяйте его и брякайте короткими кричалками, пока событие присутствует. Можно таймеры использовать. Не зная полностью задачу и структуру вашего МД, трудно что то посоветовать. Вариантов масса.
За это сообщение автора Bagir поблагодарил:
serge_wddm (Пн мар 13, 2017 3:13 pm)
Рейтинг: 1.16%
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
serge_wddm
Сообщения: 9
Зарегистрирован: Вс июн 26, 2016 9:58 am
Благодарил (а): 8 раз
Поблагодарили: 2 раза

Re: Остановить PlaySound()

Сообщение serge_wddm » Пн мар 13, 2017 3:29 pm

Bagir писал(а):По простому остановить не получится. Да и не хорошо это в PlaySound двух минутный файл заряжать. Не для этого инструмент задуман. Лучше создавайте событие, в цикле проверяйте его и брякайте короткими кричалками, пока событие присутствует. Можно таймеры использовать. Не зная полностью задачу и структуру вашего МД, трудно что то посоветовать. Вариантов масса.
Спасибо за направление. Логика моего алгоритма проста. Нужно орать сирену пока свойство объекта AlarmStatus = 1. Если AlarmStatus = 0, то сирена не должна работать.
Можно создать метод (CheckAlarmStatus), который будет периодически сам себя вызывать по таймеру через 5 с (SetTimeOut("CheckAlarmTimer","cm('object.CheckAlarmStatus')", 5);).
В данном методе будем проверять нужное свойство (object.AlarmStatus = 1) и включать сирену (PlaySound) на 5 секунд. Если AlarmStatus сбросится в 0, то не будем делать PlaySound и создавать новый таймер на 5с.
Возможно существует более элегантное решение.
А события чем отличаются от методов? Как и когда их применять? Ткните, плиз, где посмотреть примеры.
Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 76 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Остановить PlaySound()

Сообщение sergejey » Вт мар 14, 2017 3:07 pm

Ещё, как вариант, запускать через медиа-плеер

Код: Выделить всё

$media_file='..'; // путь к файлу сирены
$url=BASE_URL.ROOTHTML.'popup/app_player.html?ajax=1';
$url.="&command=refresh&play=".urlencode($media_file);
$result=getURL($url, 0); 
остановка проигрывания:

Код: Выделить всё

$url=BASE_URL.ROOTHTML.'popup/app_player.html?ajax=1';
$url.="&command=stop";
$result=getURL($url, 0); 
За это сообщение автора sergejey поблагодарили (всего 2):
serge_wddm (Вс мар 19, 2017 12:13 pm) • Samir77 (Пт окт 11, 2019 1:05 pm)
Рейтинг: 2.33%

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Denis_k
Сообщения: 587
Зарегистрирован: Сб мар 19, 2016 7:24 pm
Благодарил (а): 299 раз
Поблагодарили: 27 раз

Re: Остановить PlaySound()

Сообщение Denis_k » Вт мар 14, 2017 3:47 pm

sergejey писал(а):....

остановка проигрывания:

Код: Выделить всё

$url=BASE_URL.ROOTHTML.'popup/app_player.html?ajax=1';
$url.="&command=stop";
$result=getURL($url, 0);
это код ведь должен останавливать воспроизведение радио 101?))
что должно быть вместо?

Код: Выделить всё

BASE_URL.ROOTHTML
MD на raspberry pi3
Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 375 раз

Re: Остановить PlaySound()

Сообщение Bagir » Вт мар 14, 2017 11:35 pm

Вариант с медиа безусловно интересен. И если подобное уже реализовано в системе, то и вопроса наверное бы не возникло. Играем вместо любимой музыки жуткую кричалку и останавливаем по команде в момент сброса тревоги. Это просто идеально.
Но если Медиа не настроено, то задача может вызвать ряд дальнейших затруднений.
Вообщем вариант с медиа интереснее, но как альтернатива предложенный пяти минутный таймер. Чтобы отменить тревогу можно просто грохнуть таймер, и сирена быстро заглохнет. Крик сирены при этом можно красиво дополнить вставками чтения текста.
Экспериментируйте, вы на верном пути.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 375 раз

Re: Остановить PlaySound()

Сообщение Bagir » Вт мар 14, 2017 11:47 pm

serge_wddm писал(а):А события чем отличаются от методов? Как и когда их применять?
События я с горяча предложил. Events() Мне показалось это интересная штука. Я даже придумал как это сипользовать в разных ситуациях. Суть в том, что из любого кода можно создать событие. Это как таймер, только почти без срока завершения. В дальнейшем можно проверять события, и при их наличии принимать соответствующие решения. Событие, это как общее свойство, в котором по имени мы ищем интересующее нас.
Сергей пишет, что это мертвое дело. Я до сих пор использую Events, но ни что не мешает обойтись без этого.
Как итог, используйте медиа или таймер. Мне травятся оба эти способа.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
serge_wddm
Сообщения: 9
Зарегистрирован: Вс июн 26, 2016 9:58 am
Благодарил (а): 8 раз
Поблагодарили: 2 раза

Re: Остановить PlaySound()

Сообщение serge_wddm » Вс мар 19, 2017 12:12 pm

Спасибо, Сергей. Вариант с медиаплеером рабочий. Только остановка проигрывания заработала по команде close.

остановка проигрывания:

Код: Выделить всё

$url=BASE_URL.ROOTHTML.'popup/app_player.html?ajax=1';
$url.="&command=CLOSE";
$result=getURL($url, 0);
Вариант с периодическим вызовом PlaySound и таймерами тоже рабочий, однако непрерывный звук из коротких звуковых фрагментов получить невозможно, т.к. таймеры работают не очень точно. получается звук сирены-пауза-звук сирены-пауза. Также, как я понимаю, нагрузка на систему большая из-за постоянных проверок условия AlarmStatus и установки таймера каждые 5 секунд.
Denis_k
Сообщения: 587
Зарегистрирован: Сб мар 19, 2016 7:24 pm
Благодарил (а): 299 раз
Поблагодарили: 27 раз

Re: Остановить PlaySound()

Сообщение Denis_k » Вс мар 19, 2017 1:46 pm

как остановить проигрывание радио на rp2?
пытался так:

Код: Выделить всё

getURL("http://localhost/rc/?command=vlc_pause",0);
getURL('http://192.168.1.100/popup/app_player.html?ajax=1&command=CLOSE',0);
getURL('http://192.168.1.100/popup/app_player.html?ajax=1&command=CLOSE',0);
getURL("http://localhost:8080/requests/status.xml?command=pl_stop",0);
getURL(‘http://localhost/popup/app_player.html?ajax=1&command=stop',0); 
http://localhost:8080/requests/status.xml?command=pl_stop
getURL("http://localhost/rc/?command=pl_stop",0);
getURL("http://192.168.1.100/rc/?command=close",0);
http://192.168.1.100/rc/app_player.html?ajax=1&command=close
 
на данный момент это самое сложное с чем пришлось столкнуться при использовании МД
MD на raspberry pi3
Denis_k
Сообщения: 587
Зарегистрирован: Сб мар 19, 2016 7:24 pm
Благодарил (а): 299 раз
Поблагодарили: 27 раз

Re: Остановить PlaySound()

Сообщение Denis_k » Вс мар 26, 2017 4:36 pm

неужели никто не знает как остановить воспроизведение?
какой командой выключить mpd?
ЗЫ. получается, что это самый нерешаемый вопрос за несколько месяцев использования МД
MD на raspberry pi3
Ответить