Скрипты для foo_uie_wsh_panel_mod

Список разделов Аудиоплеер foobar2000 Секреты foobar2000

Описание: Кнопочки, конфиги, секреты, советы.

Сообщение #2561 vladj » 20.05.2019, 00:52

Ну в принципе на вики новостях "2 мая 2019
"2 мая 2019: Last.fm заблокирован в России Музыкальный сайт Last.fm стал недоступен в России", но...лично я слушаю инет радио каждый день и перебоев работы с Last.fm в Био панели не было. Это что за провайдер у тебя ? У меня ростелеком-Пермь.
HTPC Termaltake, eGlobal i5-7200, Asrock Beebox J3160, Onkyo 525E, цап SMSL, фронт Yamaha 8900.
vladj M
Гуру
Аватара
Откуда: Пермский край
Репутация: 373
С нами: 9 лет 6 месяцев

Сообщение #2562 romarioxxx » 20.05.2019, 20:41

vladj, доброго вечера, а на какой сборке гоняешь?
romarioxxx
Новичок
Репутация: 0
С нами: 2 года 3 месяца

Сообщение #2563 vladj » 21.05.2019, 13:30

От версии сборки вообще работа скрипта не зависит, работает на всех (их более 20 разных).
HTPC Termaltake, eGlobal i5-7200, Asrock Beebox J3160, Onkyo 525E, цап SMSL, фронт Yamaha 8900.
vladj M
Гуру
Аватара
Откуда: Пермский край
Репутация: 373
С нами: 9 лет 6 месяцев

Сообщение #2564 kgena_ua » 14.06.2019, 17:52

"Biography.www.last.fm"
@version "14062019"


тест.

- новое меню с возможностью настройки главного мню (пункт "Main menu setting");
- скрыть, отобразить дополнительную информацию - кнопка между заголовком-2 и текстом (при наведении отображается если доп.информация существует) - двойной левый клик;
- режим "lock" - заголовок-1 - двойной левый клик (совсем не тестировал).

перед установкой очистить переменные - меню свойства.

Biography.www.last.fm 14062019.rar
(28.18 КБ) Скачиваний: 48
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 55
Откуда: Украина, Днепр
Репутация: 449
С нами: 6 лет 4 месяца

Сообщение #2565 MC Web » 15.06.2019, 12:00

Немного изменил обозначение режима "lock" (правда нужен доп. шрифт):

Изображение
MC Web
Гуру
Аватара
Репутация: 169
С нами: 6 лет

Сообщение #2566 kgena_ua » 16.06.2019, 14:39

MC Web, приветствую. Да, дополнительный шрифт для "lock" нужен и будет. Настройки, думаю, будут в "Свойствах", а не через меню.
Замок на скрине картинка или нарисовали скриптом.

В личке у меня спрашивали о скрипте для "Peak meter".
Есть такой. Только для WSH.
Код: Выделить всё
// ==PREPROCESSOR==
// @name "Peak meter"
// @author "kgena_ua"
// @version "06082017"
// ==/PREPROCESSOR==

function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }   

var font = gdi.Font("Arial",9,1);
var font2 = gdi.Font("Arial",11,0);   

DT_CENTER = 0x00000001;   
DT_VCENTER = 0x00000004;   
DT_SINGLELINE = 0x00000020;   
DT_WORD_ELLIPSIS = 0x00040000;

var ww = window.Width, wh = window.Height;
var on_mouse = false;
var color = [];
var combinedColor1 = [];
var combinedColor2 = [];
var separator;
var offset, w, offset_l, w_l;
var pos_x = 0, pos_y = 0;;
var VUMOffset_t, t_height, t_width;
var wheel = false;
var tooltip_timer;

ColorTypeCUI = {
    text: 0,
    selection_text: 1,
    inactive_selection_text: 2,   
    background: 3,   
    selection_background: 4,   
    inactive_selection_background: 5,   
    active_item_frame: 6   
}   

function get_color(){   
   bgcolor = window.GetColorCUI(ColorTypeCUI.background);
   c1 = window.GetColorCUI(ColorTypeCUI.text);
    c2 = window.GetColorCUI(ColorTypeCUI.inactive_selection_text);   
    c3 = window.GetColorCUI(ColorTypeCUI.inactive_selection_background);   
    color1 = [ c3, c1 ];   
    color2 = [ c2, c3 ];   
   window.Repaint();
}   

get_color();

function on_colors_changed(){
    get_color();
}

var dll;
var is_dll = utils.CheckComponent("\\user-components\\foo_vis_vumeter\\foo_vis_vumeter");
if (is_dll) {dll = false} else {dll = true};

if (dll) {VUMeter = new ActiveXObject("VUMeter")};   
if (dll) {VUMeter.RegisterWindow(window.ID)}; // do not use for transparent mode
   
function ToDB(Level){   
    return Math.round(2000*Math.log(Level)/Math.LN10)/100;   
}

var db = [-25,-22.5,-20,-17.5,-15,-12.5,-10,-7.5,-5,-4.5,-4,-3.5,-3,-2.5,-2,-1.5,-1,-0.5,0,0.5,1,1.5,2,2.5,3,3.5,4];   
var db_l = [-92.5,-90,-87.5,-85,-82.5,-80,-77.5,-75,-72.5,-70,-67.5,-65,-62.5,-60,-57.5,-55,-52.5,-50,-47.5,-45,-42.5,-40,-37.5,-35,-32.5,-30,-27.5]; 

for (var i = 0; i <= db.length; i++) {   
    if (db[i] == 0) {separator = i};
}
   
var points = db.length;
var s1 = separator;
var s2 = points - s1;
var points_l = db_l.length;

for(var j = 0; j < s1; j++) {
    combinedColor1.push(combineColors(color1[0], color1[1], j / s1));
}
for(var j = 0; j < s2; j++) {
    combinedColor2.push(combineColors(color2[0], color2[1], j / s2));
}

color = combinedColor1.concat(combinedColor2);

var col = 0;
var ytext = 5;
var h = 2;
var hM = 5;   

var yL = ytext + 15;
var yLM = yL + h + 4;

var hM_l = 1;
var yLM_l = yLM + hM + 4;
var yRM_l = yLM_l + hM_l + 1;

var yRM = yRM_l + hM_l + 4;
var yR = yRM + hM + 4; 

var wL = 0, wR = 0;   
var xLanim = 0, xRanim = 0;
var xL = 0, xR = 0;   

var xLManim = 0, xRManim = 0;
var xLM = 0, xRM = 0;   
   
var kLM = 0, kRM = 0;
var kLM2 = 0, kRM2 = 0;   
   
var xLManim2 = 0, xRManim2 = 0;

var kL = 0, kR = 0;
var wLanim = 0, wRanim = 0;

var oldwL = 0, oldwR = 0;

function on_paint(gr) {   
    gr.FillSolidRect(0, 0, ww, wh, bgcolor);
   
    if (panel_on && dll) {
        L = VUMeter.LeftLevel;   
        R = VUMeter.RightLevel;   
        LM = VUMeter.LeftPeak;   
        RM = VUMeter.RightPeak;   
    }

    if (panel_on && fb.IsPlaying && dll) {
        for (var i = 0; i <= points_l; i++) {   
            if (ToDB(LM) > db_l[i]) gr.FillSolidRect(col + i * offset_l, yLM_l, w_l, hM_l, color[0]);   
            if (ToDB(RM) > db_l[i]) gr.FillSolidRect(col + i * offset_l, yRM_l, w_l, hM_l, color[0]);
        }

        for (var i = 0; i <= points; i++) {   
   
            if ((ToDB(L) > db[i] && ToDB(L) < db[i+1])) {wL = i * offset + offset / Math.abs(db[i + 1]-db[i]) * Math.abs(ToDB(L) - db[i]) }   
            if (ToDB(L) > db[i]) gr.FillSolidRect(col, yL, wL, h, color[1]);   

            if ((ToDB(R) > db[i] && ToDB(R) < db[i+1])) {wR = i * offset + offset / Math.abs(db[i + 1]-db[i]) * Math.abs(ToDB(R) - db[i]) }   
            if (ToDB(R) > db[i]) gr.FillSolidRect(col, yR, wR, h, color[1]);   

            if (xLanim <= wL) {xLanim = wL; kL = 0; wLanim = wL - oldwL < 1 ? wLanim : wL - oldwL + 10} else {oldwL = wL};
            if (ToDB(L) > db[i]) gr.FillSolidRect(col + xLanim + 2, yL, wLanim <= 0 ? 2 : wLanim, h, color[1]);   

            if (xRanim <= wR) {xRanim = wR; kR = 0; wRanim = wR - oldwR < 1 ? wRanim : wR - oldwR + 10} else {oldwR = wR};
            if (ToDB(R) > db[i]) gr.FillSolidRect(col + xRanim + 2, yR, wRanim <= 0 ? 2 : wRanim, h, color[1]);   

            var overL = col + xLanim + 2 + wLanim - ww - 10;
            if (overL > 0) gr.FillSolidRect(ww - overL, yL - h - 1, ww - 10, h, color[10]);

            var overR = col + xRanim + 2 + wRanim - ww - 10;
            if (overR > 0) gr.FillSolidRect(ww - overR, yR + h + 1, ww - 10, h, color[10]);


            if (ToDB(LM) > db[i]) gr.FillSolidRect(col + i * offset, yLM, w, hM, color[i]);   
            if (ToDB(RM) > db[i]) gr.FillSolidRect(col + i * offset, yRM, w, hM, color[i]);                       

            if (ToDB(LM) > db[i] && ToDB(LM) < db[i+1]) {xLM = i * offset};   
            if (xLManim <= xLM) {xLManim = xLM; xLManim2 = xLM; kLM = 0; kLM2 = 0};
            if (ToDB(LM) > db[i]) gr.FillSolidRect(col + xLManim + offset, yLM, w * 0.8, hM , color[Math.round(xLManim/offset)]);   

            if (ToDB(RM) > db[i] && ToDB(RM) < db[i+1]) {xRM = i * offset};   
            if (xRManim <= xRM) {xRManim = xRM; xRManim2 = xRM; kRM = 0; kRM2 = 0};
            if (ToDB(RM) > db[i]) gr.FillSolidRect(col + xRManim + offset, yRM, w * 0.8, hM, color[Math.round(xRManim/offset)]);   

            if (ToDB(LM) > db[i]) gr.FillSolidRect(col + xLManim2 + offset + w, yLM, w * 0.3, hM, color[Math.round(xLManim/offset)]);     
            if (ToDB(RM) > db[i]) gr.FillSolidRect(col + xRManim2 + offset + w, yRM, w * 0.3, hM, color[Math.round(xRManim/offset)]);   
        }
        anim();
    }

    for (var i = 0; i <= points; i++) {
        var text_w = gr.CalcTextWidth(db[i], font);   
        if (i > 2) gr.GdiDrawText( db[i]% 2 == 0 ? db[i] : "" , font, color1[0], col + offset * i - text_w / 2, ytext, ww, wh);
    }
   
    gr.GdiDrawText( "db", font, color1[0], col, ytext, ww, wh);
   
    VUMOffset_t = Math.round(VUMeter.Offset) + " db";
    t_height = gr.CalcTextHeight(VUMOffset_t, font2) + 2;
    t_width = gr.CalcTextWidth(VUMOffset_t, font2) + 10;
    wheel && gr.FillSolidRect(pos_x - t_width, pos_y - t_height + 0, t_width, t_height, bgcolor);
    wheel && gr.GdiDrawText(VUMOffset_t, font2, color2[0], pos_x - t_width, pos_y - t_height + 0, t_width, t_height, DT_SINGLELINE | DT_CENTER | DT_VCENTER | DT_WORD_ELLIPSIS );
}   

function anim() {   
    kLM = kLM + Math.pow(0.3, 2); 
    kRM = kRM + Math.pow(0.3, 2); 
    xLManim = xLManim - kLM;           
    xRManim = xRManim - kRM; 
       
    kLM2 = kLM2 + Math.pow(1.1, 2); 
    kRM2 = kRM2 + Math.pow(1.1, 2);
    xLManim2 = xLManim2 + kLM2;
    xRManim2 = xRManim2 + kRM2;
       
    kL = kL + Math.pow(0.3, 2); 
    kR = kR + Math.pow(0.3, 2); 
    xLanim = xLanim - kL;   
    xRanim = xRanim - kR;

    wLanim = wLanim - kL * 2; //2
    wRanim = wRanim - kR * 2;
}

function on_size() {   
    ww = window.Width;   
    wh = window.Height;
    offset = (ww - col) / points;   
    w = offset - 1;   
    offset_l = (ww - col) / points_l;   
    w_l = offset_l - 1;
}   

function on_mouse_move(x,y) {
    on_mouse = true;
    pos_x = x <= t_width ? col + t_width : col + x;
    pos_y = y <= t_height ? t_height : y;
    window.SetCursor(32649);
    window.Repaint();
}

function on_mouse_leave() {
    on_mouse = false;
    window.SetCursor(32512);
    window.Repaint();
}
 
function on_mouse_wheel(step) {
    wheel = true;
    VUMeter.Offset = VUMeter.Offset + step;
    window.Repaint();
    tooltip_timer && window.ClearTimeout(tooltip_timer);
    tooltip_timer = window.SetTimeout(function() {
        wheel = false;
        tooltip_timer && window.ClearTimeout(tooltip_timer);
        tooltip_timer = false;
    }, 2000);
}

function combineColors(c1, c2, f){ // When fraction is 0, result is 100% color1, when f is 1, result is 100% color2.
    var c1 = toRGB(c1);
    var c2 = toRGB(c2);

    var r = Math.round(c1[0] + f * (c2[0] - c1[0]));
    var g = Math.round(c1[1] + f * (c2[1] - c1[1]));
    var b = Math.round(c1[2] + f * (c2[2] - c1[2]));
   
    return (0xff000000 | (r << 16) | (g << 8) | (b));
}

function toRGB(d){ // convert back to RGB values
    var d = d-0xff000000;
    var r = d >> 16;
    var g = d >> 8 & 0xFF;
    var b = d & 0xFF;

    return [r,g,b];
}

panel_on = true;

function on_notify_data(name, info) {
    if (name == "panel vis") {
        if (info == "Peak meter"){
            panel_on = true;
        } else {
            panel_on = false;
        }
    }
}
 
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 55
Откуда: Украина, Днепр
Репутация: 449
С нами: 6 лет 4 месяца

Сообщение #2567 MC Web » 16.06.2019, 15:20

kgena_ua, привет.
kgena_ua писал(а):Замок на скрине картинка или нарисовали скриптом.
Это символ шрифта, т.к. в большинстве шрифтов "замка" нет, брал его из FontAwesome. Или брать из имеющихся в большинстве шрифтов, что то подходящее.
Пример замены в данном скрипте (выше надо указать данные на шрифт):
Код: Выделить всё
    temp_bmp = gdi.CreateImage(1, 1);
    temp_gr = temp_bmp.GetGraphics();
   
    header_0 = lock_loading ? '\uF023' : ""; // Обозначение блокировки "Замок" ('\uF023') шрифт FontAwesome
//  header_0 = lock_loading ? '\uF084' : ""; // Обозначение блокировки "Ключ" ('\uF084') шрифт FontAwesome
//  header_0 = lock_loading ? '\uF08D' : ""; // Обозначение блокировки "Кнопка" ('\uF08D') шрифт FontAwesome
   
//  header_0 = lock_loading ? '\u2611' : ""; // Обозначение блокировки "Галочка" ('\u2611') любой шрифт
//  header_0 = lock_loading ? "l o c k" : ""; ///////////

kgena_ua писал(а):- скрыть, отобразить дополнительную информацию - кнопка между заголовком-2 и текстом (при наведении отображается если доп.информация существует) - двойной левый клик;
При первом запуске (проигрывателя, скрипта и т.п.) эта кнопка "ловится" курсором нормально, в дальнейшем при смене исполнителя - появляются проблемы по ее "отлову".
MC Web
Гуру
Аватара
Репутация: 169
С нами: 6 лет

Сообщение #2568 kgena_ua » 16.06.2019, 15:44

MC Web писал(а):появляются проблемы по ее "отлову".
Да, бывает, когда нет header_2, мне кажется.
Бока где-то тут:
Код: Выделить всё
    h2_y = h1_y + h1_text_array.length * h1_text_row_height + 6; //// 6 ???????????????????????????????????
    h2_text_visable_area = Math.floor(Math.max(0, window.Height - t_margin - h2_y));
    h2_text_visable_rows = Math.floor(h2_text_visable_area / h2_text_row_height);

    h2_text_array = [];
    for (var i = 0; i < h2_text_array_tmp.length; i += 2) {
        h2_text_array.push(trim(h2_text_array_tmp[i]));
    }
   
    t_y = (header_2.length > 0 ? h2_y + h2_text_array.length * h2_text_row_height : h1_y + h1_text_array.length * h1_text_row_height + 6) + text_row_height;
    text_visable_area = Math.floor(Math.max(0, window.Height - t_margin - t_y));
    text_visable_rows = Math.floor(text_visable_area / text_row_height);
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 55
Откуда: Украина, Днепр
Репутация: 449
С нами: 6 лет 4 месяца

Сообщение #2569 kgena_ua » 27.06.2019, 19:29

"Biography, albums, title, similar artist info.www.last.fm"
@version "27062019"


jscript panel, wsh panel mod.
тест.

- исправления;
- добавлен пункт меню "History" - просмотр ранее загруженных данных, если они сохраняются в папке tmp_Biography (по умолчанию).

Сохранения перезагрузить.
Перед установкой очистить переменные - меню "Свойства".

I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 55
Откуда: Украина, Днепр
Репутация: 449
С нами: 6 лет 4 месяца

Сообщение #2570 macarych » 28.06.2019, 13:23

kgena_ua, приветствую.
А нет ли такой версии "Биографии..." которая запустится, безо всяких, в Spider Monkey?
macarych M В сети
Гуру
Аватара
Репутация: 359
С нами: 10 лет 7 месяцев

Сообщение #2571 MC Web » 28.06.2019, 14:13

macarych, привет.
Раз пользуешься spider monkey panel, спрошу - есть заметная разница между ней и аналогичными jscript panel, wsh panel mod (производительность и т.п., кроме потери совместимости скриптов) ?
MC Web
Гуру
Аватара
Репутация: 169
С нами: 6 лет

Сообщение #2572 macarych » 28.06.2019, 14:30

MC Web, сходу сложно сказать, как по мне - стройно работает. Могу протестировать, на показаниях Диспетчера задач, только вот накидаю параллельную конфигурацию на WSH. Самому интересно.
macarych M В сети
Гуру
Аватара
Репутация: 359
С нами: 10 лет 7 месяцев

Сообщение #2573 MC Web » 28.06.2019, 14:43

macarych, просто автор обещал увеличение производительности, у себя проверить не могу...
macarych писал(а):А нет ли такой версии "Биографии..." которая запустится, безо всяких, в Spider Monkey?
Автор рекомендует сделать портирование скриптов для SMP.
Если получится, заодно и выложишь скрипт для SMP.
MC Web
Гуру
Аватара
Репутация: 169
С нами: 6 лет

Сообщение #2574 macarych » 28.06.2019, 15:20

macarych писал(а):только вот накидаю параллельную конфигурацию на WSH.
эт я погорячился, 1 в 1 еще надо очень постараться, проще две разных сборки
macarych M В сети
Гуру
Аватара
Репутация: 359
С нами: 10 лет 7 месяцев

Сообщение #2575 MC Web » 28.06.2019, 15:28

Последняя jscript panel по скриптам идентична SMP.
MC Web
Гуру
Аватара
Репутация: 169
С нами: 6 лет

Сообщение #2576 macarych » 28.06.2019, 15:49

Ну вот, в принципе можно сравнить.

phpBB [media]
macarych M В сети
Гуру
Аватара
Репутация: 359
С нами: 10 лет 7 месяцев

Сообщение #2577 MC Web » 28.06.2019, 16:11

Как я понял по ЦП разницы нет, а по памяти у SMP чуть больше (из за своего движка).
Поэтому у меня всегда и возникают подобные вопросы (связанные с заменой строго на новое) - стоит оно того или нет, если кроме новых проблем ничего нового не приобретаем.
Но это техническая сторона, а по субъективным ощущениям хоть какая нибудь то разница в работе есть ?
MC Web
Гуру
Аватара
Репутация: 169
С нами: 6 лет

Сообщение #2578 macarych » 28.06.2019, 16:22

MC Web писал(а):по субъективным ощущениям хоть какая нибудь то разница в работе есть
Опять же, сложно ответить однозначно, до сего момента я их не сравнивал, но субъективно - больше нравится SMP, ну хотя бы потому что все необходимое для работы у SMP "по карманам распихано"
macarych M В сети
Гуру
Аватара
Репутация: 359
С нами: 10 лет 7 месяцев

Сообщение #2579 MC Web » 28.06.2019, 16:36

macarych писал(а):все необходимое для работы у SMP "по карманам распихано"
Если имеется в виду доступ к скриптам, то в jscript panel так (думаю в SMP - похожее):

Изображение

И еще в JSP (наверное и в SMP) используются символы шрифта (fontawesome-webfont.ttf) для отображения кнопок. Можно интересное наковырять и добавить боковую панель с кнопками:

Изображение
MC Web
Гуру
Аватара
Репутация: 169
С нами: 6 лет

Сообщение #2580 kutuzof » 28.06.2019, 16:38

macarych писал(а):А нет ли такой версии "Биографии..." которая запустится, безо всяких, в Spider Monkey?
Biography 1.1.0 от WilB специально для Spider Monkey Panel 1.2.1+
Сама страница на последнюю версию здесь
kutuzof M
Бывалый
Аватара
Возраст: 32
Откуда: Орёл
Репутация: 102
С нами: 2 года 11 месяцев

Пред.След.

Вернуться в Секреты foobar2000