<<< Назад

Громкость через Xiaomi Aqara Magic Cube


Ron (2018-12-02 11:01:09):

Отличный код! Мягко можно регулировать громкость от степени вращения по оси.

(0)
 
okbit.ru (2018-12-02 11:41:23):

Ну хоть кому-то понадобилось,не зря выложил

(1)
 
Ron (2018-12-02 12:45:35):

Да я сам парился как бы сделать реактивность и "мягкое" изменение громкости. Ты подсказал методику. Спасибо! К стати ты выложил общий принцип и код. А так лучше создать устройство Rotate, связанный обьект rotate ну и методы со свойствами.

(0)
 
Ron (2018-12-02 13:23:54):

Я сделал код так. Тут правка на изменение системной громкости ну и еще видно что исправил с привязкой к устройству

$ugol=getGlobal('Rotate.ugolh');
$volumeLevel=getGlobal('ThisComputer.MasterVolumeLevel');
$corrective=1.8;//подстройка под себя насколько чувствительно будет

$volumeNew = (int)($volumeLevel + round($ugol/$corrective));
if ($volumeNew == 0) {
if ($ugol < 0 ) $volumeNew = -1;
else $volumeNew = 1;
}

if($volumeNew < 100 && $volumeNew > 0 ) {
setGlobal('ThisComputer.MasterVolumeLevel',$volumeNew);
}

else if ($volumeNew < 0){
setGlobal('ThisComputer.MasterVolumeLevel',0);
}

else if ($volumeNew > 100){
setGlobal('ThisComputer.MasterVolumeLevel',100);
}

callMethod('ThisComputer.MasterVolumeLevel',array('VALUE'=>$volumeNew));

(0)
 
okbit.ru (2018-12-02 15:00:51):

с реактивностью тоже хотел добавить, ну что-то попробовал, как то оно не очень определяет и сделал просто на угол без ускорения

(1)
 
Ron (2018-12-02 16:01:07):

О! Залепил так
$ugol=getGlobal('XiRotate.ugolh');
$volumeLevel=getGlobal('ThisComputer.MasterVolumeLevel');
$corrective=0.8;//подстройка под себя насколько чувствительно будет

$volumeNew = (int)($volumeLevel + round($ugol/$corrective));
if ($volumeNew == 0) {
if ($ugol < 0 ) $volumeNew = -1;
else $volumeNew = 1;
}

if($volumeNew < 100 && $volumeNew > 0 ) {
setGlobal('ThisComputer.MasterVolumeLevel',$volumeNew);
}

else if ($volumeNew < 0){
setGlobal('ThisComputer.MasterVolumeLevel',0);
}

else if ($volumeNew > 100){
setGlobal('ThisComputer.MasterVolumeLevel',100);
}
safe_exec('amixer sset PCM,0 '.$volumeNew.'%');

Офигенно чувствует и рулит.

(0)
 
Ron (2018-12-02 16:02:47):

Только это прокатит конечно же для линуховой версии. Амиксер же.

(0)
 
Ron (2018-12-02 22:23:17):

Поправка...
с safe_exec('amixer sset PCM,0 '.$volumeNew.'%') такая ерунда выползает, что мало не покажется )))
Все-же лучше управлять через колметод

(0)
 
klv666 (2020-01-10 06:42:00):

В конце использовать callMethod('ThisComputer.VolumeLevelChanged',array('VALUE'=>$matches)); чтоб не было вылетов, либо добавить назначение переменной $volumeNew в условиях, например:
else if ($volumeNew < 0){
setGlobal('ThisComputer.MasterVolumeLevel',0);
$volumeNew=0; //!!!!!!!!!!!!
}

(1)
 

Пожалуйста, войдите в систему, чтобы добавлять комментарии Присоединиться!