Управление AIMP

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

Модератор: immortal

Ответить
Mescaline
Сообщения: 29
Зарегистрирован: Вт июн 09, 2015 6:03 pm
Благодарил (а): 4 раза
Поблагодарили: 15 раз

Управление AIMP

Сообщение Mescaline » Вт июн 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 для проверки статуса. Сам скрипт выглядит до ужаса просто:

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

$ActiveAimp = Get-Process | where {$_.name -match "AIMP3"}
if($ActiveAimp -eq $null)
{
Write-Host "Процесс не запущен"
&"C:\Program Files\AIMP3\AIMP3.exe"
}
else
{
Write-Host "Процесс запущен"
} 
Если Вы используете AIMP2 или путь до программы отличается, нужно поправить скрипт. Строковые параметры вывода я добавил для наглядности, в процессе выполнения это никуда не выводится.
Весь этот мини-скрипт я сохранил, как 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);
Если Вам по коду все понятно, этот абзац можете не читать, в нем я коротко объясню, что мы делаем. С первой строкой все ясно - наш сриптик-проверялка. Далее мы начинаем формировать запрос. Данные передаются методом POST в формате JSON, в $request_data мы записываем то, что будем передавать, в нашем случае - команду "Pause" (почему пауза, а не плей, я поясню ниже). В переменную $json мы кодируем сформированную команду. Далее настраиваем cURL, к адресу веб-интерфейса дописываем /RPC_JSON, на который плагин принимает запросы, а в заголовке передаем тип данных, т.е. application/json. Все остальные опции не должны вызвать у Вас трудностей в понимании.

У меня почему-то не получилось передать запрос 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);
Как видите, отличий практически нет. Просто мы перехватываем введенное (сказанное) числовое значение от 0 до 100 и передаем его дополнительным массивом params.
Можно сделать Алису еще интеллектуальней и добавить проверку условия, наподобие:

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

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, что я нашел в интернете были либо слишком сложными для меня в плане понимания, либо слишком "топорными". В любом случае, это лишь обмен опытом, буду рад дополнениям и поправкам, если что-то вдруг не так.
Благодарю за внимание.
За это сообщение автора Mescaline поблагодарили (всего 4):
Blacking (Пт июн 26, 2015 6:38 am) • coolermister (Вт окт 06, 2015 9:28 am) • stema (Вс янв 17, 2016 11:32 pm) • Nyh (Пн апр 25, 2016 10:56 am)
Рейтинг: 4.65%
BadMent
Сообщения: 1
Зарегистрирован: Пт ноя 10, 2017 10:55 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Управление AIMP

Сообщение BadMent » Пт ноя 10, 2017 10:58 pm

Раньше не работал со скриптами, объясните куда все эти скрипты вписывать? Прошу прощения за невежество.
Ответить