Управление AIMP
Добавлено: Вт июн 23, 2015 12:42 pm
Доброго времени суток, товарищи
Так как в последнее время я слишком много задавал вопросов и создавал тем с различными проблемами, на которые добрые люди отвечали советами, за что им спасибо еще раз, делюсь кое-какими наработками, дабы не только брать, но давать
Может кому-то пригодится.
Так как я уже около 7 лет пользуюсь медиаплеером AIMP, очень не хотелось бы отказываться от него в рамках автоматизации, поэтому начал искать решение. И нашел его, которым собственно и поделюсь с Вами.
1. AIMP
Скачиваем непосредственно AIMP (подойдет версия от 2.60 до последней) и плагин к нему. Плагин имеет формат .exe, поэтому просто устанавливаем его поверх плеера в дочернюю папку Plugins плеера и запускаем AIMP.
Если плеер установлен не на сервере с Алисой, нужно в настройках плагина разрешить подключение по Вашему сетевому адаптеру. Для этого открываем настройки плеера (Ctrl+P) и переходим в "Плагины", там в списке ищем "Control Plugin", нажимаем шестеренку напротив него и выбираем Ваш сетевой адаптер:
Там же настраиваем защиту, если нужно.
Веб-интерфейс по-умолчанию доступен по адресу http://localhost:3333/
Тем, кто не знаком с этим плеером могу посоветовать пройтись по настройкам, там есть много интересных и просто полезных функций. Для себя я настроил автозагрузку, минимизацию при загрузке, отключил информационную ленту и отключил автопроигрывание при включении. Тут уж на вкус и цвет.
2. Система
Дело в том, что, когда AIMP свернут, при его повторном открытии он максимизируется, что лично меня не устраивало, поэтому я использовал PowerShell для проверки статуса. Сам скрипт выглядит до ужаса просто:
Если Вы используете AIMP2 или путь до программы отличается, нужно поправить скрипт. Строковые параметры вывода я добавил для наглядности, в процессе выполнения это никуда не выводится.
Весь этот мини-скрипт я сохранил, как proc.ps1 и сохранил в папке с MD. В дальнейшем он нам понадобится.
Важно! Если Вы будете использовать этот скрипт, нужно в PowerShell разрешить выполнение пользовательских сценариев. Для этого запускаем PS с правами администратора и вводим Set-ExecutionPolicy RemoteSigned, далее подтверждаем нажатием Y.
3. Алиса
Мне нужно было, чтобы Алиса управляла статусом (играть/пауза) и громкостью, реализовал я это используя шаблоны поведения.
Создаем шаблон, в названии пишем что-то вроде "(включи|останови) музыку", в сценарий вставляем код:
Если Вам по коду все понятно, этот абзац можете не читать, в нем я коротко объясню, что мы делаем. С первой строкой все ясно - наш сриптик-проверялка. Далее мы начинаем формировать запрос. Данные передаются методом POST в формате JSON, в $request_data мы записываем то, что будем передавать, в нашем случае - команду "Pause" (почему пауза, а не плей, я поясню ниже). В переменную $json мы кодируем сформированную команду. Далее настраиваем cURL, к адресу веб-интерфейса дописываем /RPC_JSON, на который плагин принимает запросы, а в заголовке передаем тип данных, т.е. application/json. Все остальные опции не должны вызвать у Вас трудностей в понимании.
У меня почему-то не получилось передать запрос Play, хотя передается он так же, по идее. Поэтому я пока решил использовать Pause, тем более, что ведет себя эта команда лучше, чем в VLC. Она запускает воспроизведение в любом случае, вне зависимости от текущего статуса воспроизведения. Таким образом, если AIMP стоит на паузе (Paused) или остановлен (Stopped), воспроизведение начнется. В VLC же при статусе Stopped команда Pause не сработает.
Далее разбираемся с громкостью. Создаем еще один шаблон с именем что-то вроде "установить громкость на (.+)". В код пишем:
Как видите, отличий практически нет. Просто мы перехватываем введенное (сказанное) числовое значение от 0 до 100 и передаем его дополнительным массивом params.
Можно сделать Алису еще интеллектуальней и добавить проверку условия, наподобие:
По мне, так фраза "установить громкость на минимум" звучит лучше, чем "установить громкость на ноль", но тут опять же, фломастеры разные как на вкус, так и на цвет 
На этом с настройкой системы все. Теперь Алиса может управлять AIMP'ом. Лично мне этого функционала пока хватит, но, если вдруг кому-то нужно, вот список доступных параметров:
Их просто присваиваем переменной и выполняем по аналогии с примерами выше.
Из минусов для себя пока выделил:
- невозможность выбора плейлиста средствами самого плеера (возможно просто еще не нашел эту функцию, особо не копался, в выходные буду разбираться). В следствие этого играет дефолтный плейлист, в который предварительно нужно закинуть песни. Конечно можно и не самим, а средствами php.
- не смог заставить работать веб-интерфейс при запуске аимпа как службы, но для меня это не критично, поставить в автозагрузку не проблема
P.S. за код и вариант исполнения прошу сильно не пинать, если что не так, php только начал изучать, а скрипт на PowerShell имеет место быть в моей конфигурации просто потому что я не нашел более простого (для себя) способа. Те варианты реализации проверки процесса на php, что я нашел в интернете были либо слишком сложными для меня в плане понимания, либо слишком "топорными". В любом случае, это лишь обмен опытом, буду рад дополнениям и поправкам, если что-то вдруг не так.
Благодарю за внимание.

Так как в последнее время я слишком много задавал вопросов и создавал тем с различными проблемами, на которые добрые люди отвечали советами, за что им спасибо еще раз, делюсь кое-какими наработками, дабы не только брать, но давать

Так как я уже около 7 лет пользуюсь медиаплеером AIMP, очень не хотелось бы отказываться от него в рамках автоматизации, поэтому начал искать решение. И нашел его, которым собственно и поделюсь с Вами.
1. AIMP
Скачиваем непосредственно AIMP (подойдет версия от 2.60 до последней) и плагин к нему. Плагин имеет формат .exe, поэтому просто устанавливаем его поверх плеера в дочернюю папку Plugins плеера и запускаем AIMP.
Если плеер установлен не на сервере с Алисой, нужно в настройках плагина разрешить подключение по Вашему сетевому адаптеру. Для этого открываем настройки плеера (Ctrl+P) и переходим в "Плагины", там в списке ищем "Control Plugin", нажимаем шестеренку напротив него и выбираем Ваш сетевой адаптер:
СпойлерПоказать

Веб-интерфейс по-умолчанию доступен по адресу http://localhost:3333/
Тем, кто не знаком с этим плеером могу посоветовать пройтись по настройкам, там есть много интересных и просто полезных функций. Для себя я настроил автозагрузку, минимизацию при загрузке, отключил информационную ленту и отключил автопроигрывание при включении. Тут уж на вкус и цвет.
2. Система
Дело в том, что, когда AIMP свернут, при его повторном открытии он максимизируется, что лично меня не устраивало, поэтому я использовал PowerShell для проверки статуса. Сам скрипт выглядит до ужаса просто:
Код: Выделить всё
$ActiveAimp = Get-Process | where {$_.name -match "AIMP3"}
if($ActiveAimp -eq $null)
{
Write-Host "Процесс не запущен"
&"C:\Program Files\AIMP3\AIMP3.exe"
}
else
{
Write-Host "Процесс запущен"
}
Весь этот мини-скрипт я сохранил, как proc.ps1 и сохранил в папке с MD. В дальнейшем он нам понадобится.
Важно! Если Вы будете использовать этот скрипт, нужно в PowerShell разрешить выполнение пользовательских сценариев. Для этого запускаем PS с правами администратора и вводим Set-ExecutionPolicy RemoteSigned, далее подтверждаем нажатием Y.
3. Алиса
Мне нужно было, чтобы Алиса управляла статусом (играть/пауза) и громкостью, реализовал я это используя шаблоны поведения.
Создаем шаблон, в названии пишем что-то вроде "(включи|останови) музыку", в сценарий вставляем код:
Код: Выделить всё
//запускаем скрипт, который проверит, запущен ли AIMP и запустит его, если нет
safe_exec("powershell -Command C:\_majordomo\htdocs\progs\proc.ps1< NUL");
$request_data = array('method' => 'Pause'); //нужный нам метод
$json = json_encode($request_data);
//Настраиваем cURL
$ch = curl_init('http://localhost:3333/RPC_JSON'); //адрес веб-интерфейса
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); //метод запроса
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); //тип запроса - json
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//Выполняем запрос
$response = curl_exec($ch);
У меня почему-то не получилось передать запрос Play, хотя передается он так же, по идее. Поэтому я пока решил использовать Pause, тем более, что ведет себя эта команда лучше, чем в VLC. Она запускает воспроизведение в любом случае, вне зависимости от текущего статуса воспроизведения. Таким образом, если AIMP стоит на паузе (Paused) или остановлен (Stopped), воспроизведение начнется. В VLC же при статусе Stopped команда Pause не сработает.
Далее разбираемся с громкостью. Создаем еще один шаблон с именем что-то вроде "установить громкость на (.+)". В код пишем:
Код: Выделить всё
$volume = $matches[1];
$request_data = array('method' => 'VolumeLevel', 'params' => array('level' => $volume)); //нужный нам метод
$json = json_encode($request_data);
//Настраиваем cURL
$ch = curl_init('http://localhost:3333/RPC_JSON'); //адрес веб-интерфейса
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); //метод запроса
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); //тип запроса - json
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//Выполняем запрос
$response = curl_exec($ch);
Можно сделать Алису еще интеллектуальней и добавить проверку условия, наподобие:
Код: Выделить всё
if ($volume == 'минимум') {
$volume = 0;
} elseif ($volume == 'максиммум') {
$volume = 100;
}

На этом с настройкой системы все. Теперь Алиса может управлять AIMP'ом. Лично мне этого функционала пока хватит, но, если вдруг кому-то нужно, вот список доступных параметров:
Код: Выделить всё
array('method' => 'Mute', 'params' => array('mute_on' => true)); //выключить звук
array('method' => 'Mute', 'params' => array('mute_on' => false)); //включить звук
array('method' => 'Stop'); //остановить воспроизведение
array('method' => 'PlayPrevious'); //предыдущий трек
array('method' => 'PlayNext'); //следующий трек
array('method' => 'ShufflePlaybackMode', 'params' => array('shuffle_on' => true)); //включить случайное воспроизведение
array('method' => 'ShufflePlaybackMode', 'params' => array('shuffle_on' => false)); //отключить случайное воспроизведение
array('method' => 'RepeatPlaybackMode', 'params' => array('repeat_on' => true)); //включить повтор трека
array('method' => 'RepeatPlaybackMode', 'params' => array('repeat_on' => false)); //отключить повтор трека
Из минусов для себя пока выделил:
- невозможность выбора плейлиста средствами самого плеера (возможно просто еще не нашел эту функцию, особо не копался, в выходные буду разбираться). В следствие этого играет дефолтный плейлист, в который предварительно нужно закинуть песни. Конечно можно и не самим, а средствами php.
- не смог заставить работать веб-интерфейс при запуске аимпа как службы, но для меня это не критично, поставить в автозагрузку не проблема
P.S. за код и вариант исполнения прошу сильно не пинать, если что не так, php только начал изучать, а скрипт на PowerShell имеет место быть в моей конфигурации просто потому что я не нашел более простого (для себя) способа. Те варианты реализации проверки процесса на php, что я нашел в интернете были либо слишком сложными для меня в плане понимания, либо слишком "топорными". В любом случае, это лишь обмен опытом, буду рад дополнениям и поправкам, если что-то вдруг не так.
Благодарю за внимание.