Скрипты для foo_uie_wsh_panel_mod

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

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

Сообщение #1061 kgena_ua » 21.08.2016, 12:07

mans писал(а):изменить скрипт ластфм биография, чтобы не показывал имя артиста только текст биографии
mans, ответ запоздалый :oops: , но выложу на форуме, может кому-то интересно.
За координаты начала вывода текста биографии отвечают переменные b_x и b_у в function get_b_text_array().
Вот кусок скрипта, где я заремил старые значения и добавил две новые строки:
Код: Выделить всё
function get_b_text_array() {
    a_x = txt_x + t_margin;
    a_y = txt_y + t_margin;
 
    temp_bmp = gdi.CreateImage(1, 1);
    temp_gr = temp_bmp.GetGraphics();

    a_text_row_height = temp_gr.CalcTextHeight("text", a_font);
    b_text_row_height = temp_gr.CalcTextHeight("text", b_font);
   
    //b_x = txt_x + t_margin;
    //b_y = a_y + a_text_row_height + b_text_row_height;
   
    b_x = txt_x + t_margin;
    b_y = txt_y + t_margin;
и соответственно нужно заремить (или убрать) строки вывода текста артиста в function on_paint(gr){
Код: Выделить всё
    //gr.GdiDrawText(artist, a_font, RGB(0,0,0), a_x + 1, a_y + 2, ww - a_x - t_margin, wh, DT_LEFT | DT_WORD_ELLIPSIS | DT_NOPREFIX );   
    //gr.GdiDrawText(artist, a_font, a_color, a_x, a_y, ww - a_x - t_margin, wh, DT_LEFT | DT_WORD_ELLIPSIS | DT_NOPREFIX );   

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

Сообщение #1062 mans » 21.08.2016, 17:02

у меня ошибку выдает
Error: WSH Panel Mod (Biography Text && Picture. www.last.fm v14052016 by kgena_ua): Ошибка выполнения Microsoft JScript:
Переполнение
mans
Бывалый
Репутация: 0
С нами: 9 лет 10 месяцев

Сообщение #1063 kgena_ua » 22.08.2016, 11:05

mans, никакой ошибки быть не должно. Вот я взял v14052016, сделал изменения, как описывал выше (сохранил скрипт в текстовом файле):
14052016.rar
(7.81 КБ) Скачиваний: 112
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 53
Откуда: Украина, Днепр
Репутация: 331
С нами: 4 года 4 месяца

Сообщение #1064 mans » 22.08.2016, 11:24

согласен, скрипт из архива работает, спасибо!
mans
Бывалый
Репутация: 0
С нами: 9 лет 10 месяцев

Сообщение #1065 seriousstas » 23.08.2016, 15:51

kgena_ua
Есть вопросик по TF .
Имеем оглавления разных WSH плейлистов (от br3tt) .
Источники: треки альбомами и треки сборники (и те и те с тегами !) .
Задача в оглавлении прописать название альбома, если это папка с одним исполнителем
и название папки , если это сборники - по условию .
Вопрос , как задать такое условие ?
Другими словами , если это альбом - рисуем %title% ,
а если сборник , рисуем название верхней папки : $directory(%path%,2)
В теории решение вижу таким : если ARTIST(или ALBUM) первого трека отличается от второго - title,
иначе - path , но возможно-ли :think:

br3tt просто пишет $directory(%path%,2) для этих случаев , но корявенько выглядит ..
seriousstas
Мастер
Откуда: Украина , Ивано-Франковск
Репутация: 64
С нами: 2 года 6 месяцев

Сообщение #1066 kgena_ua » 24.08.2016, 10:01

Привет, seriousstas.

Для сборников желательно заполнять поле album artist значением VA или various artists.
Тогда если $meta(album artist) (по on_selection_changed(metadb) или on_playlist_switch()) равно VA, то сборник ...
Если такого не делать, тогда только перебором и сравнения значений поля artist ($meta(artist))...или поля album.
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 53
Откуда: Украина, Днепр
Репутация: 331
С нами: 4 года 4 месяца

Сообщение #1067 seriousstas » 24.08.2016, 12:21

Если такого не делать, тогда только перебором и сравнения значений поля artist ($meta(artist))...или поля album.
Привет!
Да , часто в дорогу быстро забрасываешь сборник(сотни треков) - обычно на правки нет времени...
А можно пример такого сравнения ?
Скажем $meta(artist) первого трека со вторым
seriousstas
Мастер
Откуда: Украина , Ивано-Франковск
Репутация: 64
С нами: 2 года 6 месяцев

Сообщение #1068 vladj » 24.08.2016, 12:44

seriousstas писал(а):seriousstas
Пользуясь именно твоими крайними сборками не вижу ничего корявого в отображении альбомов или
сборок в плейлисте, потому не могу даже уловить сути "корявости".
С альбомами все просто конечно, если с библиотеки открываю папку с самопальной сборкой, то в шапке
вижу в первой строке название папки и год, во второй строке название общей папки со сборками.
Если загружаю готовый альбом -сборку, то в шапке (как и пишет kgena_ua) значится various.
HTPC Termaltake, Onkyo 525E, цап SMSL, фронт Yamaha 8900.
vladj M
Гуру
Аватара
Откуда: Пермский край
Репутация: 278
С нами: 7 лет 6 месяцев

Сообщение #1069 seriousstas » 24.08.2016, 12:55

Влад - посмотри как отображаются названия в известном JSPlaylist (вторая строка в оглавлении) - это названия папок в любых вариантах,
а желательно видеть название альбома при условии , что это не сборник .
Названия папок ведь бывают разные, кто-то назовет правильно, а кто-то например "-001-"
seriousstas
Мастер
Откуда: Украина , Ивано-Франковск
Репутация: 64
С нами: 2 года 6 месяцев

Сообщение #1070 vladj » 24.08.2016, 13:20

Насчет значения various это я призагнул попутав, в JSPlaylist во второй строке у меня всегда название
общей папки, т.е. Blues, Hard Rock,Jazz и т.д. плюс папка Сборки имеется (туда самопал кидаю).
Если например загружаю всю папкуJazz , то во второй строке естественно название папки Jazz, а в первой
при наличии самопальной сборки то, как я обозвал папку, например Best, а если имею альбом артиста, то
в первой строке название альбома...сборник это или нет - без разницы. По прежнему не могу понять твоей
хотелки, блин хоть таймвьювер устанавливать, что-бы тебя ко мне пустить :smile:
HTPC Termaltake, Onkyo 525E, цап SMSL, фронт Yamaha 8900.
vladj M
Гуру
Аватара
Откуда: Пермский край
Репутация: 278
С нами: 7 лет 6 месяцев

Сообщение #1071 MC Web » 24.08.2016, 20:09

kgena_ua, привет!

Нужна помощь, связанна она со скриптом для PSS.

Более подробно написал в ЛС.
MC Web
Мастер
Репутация: 78
С нами: 3 года 11 месяцев

Сообщение #1072 seriousstas » 26.08.2016, 05:26

vladj все верно , хотелость универсального решения,
пока сделал так :
Плейлист JS Smooth Playlist так и не был сделан на 100 %,
но в таком виде уже можно пользовать (получилось прикрутить сортировку папками) :
phpBB [media]
seriousstas
Мастер
Откуда: Украина , Ивано-Франковск
Репутация: 64
С нами: 2 года 6 месяцев

Сообщение #1073 seriousstas » 26.08.2016, 19:22

Покрутить можно отсюда :
http://pccar.ru/showpost.php?p=367914&postcount=2282
seriousstas
Мастер
Откуда: Украина , Ивано-Франковск
Репутация: 64
С нами: 2 года 6 месяцев

Сообщение #1074 kgena_ua » 27.08.2016, 23:33

WHS Peak meter
phpBB [media]
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 53
Откуда: Украина, Днепр
Репутация: 331
С нами: 4 года 4 месяца

Сообщение #1075 seriousstas » 29.08.2016, 13:49

kgena_ua
Красивый WHS Peak - когда можно вживую ? :)

Добавлено спустя 2 минуты 26 секунд:
JS Smooth Playlist mod v3 для foo-jscript-panel
Основные отличия от оригинала :
1 Сортировка папками через $directory_path(%path%) с нумирацией треков по тегам .
2 В панельке сверху три условные кнопки (зону действия немного увеличил) :
Три режима для оглавления двойным кликом по шапке в центре (название испольнителя , название папки или просто списком - по кругу)
Слева - свернуть/развернуть список
Справа - перейти на трек
3 . Увеличил время обработки кеша, что существнно улучшило прокрутку списка (ушли тормоза) , уменьшил инерцию
Для быстрых ПК (с SSD или в режиме "раскрытых списков") довил чекбокс Ускоренная загрузка кеша :
Изображение
4. Тк скрол прозрачный - разместил его поверх списка .
Добавил размеры скрола в настройки.
Скачать :

По дефолту - зум всех элементов : Ctrl + Колесо мышы
Зум только миниатюр : Shift + Колесо мышы
Быстро создать (добавить в) плейлист можно протянув трек мышкой вправо
seriousstas
Мастер
Откуда: Украина , Ивано-Франковск
Репутация: 64
С нами: 2 года 6 месяцев

Сообщение #1076 seriousstas » 30.08.2016, 02:37

Фиксы :
1. Скрол зумится вместе с остальными элементами
2. Фиксы встроенного менеджера
3.Поправил рейтинг
js_smooth_playlist_by_br3tt-ss_Mod v4
seriousstas
Мастер
Откуда: Украина , Ивано-Франковск
Репутация: 64
С нами: 2 года 6 месяцев

Сообщение #1077 kgena_ua » 30.08.2016, 21:57

seriousstas, WHS Peak вживую (CUI).
Требуется компонент foo_vis_vumeter.
Код: Выделить всё
// ==PREPROCESSOR==
// @name "Peak meter"
// @author "kgena_ua"
// @version "30082016"
// ==/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 = [-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.1,1,1.5,2,2.5,3,3.5,5];   
var db_l = [-100,-95,-90,-85,-80,-75,-70,-65,-60,-55,-50,-45,-40,-35,-30,-25]; 

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 (dll) {
        L = VUMeter.LeftLevel;   
        R = VUMeter.RightLevel;   
        LM = VUMeter.LeftPeak;   
        RM = VUMeter.RightPeak;   
    }

    if (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[1]);   
            if (ToDB(RM) > db_l[i]) gr.FillSolidRect(col + i * offset_l, yRM_l, w_l, hM_l, color[1]);
        }

        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 (wL > col) 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 (wR > col) gr.FillSolidRect(col, yR, wR, h, color[1]);   

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

            if (xRanim <= wR) {xRanim = wR; kR = 0; wRanim = wR - oldwR < 1 ? wRanim : wR - oldwR + 5} else {oldwR = wR};
            if (xRanim > col) gr.FillSolidRect(col + xRanim + 2, yR, wRanim <= 0 ? 5 : 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};
            gr.FillSolidRect(col + xLManim + offset, yLM, w * 0.6, 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};
            gr.FillSolidRect(col + xRManim + offset, yRM, w * 0.6, hM, color[Math.round(xRManim/offset)]);   

            gr.FillSolidRect(col + xLManim2 + offset - 0, yLM, w * 0.3, hM, color[Math.round(xRManim2/offset)]);     
            gr.FillSolidRect(col + xRManim2 + offset - 0, yRM, w * 0.3, hM, color[Math.round(xLManim2/offset)]);   
        }
        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;
        wRanim = wRanim - kR * 2;
    }

    for (var i = 0; i <= points; i = i + 2) {
        var text_w = gr.CalcTextWidth(db[i], font);   
        if (i > 2) gr.GdiDrawText(db[i], font, color1[0], col + offset * i - text_w / 2, ytext, ww, wh);
    }
   
    gr.GdiDrawText("db", font, color1[0], col, ytext, ww, wh);
    //gr.GdiDrawText(xLManim, font, color1[1], 0, 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 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 on_playback_time(){
}

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];
}

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

Сообщение #1078 seriousstas » 31.08.2016, 00:43

WHS Peak вживую (CUI).
Круть !
А может быть прозрачным ?
seriousstas
Мастер
Откуда: Украина , Ивано-Франковск
Репутация: 64
С нами: 2 года 6 месяцев

Сообщение #1079 kgena_ua » 02.09.2016, 23:16

seriousstas, был вариант с прозрачностью, только я отказался от этого (приходилось добавлять таймер, что увеличивало нагрузку на ЦП).
Если будет интерес у меня есть новая версия для WHS Peak meter (мелкие поправки).
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 53
Откуда: Украина, Днепр
Репутация: 331
С нами: 4 года 4 месяца

Сообщение #1080 seriousstas » 02.09.2016, 23:17

Если будет интерес у меня есть новая версия для WHS Peak meter
Есть конечно интерес!
seriousstas
Мастер
Откуда: Украина , Ивано-Франковск
Репутация: 64
С нами: 2 года 6 месяцев

Пред.След.

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