Отличный код! Мягко можно регулировать громкость от степени вращения по оси.
Ну хоть кому-то понадобилось,не зря выложил
Да я сам парился как бы сделать реактивность и "мягкое" изменение громкости. Ты подсказал методику. Спасибо! К стати ты выложил общий принцип и код. А так лучше создать устройство Rotate, связанный обьект rotate ну и методы со свойствами.
Я сделал код так. Тут правка на изменение системной громкости ну и еще видно что исправил с привязкой к устройству
$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));
с реактивностью тоже хотел добавить, ну что-то попробовал, как то оно не очень определяет и сделал просто на угол без ускорения
О! Залепил так
$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.'%');
Офигенно чувствует и рулит.
Только это прокатит конечно же для линуховой версии. Амиксер же.
Поправка...
с safe_exec('amixer sset PCM,0 '.$volumeNew.'%') такая ерунда выползает, что мало не покажется )))
Все-же лучше управлять через колметод
В конце использовать callMethod('ThisComputer.VolumeLevelChanged',array('VALUE'=>$matches)); чтоб не было вылетов, либо добавить назначение переменной $volumeNew в условиях, например:
else if ($volumeNew < 0){
setGlobal('ThisComputer.MasterVolumeLevel',0);
$volumeNew=0; //!!!!!!!!!!!!
}
Please login to leave comments. Join us!