Стрелочный пикметр (foo_vis_vumeter.dll)

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

Описание: Все о плагинах, компонентах, расширениях

Сообщение #1 DRON » 08.05.2010, 16:47

Компонент представляет собой имитацию аналогового стерео волюметра.
Визуализация  доступна  как в виде отдельного окна так и в виде CUI-панели или DUI-элемента.
Настройки  находятся на странице "Advanced" окна конфигурации плеера, в группе параметров "Display/VU Meter".
ИзображениеИзображение
Компонент написан по просьбам трудящихся. За основу взята модель 702 производства Ernest Turner.

Последнюю версию можно найти тут:
http://sites.google.com/site/foobar2000components/home/vumeter

Так же имеется некий комплект (с примерами) для создания собственных индикаторов:
Изображение
https://sites.google.com/site/foobar2000components/home/vumeter/VUEditor.zip

Пожалуйста не выкладывайте тут свои индикаторы, для этого этого есть отдельная тема.
Последний раз редактировалось DRON 15.02.2013, 16:42, всего редактировалось 5 раз(а).
DRON M
Автор темы, Мастер
Аватара
Откуда: Санкт-Петербург
Репутация: 111
С нами: 9 лет 7 месяцев


Сообщение #301 Vadim_79 » 22.12.2013, 14:55

Chernomor, спасибо скачал!
Vadim_79
Гость

Сообщение #302 kgena_ua » 08.09.2014, 22:28

Захотелось прикрутить к сборке пикметр. Понравился 012_onv (автор onv) (тема: Пользовательские индикаторы к foo_vis_vumeter,
сообщение macarych » 18.02.2013, 11:43 ).
Скачал VUEditor. Разобраться пока не разобрался, но показалось, что VUEditor не поддерживает "прозрачность фона" изображения (может ошибаюсь).
Решил сделать на WHS (за основу взял скрипт от DRON в этой теме).
Получилось так:
Безымянный VU METR.png
Безымянный VU METR.png (1.9 КБ) Просмотров: 3866

А вопрос такой. Можно-ли проверить правильность работы данного скрипта. Я не совсем силен в этих пикметрах.
Код: Выделить всё
function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }
function RGBA(r, g, b, a) { return ((a << 24) | (r << 16) | (g << 8) | (b)); }
var font = gdi.Font("Arial",9,1);
var ww, wh;

var color = {
    0:RGB(0,50,120),
    1:RGB(0,60,130),
    2:RGB(0,70,140),
    3:RGB(0,80,160),
    4:RGB(0,90,180),
    5:RGB(0,100,200),
    6:RGB(0,110,220),
    7:RGB(0,120,240),
    8:RGB(255,150,150),
    9:RGB(255,120,120),
    10:RGB(255,90,90),
    11:RGB(255,60,60),
    12:RGB(255,30,30)
};

var db = {
    0:-25,
    1:-20,
    2:-15,
    3:-10,
    4:-7,
    5:-5,
    6:-3,
    7:-1,
    8:0,
    9:1,
    10:3,
    11:5,
    12:7
};

VUMeter = new ActiveXObject("VUMeter");
VUMeter.RegisterWindow(window.ID);
//VUMeter.RegisterRect(window.ID,0,0,300,20);

function ToDB(Level){
    return Math.round(2000*Math.log(Level)/Math.LN10)/100;
}

function on_mouse_wheel(step) {
    VUMeter.Offset=VUMeter.Offset+step;
}

function on_size() {
    ww = window.Width;
    wh = window.Height;
}

function on_paint(gr) {

//        L=VUMeter.LeftLevel;
//        R=VUMeter.RightLevel;
    LM=VUMeter.LeftPeak;
    RM=VUMeter.RightPeak;

    gr.FillSolidRect(0, 0, ww, wh, RGB(0,0,0));
       
    var yl = 10;
    var y2 = yl + 25;
    var h = 7;
    var offset = (ww - 20) / 13;
    var w = (ww - 20) / 16;

    for (var i = 0; i <= 12; i = i + 1) {   
//            gr.FillSolidRect(20 + i * offset, 3, w, 1, color[i]);
        if (fb.IsPlaying) {   
            gr.FillSolidRect(20 + i * offset, yl, w, h, ToDB(LM) >= db[i] ? color[i] : RGBA(0,0,0,0));
            gr.FillSolidRect(20 + i * offset, y2, w, h, ToDB(RM) >= db[i] ? color[i] : RGBA(0,0,0,0));                   
        }
        if (i >1 ) gr.GdiDrawText(db[i] > 0 ? "+" + db[i] : db[i] , font, color[i], 20 + offset * [i], yl + 11, ww, wh);
    }

    gr.GdiDrawText( "L" , font, color[7], 5, yl - 2, ww, wh);
    gr.GdiDrawText( "R" , font, color[7], 5, y2 - 2, ww, wh);

    gr.GdiDrawText( "DB" , font, color[4], 20, yl + 11, ww, wh);
}

/*
var seek_timer;
function on_playback_new_track(info) {
    seek_timer && window.ClearInterval(seek_timer);
    seek_timer = window.SetInterval(function() {
            window.Repaint();
    },10);
}  

function on_playback_stop(reason) {
    if(reason == 0) {
        window.ClearInterval(seek_timer);
        window.Repaint();
    }
}
*/
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 53
Откуда: Украина, Днепр
Репутация: 351
С нами: 4 года 8 месяцев

Сообщение #303 AHAPXICT » 09.09.2014, 02:00

kgena_ua, самого данная тема интересует. Раньше пробовал делать прозрачный фон у индикаторов, но по всей видимости его не понимает сам плагин, так как не имеет функции прозрачного фона (transparent). VUEditor поддерживает прозрачный фон, ведь "стелка" и "стекло" на прозрачном фоне.
Сам перекрашивал бэкграунды под свою тему на исходниках VU от Макарыча и потом пере собирал в VUEditor заново.
P.S. А на том скрипте для переключения лайаутов можно как то "прикрутить" галочку или точку для выбранной в данный момент темы?
Media Library it's bad - explorer it's good!
AHAPXICT M
Мастер
Аватара
Возраст: 46
Откуда: Киев
Репутация: 113
С нами: 4 года 1 месяц

Сообщение #304 kgena_ua » 09.09.2014, 14:57

AHAPXICT писал(а):но по всей видимости его не понимает сам плагин
Да, так и есть, Вы правы, спасибо.
AHAPXICT писал(а):как то "прикрутить" галочку или точку
AHAPXICT, в том скрипте для меня есть некоторые строки, которые я не совсем пока понимаю.
Продолжил работу над своим скриптом: увеличил шкалу, добавил "объема ".
Сижу, слушаю и пялюсь на пикметр.
Безымянный VU METR 2.png
Безымянный VU METR 2.png (100.62 КБ) Просмотров: 3813
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 53
Откуда: Украина, Днепр
Репутация: 351
С нами: 4 года 8 месяцев

Сообщение #305 AHAPXICT » 09.09.2014, 21:19

kgena_ua, выглядит бомбезно! Пару дней назад, наконец то, привинтил третий лайаут и теперь допиливаю, докручиваю и точно так же пялюсь в монитор)))
Вложения
DarkOnev3.1.png
DarkOnev3.1.png (10.05 КБ) Просмотров: 3781
Media Library it's bad - explorer it's good!
AHAPXICT M
Мастер
Аватара
Возраст: 46
Откуда: Киев
Репутация: 113
С нами: 4 года 1 месяц

Сообщение #306 kgena_ua » 10.09.2014, 21:24

Вроде закончил скрипт. Убрал оттенки красного - раздражает.
Безымянный VU METR 3.png
Безымянный VU METR 3.png (68.45 КБ) Просмотров: 3732

Выкладываю скрипт. Может кому пригодится.
Код: Выделить всё
function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }
function RGBA(r, g, b, a) { return ((a << 24) | (r << 16) | (g << 8) | (b)); }
var font = gdi.Font("Arial",9,1);
var ww, wh;

var s_color = RGB(90,118,135);

var color = {
    0:RGB(0,55,110),
    1:RGB(0,60,120),
    2:RGB(0,65,130),
    3:RGB(0,70,140),
    4:RGB(0,75,150),
    5:RGB(0,80,160),
    6:RGB(0,85,170),
    7:RGB(0,90,180),
    8:RGB(0,95,190),
    9:RGB(0,100,200),
    10:RGB(0,105,210),
    11:RGB(0,110,220),
    12:RGB(0,115,230),

    13:RGB(0,120,240),

    14:RGB(80,151,216),
    15:RGB(160,181,192),
    16:RGB(151,172,185),
    17:RGB(140,165,179),
    18:RGB(130,156,172),
    19:RGB(121,149,166),
    20:RGB(109,140,158),
    21:RGB(100,131,149),
    22:RGB(90,118,135),
    23:RGB(81,106,121),
    24:RGB(70,92,106),
    25:RGB(61,80,90),
    26:RGB(51,67,77)
};

var db = {
    0:-25,
    1:-20,
    2:-15,
    3:-13,
    4:-10,
    5:-9,
    6:-8,
    7:-7,
    8:-6,
    9:-5,
    10:-4,
    11:-3,
    12:-2,
    13:-1,
    14:0,
    15:1,
    16:2,
    17:3,
    18:4,
    19:5,
    20:6,
    21:7,
    22:8,
    23:9,
    24:10
};

VUMeter = new ActiveXObject("VUMeter");
//VUMeter.RegisterWindow(window.ID); // do not use for transparent mode

function ToDB(Level){
    return Math.round(2000*Math.log(Level)/Math.LN10)/100;
}

function on_size() {
    ww = window.Width;
    wh = window.Height;
}

function on_paint(gr) {
//    gr.FillSolidRect(0, 0, ww, wh, RGB(0,0,0));

    L=VUMeter.LeftLevel;
    R=VUMeter.RightLevel;
    LM=VUMeter.LeftPeak;
    RM=VUMeter.RightPeak;
     
    var col = 15;     
    var yLM = 10;
    var yRM = yLM + 26;
    var h = 7;
    var offset = (ww - col) / 25;
    var w = offset - 2;
   
    for (var i = 0; i <= 24; i = i + 1) {   
//        gr.FillSolidRect(col + i * offset, 0, w, 1, color[i]);
        if (fb.IsPlaying) {   
            gr.FillSolidRect(col + i * offset, yLM, w, h, ToDB(LM) > db[i] ? color[i] : RGBA(0,0,0,0));
            gr.FillSolidRect(col + i * offset, yLM, w, 1, ToDB(LM) > db[i] ? RGBA(255,255,255,40 + i * 3) : RGBA(0,0,0,0));
            gr.FillSolidRect(col + i * offset, yLM, 1, h, ToDB(LM) > db[i] ? RGBA(255,255,255,40 + i * 3) : RGBA(0,0,0,0));
           
            gr.FillSolidRect(col + i * offset, yRM, w, h, ToDB(RM) > db[i] ? color[i] : RGBA(0,0,0,0));                   
            gr.FillSolidRect(col + i * offset, yRM, w, 1, ToDB(RM) > db[i] ? RGBA(255,255,255,40 + i * 3) : RGBA(0,0,0,0));
            gr.FillSolidRect(col + i * offset, yRM, 1, h, ToDB(RM) > db[i] ? RGBA(255,255,255,40 + i * 3) : RGBA(0,0,0,0));
        }
    }
   
    for (var i = 0; i <= 24; i = i + 2) {   
        if (i > 1) gr.GdiDrawText(db[i] > 0 ? "" + db[i] : db[i], font, fb.IsPlaying ? color[i] : s_color, col + offset * i, yLM + 11, ww, wh);
    }

    gr.GdiDrawText("L", font, fb.IsPlaying ? color[8] : s_color, col - 10, yLM - 2, ww, wh);
    gr.GdiDrawText("R", font, fb.IsPlaying ? color[8] : s_color, col - 10, yRM - 2, ww, wh);

    gr.GdiDrawText("db", font, fb.IsPlaying ? color[8] : s_color, col, yLM + 11, ww, wh);
}

// use line below for transparent mode only
var seek_timer;
function on_playback_new_track(info) {
    seek_timer && window.ClearInterval(seek_timer);
    seek_timer = window.SetInterval(function() {
            window.Repaint();
    },10);
}  

function on_playback_stop(reason) {
    if(reason == 0) {
        window.ClearInterval(seek_timer);
        window.Repaint();
    }
}

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

Сообщение #307 kgena_ua » 13.09.2014, 00:10

Зацепила меня эта тема.
Добавил уровни для каналов. Добавил нелинейно ниспадающие "пики". Смотрится более динамичнее.
Безымянный VU METR 4.png
Безымянный VU METR 4.png (35.4 КБ) Просмотров: 3649

Код: Выделить всё
function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }   
function RGBA(r, g, b, a) { return ((a << 24) | (r << 16) | (g << 8) | (b)); }    
var font = gdi.Font("Arial",9,1);   
var set_path = fb.ProfilePath + "\\maybe\\settings\\";   
var ww, wh;   
   
var s_color = RGB(90,118,135);   
   
var color = {   
    0:RGB(0,55,110),   
    1:RGB(0,60,120),   
    2:RGB(0,65,130),   
    3:RGB(0,70,140),   
    4:RGB(0,75,150),   
    5:RGB(0,80,160),   
    6:RGB(0,85,170),   
    7:RGB(0,90,180),   
    8:RGB(0,95,190),   
    9:RGB(0,100,200),   
    10:RGB(0,105,210),   
    11:RGB(0,110,220),   
    12:RGB(0,115,230),   
   
    13:RGB(0,120,240),   
   
    14:RGB(80,151,216),   
    15:RGB(116,162,201),   
    16:RGB(151,172,185),   
    17:RGB(140,165,179),   
    18:RGB(130,156,172),   
    19:RGB(121,149,166),   
    20:RGB(109,140,158),   
    21:RGB(100,131,149),   
    22:RGB(90,118,135),   
    23:RGB(81,106,121),   
    24:RGB(70,92,106),   
    25:RGB(61,80,90),   
    26:RGB(51,67,77)   
};   
   
//    14:RGB(80,151,216),   
//    15:RGB(160,181,192),   
//    16:RGB(151,172,185),   
   
var db = {   
    0:-25,   
    1:-20,   
    2:-15,   
    3:-13,   
    4:-10,   
    5:-9,   
    6:-8,   
    7:-7,   
    8:-6,   
    9:-5,   
    10:-4,   
    11:-3,   
    12:-2,   
    13:-1,   
    14:0,   
    15:1,   
    16:2,   
    17:3,   
    18:4,   
    19:5,   
    20:6,   
    21:7,   
    22:8,   
    23:9,   
    24:10   
};   
   
VUMeter = new ActiveXObject("VUMeter");   
//VUMeter.RegisterWindow(window.ID); // do not use for transparent mode   
//VUMeter.RegisterRect(window.ID,0,0,300,20);   
   
function ToDB(Level){   
    return Math.round(2000*Math.log(Level)/Math.LN10)/100;   
}   
   
function on_size() {   
    ww = window.Width;   
    wh = window.Height;   
}   
   
var wL, wR;   
var xLManim = 0;   
var xLM = 0;   
var xRManim = 0;   
var xRM = 0;   
   
var xLanim = 0;   
var xL = 0;   
var xRanim = 0;   
var xR = 0;   
   
var kL,kR;   
   
function on_paint(gr) {   
    gr.FillSolidRect(0, 0, ww, wh, RGB(0,0,0));   
   
    L=VUMeter.LeftLevel;   
    R=VUMeter.RightLevel;   
    LM=VUMeter.LeftPeak;   
    RM=VUMeter.RightPeak;   

    var col = 15;        
    var yL = 2;    
    var yR = yL +43;     
    var yLM = 8;   
    var yRM = yLM + 26;   
    var hM = 7;   
    var h = 2;   
    var offset = (ww - col) / 23;   
    var w = offset - 2;   
   
    if (fb.IsPlaying) {   
        for (var i = 0; i <= 22; i = i + 1) {   
//        gr.FillSolidRect(col + i * offset, 0, w, 1, color[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[0]) gr.FillSolidRect(col, yL, wL, h, color[8]);   
   
            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[0])gr.FillSolidRect(col, yR, wR, h, color[8]);    
   
            if (xLanim <= wL){xLanim = wL};   
            if (ToDB(L) > db[0]) gr.FillSolidRect(col + xLanim, yL, 4, 2, color[8]);    
       
            if (xRanim <= wR){xRanim = wR};   
            if (ToDB(R) > db[0]) gr.FillSolidRect(col + xRanim, yR, 4, 2, color[8]);        
   
            gr.FillSolidRect(col + i * offset, yLM, w, hM, ToDB(LM) > db[i] ? color[i] : RGBA(0,0,0,0));    
            gr.FillSolidRect(col + i * offset, yLM, w, 1, ToDB(LM) > db[i] ? RGBA(255,255,255,40 + i * 3) : RGBA(0,0,0,0));    
            gr.FillSolidRect(col + i * offset, yLM, 1, hM, ToDB(LM) > db[i] ? RGBA(255,255,255,40 + i * 3) : RGBA(0,0,0,0));   
               
            gr.FillSolidRect(col + i * offset, yRM, w, hM, ToDB(RM) > db[i] ? color[i] : RGBA(0,0,0,0));                       
            gr.FillSolidRect(col + i * offset, yRM, w, 1, ToDB(RM) > db[i] ? RGBA(255,255,255,40 + i * 3) : RGBA(0,0,0,0));    
            gr.FillSolidRect(col + i * offset, yRM, 1, hM, ToDB(RM) > db[i] ? RGBA(255,255,255,40 + i * 3) : RGBA(0,0,0,0));   

            if((ToDB(LM) > db[i] && ToDB(LM) < db[i+1])) {xLM = i * offset}   
            if (xLManim <= xLM) {xLManim = xLM; kL = 0};   
            gr.FillSolidRect(col + xLManim + offset - 4, yLM, 2, hM, color[Math.round(xLManim / offset)]);    
   
            if((ToDB(RM) > db[i] && ToDB(RM) < db[i+1])) {xRM = i * offset}   
            if (xRManim <= xRM) {xRManim = xRM; kR = 0};   
            gr.FillSolidRect(col + xRManim + offset - 4, yRM, 2, hM, color[Math.round(xRManim / offset)]);    
        }   
    }   
   
    for (var i = 0; i <= 22; i = i + 2) {   
        if (i > 1) gr.GdiDrawText(db[i], font, fb.IsPlaying ? color[i] : s_color, col + offset * i - 4, yLM + 11, ww, wh);   
    }    
   
    gr.GdiDrawText("L", font, fb.IsPlaying ? color[8] : s_color, col - 10, yLM - 2, ww, wh);   
    gr.GdiDrawText("R", font, fb.IsPlaying ? color[8] : s_color, col - 10, yRM - 2, ww, wh);   
    gr.GdiDrawText("db", font, fb.IsPlaying ? color[8] : s_color, col, yLM + 11, ww, wh);   
   
//    gr.GdiDrawText(ToDB(LM), font, RGB(200,200,200), 0, yLM + 2, ww, wh);   
//    gr.GdiDrawText(ToDB(RM), font, RGB(200,200,200), 0, yRM - 5, ww, wh);   
}   
   
var seek_timer;   
function on_playback_new_track(info) {   
    seek_timer && window.ClearInterval(seek_timer);   
    seek_timer = window.SetInterval(function() {   
        kL = kL + 20;   
        kR = kR + 20;   
        xLanim = xLanim - 0.1;   
        xRanim = xRanim - 0.1;    
        xLManim = xLManim - 0.001 * kL;           
        xRManim = xRManim - 0.001 * kR;   
        window.Repaint();    
    },10);   
}     
   
function on_playback_stop(reason) {   
    if(reason == 0) {   
        window.ClearInterval(seek_timer);   
        window.Repaint();    
    }   
}   
   
   
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 53
Откуда: Украина, Днепр
Репутация: 351
С нами: 4 года 8 месяцев

Сообщение #308 kgena_ua » 29.09.2014, 22:31

Опять пикметр.
Безымянный.png
Безымянный.png (1.96 КБ) Просмотров: 3437

Код: Выделить всё
// WSH Peak meter

function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }   
function RGBA(r, g, b, a) { return ((a << 24) | (r << 16) | (g << 8) | (b)); }    
var font = gdi.Font("Arial",9,1);   

var ww, wh;   
var on_mouse = false;   
var s_color = RGB(90,118,135);   

var color = {   
   0:RGB(0,72,115),
   1:RGB(0,78,123),
   2:RGB(0,83,132),
   3:RGB(0,88,140),
   4:RGB(0,94,149),
   5:RGB(0,99,157),
   6:RGB(0,104,166),
   7:RGB(0,109,174),
   8:RGB(0,115,183),
   9:RGB(0,120,191),
   10:RGB(0,125,200),
   11:RGB(0,131,208),
   12:RGB(0,136,217),
   13:RGB(0,141,225),
   14:RGB(0,147,234),
   15:RGB(76,159,209),
   16:RGB(151,172,185),
   17:RGB(140,165,179),
   18:RGB(130,156,172),
   19:RGB(121,149,166),
   20:RGB(109,140,158),
   21:RGB(100,131,149),
   22:RGB(90,118,135),
   23:RGB(81,106,121),
   24:RGB(70,92,106),
   25:RGB(61,80,90),
   26:RGB(51,67,77),

};   
   
var db = {   
   0:-50,
   1:-30,
   2:-25,
   3:-20,
   4:-15,
   5:-13,
   6:-10,
   7:-9,
   8:-8,
   9:-7,
   10:-6,
   11:-5,
   12:-4,
   13:-3,
   14:-2,
   15:-1,
   16:0,
   17:1,
   18:2,
   19:3,
   20:4,
   21:5,
   22:6,
   23:7,
   24:8,
   25:9,
   26:10
};   
   
VUMeter = new ActiveXObject("VUMeter");   
VUMeter.RegisterWindow(window.ID); // do not use for transparent mode   
//VUMeter.RegisterRect(window.ID,0,0,300,20);   
   
function ToDB(Level){   
    return Math.round(2000*Math.log(Level)/Math.LN10)/100;   
}   
   
function on_size() {   
    ww = window.Width;   
    wh = window.Height;   
}   

var points = 25;
var col = 10;      
var yL = 2;
var h = 2;   
var yLM = yL + h + 4;
var hM = 6;   //8
var yRM = yLM + 20;    12
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 kL = 0, kR = 0;
var kL2 = 0, kR2 = 0;   
   
var xLManim2 = 0, xRManim2 = 0;

function on_paint(gr) {   
    gr.FillSolidRect(0, 0, ww, wh, RGB(0,0,0));   

   
    L = VUMeter.LeftLevel;   
    R = VUMeter.RightLevel;   
    LM = VUMeter.LeftPeak;   
    RM = VUMeter.RightPeak;   
   
    var offset = (ww - col) / points;   
    var w = offset - 1;   
   
        var offset1 = (ww - col) / 50;   
    var w1 = offset1 - 3;   
                          for (var j = 0; j <= 50 - 1; j = j + 1) {   
//            gr.FillSolidRect(col + j * offset1, yL + h + 1, w1, 1, color[10]);
//            gr.FillSolidRect(col + j * offset1, 17, w1, 1, color[15]);   
//            gr.FillSolidRect(col + j * offset1, yR - 2, w1, 1, color[10]);              
        } 

   
    if (fb.IsPlaying && on ==1) {   
        for (var i = 0; i <= points - 1; i = i + 1) {   

//            gr.FillSolidRect(col + i * offset, 17, w-5, 1, color[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[6]);   

            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[6]);    
   
            if (xLanim <= wL) {xLanim = wL};   
            if (xLanim > col) gr.FillSolidRect(col + xLanim + 2, yL, 10, h, color[Math.round(xLanim/offset)]);    
       
            if (xRanim <= wR) {xRanim = wR};   
            if (xRanim > col) gr.FillSolidRect(col + xRanim + 2, yR, 10, h, color[2]);        

            gr.FillSolidRect(1 + col + i * offset, 1 + yLM, w, hM, ToDB(LM) > db[i] ? RGB(0,0,0) : RGBA(0,0,0,0));    
            gr.FillSolidRect(col + i * offset, yLM, w, hM, ToDB(LM) > db[i] ? color[i] : RGBA(0,0,0,0));    
            gr.FillSolidRect(col + i * offset, yLM, w, 1, ToDB(LM) > db[i] ? RGBA(255,255,255,40 + i * 3) : RGBA(0,0,0,0));    
            gr.FillSolidRect(col + i * offset, yLM, 1, hM, ToDB(LM) > db[i] ? RGBA(255,255,255,40 + i * 3) : RGBA(0,0,0,0));   

            gr.FillSolidRect(1 + col + i * offset, 1 + yRM, w, hM, ToDB(RM) > db[i] ? RGB(0,0,0) : RGBA(0,0,0,0));                       
            gr.FillSolidRect(col + i * offset, yRM, w, hM, ToDB(RM) > db[i] ? color[i] : RGBA(0,0,0,0));                       
            gr.FillSolidRect(col + i * offset, yRM, w, 1, ToDB(RM) > db[i] ? RGBA(255,255,255,40 + i * 3) : RGBA(0,0,0,0));    
            gr.FillSolidRect(col + i * offset, yRM, 1, hM, ToDB(RM) > db[i] ? RGBA(255,255,255,40 + i * 3) : RGBA(0,0,0,0));   

            if (ToDB(LM) > db[i] && ToDB(LM) < db[i+1]) {xLM = i * offset};   
            if (xLManim <= xLM) {xLManim = xLM; xLManim2 = xLM; kL = 0; kL2 = 0};
            if (xLManim > col) gr.FillSolidRect(1 + col + xLManim + offset, 1 + yLM, 2, hM, RGB(0,0,0));               
            if (xLManim > col) gr.FillSolidRect(col + xLManim + offset, yLM, 2, 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; kR = 0; kR2 = 0};
            if (xRManim > col) gr.FillSolidRect(1 + col + xRManim + offset, 1 + yRM, 2, hM, RGB(0,0,0));             
            if (xRManim > col) gr.FillSolidRect(col + xRManim + offset, yRM, 2, hM, color[Math.round(xRManim/offset)]);    

            if (xLManim2 > col) gr.FillSolidRect(col + xLManim2 + offset - 0, yLM, 5, hM, color[Math.round(xRManim2/offset)]);    
            if (xRManim2 > col) gr.FillSolidRect(col + xRManim2 + offset - 0, yRM, 5, hM, color[Math.round(xLManim2/offset)]);    
        }
    }else {
        xLM = 0; xRM = 0; xLManim = 0; xRManim = 0;
    }      
   
    for (var i = 0; i <= points - 1; i = i + 2) {
        var text_w = gr.CalcTextWidth(db[i], font);   
        if (i > 1) gr.GdiDrawText(db[i], font, fb.IsPlaying && on == 1 ? i <= 10 ? color[10] : color[i] : s_color, col + offset * i - text_w / 2, yLM + hM + 1, ww, wh);   
    }


    for (var i = 1; i <= points - 2; i = i + 2) {
        var text_w = gr.CalcTextWidth(db[i], font);   
if (i > 1) gr.FillSolidRect(col + i * offset - 2, yLM + hM + 5, 3, 3, fb.IsPlaying && on == 1 ? i <= 10 ? color[10] : color[i] : s_color);      
    }
   
    gr.GdiDrawText("L", font, fb.IsPlaying && on ==1 || on_mouse ? color[10] : s_color, col - 9, yLM - 2, ww, wh);   
    gr.GdiDrawText("R", font, fb.IsPlaying && on ==1 || on_mouse ? color[10] : s_color, col - 9, yRM - 2, ww, wh);   
    gr.GdiDrawText("db", font, fb.IsPlaying && on ==1 ? color[10] : s_color, col, yLM + hM + 1, ww, wh);   

//    gr.GdiDrawText(ToDB(L), font, RGB(250,250,250), 0, 0, ww, wh);   
//    gr.GdiDrawText(ToDB(LM) , font, RGB(250,250,250), 0, yLM + 3, ww, wh);   
//    gr.GdiDrawText(ToDB(RM), font, RGB(250,250,250), 0, yRM - 4, ww, wh);   
}   
   
var seek_timer;   
function on_playback_new_track(info) {   
    seek_timer && window.ClearInterval(seek_timer);   
    seek_timer = window.SetInterval(function() {   
        kL = kL + 15;   
        kR = kR + 15;   
        xLanim = xLanim - 0.3;   
        xRanim = xRanim - 0.3;    
        xLManim = xLManim - 0.001 * kL;           
        xRManim = xRManim - 0.001 * kR;   
        kL2 = kL2 + 0.5;   
        xLManim2 = xLManim2 + kL2;
        kR2 = kR2 + 0.5;   
        xRManim2 = xRManim2 + kR2;
//        window.RepaintRect(col, yL, ww - col, yR + h)
//        window.Repaint();    
    },10);   
}     
   
function on_playback_stop(reason) {   
    if(reason == 0) {   
        window.ClearInterval(seek_timer);   
        window.Repaint();    
    }
}   

var on = 1;
function on_mouse_lbtn_dblclk(x,y) {   
   on = on == 1 ? 0 : 1;
//    window.Repaint();
}      

function on_mouse_move(x,y) {
    on_mouse = true;
    window.SetCursor(32649);
    window.Repaint();
}

function on_mouse_leave() {
    on_mouse = false;
    window.SetCursor(32512);
    window.Repaint();
}
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 53
Откуда: Украина, Днепр
Репутация: 351
С нами: 4 года 8 месяцев

Сообщение #309 AHAPXICT » 29.09.2014, 22:47

kgena_ua, пикметр шпарит "шо глунемой"! :biggrin: На вашей сборке! Испытываю прям сейчас на пресете от 18.09
Левый левел не в "колоре", только заметил
Последний раз редактировалось AHAPXICT 29.09.2014, 22:54, всего редактировалось 2 раз(а).
Media Library it's bad - explorer it's good!
AHAPXICT M
Мастер
Аватара
Возраст: 46
Откуда: Киев
Репутация: 113
С нами: 4 года 1 месяц

Сообщение #310 kgena_ua » 29.09.2014, 22:50

AHAPXICT, должен "шпарить". Делал под Jerry Lee Lewis :smile:
Левый левел не в "колоре",
стр. 139 заменить на
if (xLanim > col) gr.FillSolidRect(col + xLanim + 2, yL, 10, h, color[2]);
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 53
Откуда: Украина, Днепр
Репутация: 351
С нами: 4 года 8 месяцев

Сообщение #311 kgena_ua » 13.10.2014, 01:25

Пока окончательная версия пикметра.
Как писал macarych : "Это визуализация, то бишь, "пища" для глаз, а не для ума."
Код: Выделить всё
// WSH Peak meter
// foo_vis_vumeter.dll required

function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }   
function RGBA(r, g, b, a) { return ((a << 24) | (r << 16) | (g << 8) | (b)); }    
var font = gdi.Font("Arial",9,1);   

var fso = new ActiveXObject("Scripting.FileSystemObject");         

var is_dll = fb.ProfilePath + "\\user-components\\foo_vis_vumeter\\foo_vis_vumeter.dll";
var dll;
if(!fso.FileExists( is_dll )) {dll = false} else {dll = true};


var ww, wh;   
var on_mouse = false;   
var s_color = RGB(90,118,135);   

var color = {   
   0:RGB(0,72,115),
   1:RGB(0,78,123),
   2:RGB(0,83,132),
   3:RGB(0,88,140),
   4:RGB(0,94,149),
   5:RGB(0,99,157),
   6:RGB(0,104,166),
   7:RGB(0,109,174),
   8:RGB(0,115,183),
   9:RGB(0,120,191),
   10:RGB(0,125,200),
   11:RGB(0,131,208),
   12:RGB(0,136,217),
   13:RGB(0,141,225),
   14:RGB(0,147,234),
   15:RGB(76,159,209),
   16:RGB(151,172,185),
   17:RGB(140,165,179),
   18:RGB(130,156,172),
   19:RGB(121,149,166),
   20:RGB(109,140,158),
   21:RGB(100,131,149),
   22:RGB(90,118,135),
   23:RGB(81,106,121),
   24:RGB(70,92,106),
   25:RGB(61,80,90),
   26:RGB(51,67,77),

};   
   
var db = {   
   0:-50,
   1:-30,
   2:-25,
   3:-20,
   4:-15,
   5:-13,
   6:-10,
   7:-7.5,
   8:-5,
   9:-3.5,
   10:-3,
   11:-2.5,
   12:-2,
   13:-1.5,
   14:-1,
   15:-0.5,
   16:0,
   17:0.1,
   18:1,
   19:1.5,
   20:2,
   21:2.5,
   22:3,
   23:3.5,
   24:5,
   25:7.5,
   26:10
};   
   
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;   
}   
   
function on_size() {   
    ww = window.Width;   
    wh = window.Height;   
}   

var points = 27;
var col = 10;      
var yL = 2;
var h = 2;   
var yLM = yL + h + 4;
var hM = 6;   //8
var yRM = yLM + 20;    12
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, RGB(0,0,0));   

    if (dll) {
        L = VUMeter.LeftLevel;   
        R = VUMeter.RightLevel;   
        LM = VUMeter.LeftPeak;   
        RM = VUMeter.RightPeak;   
    }
   
    var offset = (ww - col) / points;   
    var w = offset - 1;   
   
    if (fb.IsPlaying && on ==1 && dll) {   
        for (var i = 0; i <= points - 1; i = i + 1) {   

//            gr.FillSolidRect(col + i * offset, 0, 1, 1, color[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[6]);   

            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[6]);    

            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, xRanim <= wR ? color[15] : color[8]);   

            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, xRanim <= wR ? color[15] : color[8]);   

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

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

            gr.FillSolidRect(1 + col + i * offset, 1 + yLM, w, hM, ToDB(LM) > db[i] ? RGB(0,0,0) : RGBA(0,0,0,0));    
            gr.FillSolidRect(col + i * offset, yLM, w, hM, ToDB(LM) > db[i] ? color[i] : RGBA(0,0,0,0));    
            gr.FillSolidRect(col + i * offset, yLM, w, 1, ToDB(LM) > db[i] ? RGBA(255,255,255,40 + i * 3) : RGBA(0,0,0,0));    
            gr.FillSolidRect(col + i * offset, yLM, 1, hM, ToDB(LM) > db[i] ? RGBA(255,255,255,40 + i * 3) : RGBA(0,0,0,0));   

            gr.FillSolidRect(1 + col + i * offset, 1 + yRM, w, hM, ToDB(RM) > db[i] ? RGB(0,0,0) : RGBA(0,0,0,0));                       
            gr.FillSolidRect(col + i * offset, yRM, w, hM, ToDB(RM) > db[i] ? color[i] : RGBA(0,0,0,0));                       
            gr.FillSolidRect(col + i * offset, yRM, w, 1, ToDB(RM) > db[i] ? RGBA(255,255,255,40 + i * 3) : RGBA(0,0,0,0));    
            gr.FillSolidRect(col + i * offset, yRM, 1, hM, ToDB(RM) > db[i] ? RGBA(255,255,255,40 + i * 3) : RGBA(0,0,0,0));   

            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 (xLManim > col) gr.FillSolidRect(1 + col + xLManim + offset, 1 + yLM, 3, hM, RGB(0,0,0));               
            if (xLManim > col) gr.FillSolidRect(col + xLManim + offset, yLM, 3, 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 (xRManim > col) gr.FillSolidRect(1 + col + xRManim + offset, 1 + yRM, 3, hM, RGB(0,0,0));             
            if (xRManim > col) gr.FillSolidRect(col + xRManim + offset, yRM, 3, hM, color[Math.round(xRManim/offset)]);    

            if (xLManim2 > col) gr.FillSolidRect(col + xLManim2 + offset - 0, yLM, 5, hM, color[Math.round(xRManim2/offset)]);    
            if (xRManim2 > col) gr.FillSolidRect(col + xRManim2 + offset - 0, yRM, 5, hM, color[Math.round(xLManim2/offset)]);    
        }
    }else {
        xLM = 0; xRM = 0; xLManim = 0; xRManim = 0;
    }      

    if (dll) {
        for (var i = 0; i <= points - 1; i = i + 2) {
            var text_w = gr.CalcTextWidth(db[i], font);   
            if (i > 2) gr.GdiDrawText(db[i], font, on == 1 ? i <= 10 ? color[10] : color[i] : s_color, col + offset * i - text_w / 2, yLM + hM + 1, ww, wh);   
        }

        for (var i = 1; i <= points - 2; i = i + 2) {
            var text_w = gr.CalcTextWidth(db[i], font);   
            if (i > 1) gr.FillSolidRect(col + i * offset - 2, yLM + hM + 5, 3, 3, fb.IsPlaying && on == 1 ? i <= 10 ? color[10] : color[i] : s_color);      
        }
       
        gr.GdiDrawText("L", font, fb.IsPlaying && on ==1 || on_mouse ? color[10] : s_color, col - 9, yLM - 2, ww, wh);   
        gr.GdiDrawText("R", font, fb.IsPlaying && on ==1 || on_mouse ? color[10] : s_color, col - 9, yRM - 2, ww, wh);   
        gr.GdiDrawText("db", font, fb.IsPlaying && on ==1 ? color[10] : s_color, col, yLM + hM + 1, ww, wh);   
    }

//    gr.GdiDrawText(ToDB(L), font, RGB(250,250,250), 0, 0, ww, wh);   
//    gr.GdiDrawText(ToDB(LM) , font, RGB(250,250,250), 0, yLM + 3, ww, wh);   
//    gr.GdiDrawText(ToDB(RM), font, RGB(250,250,250), 0, yRM - 4, ww, wh);   
}   
   
var seek_timer;   
function on_playback_new_track() {   
    seek_timer && window.ClearInterval(seek_timer);   
    seek_timer = window.SetInterval(function() {   

        kL = kL + 6;
        wLanim = wLanim - 0.01 * kL;
        kR = kR + 6;
        wRanim = wRanim - 0.01 * kR;           


        xLanim = xLanim - 0.5;   
        xRanim = xRanim - 0.5;
        kLM = kLM + 15;   
        kRM = kRM + 15;          
        xLManim = xLManim - 0.002 * kLM;           
        xRManim = xRManim - 0.002 * kRM;   
        kLM2 = kLM2 + 0.5;
        kRM2 = kRM2 + 0.5;          
        xLManim2 = xLManim2 + kLM2;
        xRManim2 = xRManim2 + kRM2;
//        window.RepaintRect(col, yL, ww - col, yR + h)
        window.Repaint();    
    },10);   
}     
   
function on_playback_stop(reason) {   
    if(reason == 0) {   
        window.ClearInterval(seek_timer);   
        window.Repaint();    
    }
}   

var on = 1;
function on_mouse_lbtn_dblclk(x,y) {   
   on = on == 1 ? 0 : 1;
    window.Repaint();
}      

function on_mouse_move(x,y) {
    on_mouse = true;
    window.SetCursor(32649);
    window.Repaint();
}

function on_mouse_leave() {
    on_mouse = false;
    window.SetCursor(32512);
    window.Repaint();
}

function on_mouse_wheel(step) {
    VUMeter.Offset=VUMeter.Offset+step;
}

function on_playback_time(){
    if(!seek_timer) on_playback_new_track();
    window.Repaint();
}
   

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

Сообщение #312 ooo » 22.10.2014, 16:01

Где скачать этот foo_vis_vumeter.dll
ooo
Новичок
Репутация: 0
С нами: 3 года 1 месяц

Сообщение #313 LUR » 22.10.2014, 16:47

LUR M
Модератор
Аватара
Возраст: 35
Откуда: Минск
Репутация: 185
С нами: 5 лет

Сообщение #314 kgena_ua » 07.11.2014, 22:46

Пикметр финал.
Код: Выделить всё
// WSH Peak meter
// foo_vis_vumeter.dll required

function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }   
function RGBA(r, g, b, a) { return ((a << 24) | (r << 16) | (g << 8) | (b)); }    
var font = gdi.Font("Arial",9,1);   

var fso = new ActiveXObject("Scripting.FileSystemObject");         

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

var ww, wh;   
var on_mouse = false;   
var s_color = RGB(90,118,135);   

var color = {   
   0:RGB(0,72,115),
   1:RGB(0,78,123),
   2:RGB(0,83,132),
   3:RGB(0,88,140),
   4:RGB(0,94,149),
   5:RGB(0,99,157),
   6:RGB(0,104,166),
   7:RGB(0,109,174),
   8:RGB(0,115,183),
   9:RGB(0,120,191),
   10:RGB(0,125,200),
   11:RGB(0,131,208),
   12:RGB(0,136,217),
   13:RGB(0,141,225),
   14:RGB(0,147,234),
   15:RGB(76,159,209),
   16:RGB(151,172,185),
   17:RGB(140,165,179),
   18:RGB(130,156,172),
   19:RGB(121,149,166),
   20:RGB(109,140,158),
   21:RGB(100,131,149),
   22:RGB(90,118,135),
   23:RGB(81,106,121),
   24:RGB(70,92,106),
   25:RGB(61,80,90),
   26:RGB(51,67,77),

};   
   
var db = {   
   0:-30,
   1:-25,
   2:-20,
   3:-17.5,
   4:-15,
   5:-12.5,
   6:-10,
   7:-7.5,
   8:-5,
   9:-3.5,
   10:-3,
   11:-2.5,
   12:-2,
   13:-1.5,
   14:-1,
   15:-0.5,
   16:0,
   17:0.1,
   18:1,
   19:1.5,
   20:2,
   21:2.5,
   22:3,
   23:3.5,
   24:5,
   25:7.5,
   26:10
};   
   
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;   
}   
   
function on_size() {   
    ww = window.Width;   
    wh = window.Height;   
}   

var points = 27;
var col = 5;      
var yL = 2;
var h = 2;   
var yLM = yL + h + 4;
var hM = 6;   //8
var yRM = yLM + 20;    12
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, RGB(0,0,0));   

    if (dll) {
        L = VUMeter.LeftLevel;   
        R = VUMeter.RightLevel;   
        LM = VUMeter.LeftPeak;   
        RM = VUMeter.RightPeak;   
    }
   
    var offset = (ww - col) / points;   
    var w = offset - 1;   
   
    if (fb.IsPlaying && on ==1 && dll) {   
        for (var i = 0; i <= points - 1; i = i + 1) {   
           
            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[8]);   

            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[8]);    

            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, xRanim <= wR ? color[15] : color[8]);   

            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, xRanim <= wR ? color[15] : color[8]);   

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

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

            var PM_color = i > 8 ? color[i] : color[8];

            gr.FillSolidRect(col + i * offset, yLM, w, hM, ToDB(LM) > db[i] ? PM_color : RGBA(0,0,0,0));    
                      
            gr.FillSolidRect(col + i * offset, yRM, w, hM, ToDB(RM) > db[i] ? PM_color : RGBA(0,0,0,0));                       

            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 (xLManim > col) gr.FillSolidRect(col + xLManim + offset, yLM, 2, 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 (xRManim > col) gr.FillSolidRect(col + xRManim + offset, yRM, 2, hM, color[Math.round(xRManim/offset)]);    

            if (xLManim2 > col) gr.FillSolidRect(col + xLManim2 + offset - 0, yLM, 3, hM, color[Math.round(xRManim2/offset)]);    
            if (xRManim2 > col) gr.FillSolidRect(col + xRManim2 + offset - 0, yRM, 3, hM, color[Math.round(xLManim2/offset)]);    
        }
    }else {
        xLM = 0; xRM = 0; xLManim = 0; xRManim = 0;
    }      

    if (dll) {
        for (var i = 0; i <= points - 1; i = i + 2) {
            var text_w = gr.CalcTextWidth(db[i], font);   
            if (fb.IsPlaying && on ==1) if (i > 2) gr.GdiDrawText(db[i], font, color[8], col + offset * i - text_w / 2, yLM + hM + 1, ww, wh);
        }

        for (var i = 1; i <= points - 2; i = i + 2) {
            var text_w = gr.CalcTextWidth(db[i], font);   
            if (fb.IsPlaying && on ==1) if (i > 1) gr.FillSolidRect(col + i * offset - 2, yLM + hM + 5, 3, 3, color[8]);      
        }
       
//        gr.GdiDrawText("L", font, fb.IsPlaying && on ==1 || on_mouse ? color[10] : s_color, col - 9, yLM - 2, ww, wh);   
//        gr.GdiDrawText("R", font, fb.IsPlaying && on ==1 || on_mouse ? color[10] : s_color, col - 9, yRM - 2, ww, wh);   
        gr.GdiDrawText("db", font, on ==1 || on_mouse ? color[10] : s_color, col, yLM + hM + 1, ww, wh);   
    }

//    gr.GdiDrawText(ToDB(LM) , font, RGB(250,250,250), 0, yLM + 3, ww, wh);   
//    gr.GdiDrawText(ToDB(RM), font, RGB(250,250,250), 0, yRM - 4, ww, wh);   
}   
   
var seek_timer;   
function on_playback_new_track() {   
    seek_timer && window.ClearInterval(seek_timer);   
    seek_timer = window.SetInterval(function() {   

        kL = kL + 6;
        wLanim = wLanim - 0.01 * kL;
        kR = kR + 6;
        wRanim = wRanim - 0.01 * kR;           


        xLanim = xLanim - 0.5;   
        xRanim = xRanim - 0.5;
        kLM = kLM + 15;   
        kRM = kRM + 15;          
        xLManim = xLManim - 0.002 * kLM;           
        xRManim = xRManim - 0.002 * kRM;   
        kLM2 = kLM2 + 0.5;
        kRM2 = kRM2 + 0.5;          
        xLManim2 = xLManim2 + kLM2;
        xRManim2 = xRManim2 + kRM2;
//        window.Repaint();  // for transparent mode only      
    },10);   
}     
   
function on_playback_stop(reason) {   
    if(reason == 0) {   
        window.ClearInterval(seek_timer);   
        window.Repaint();    
    }
}   

var on = 1;
function on_mouse_lbtn_dblclk(x,y) {   
   on = on == 1 ? 0 : 1;
    window.Repaint();
}      

function on_mouse_move(x,y) {
    on_mouse = true;
    window.SetCursor(32649);
}

function on_mouse_leave() {
    on_mouse = false;
    window.SetCursor(32512);
    window.Repaint();
    Tooltip.Deactivate();
}

function on_mouse_wheel(step) {
    VUMeter.Offset=VUMeter.Offset+step;
    Tooltip.Text = VUMeter.Offset + " db";
    Tooltip.Activate();   
}

function on_playback_time(){
    if(!seek_timer) on_playback_new_track();
    window.Repaint();
}
   
var Tooltip = window.CreateTooltip();

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

Сообщение #315 sudden » 07.11.2014, 22:49

kgena_ua, этот скрипт заменяет .bin файл с рисунком?
sudden M
Бывалый
Репутация: 17
С нами: 10 лет 10 месяцев

Сообщение #316 kgena_ua » 07.11.2014, 22:59

sudden, да, если я правильно понял вопрос. Это скрипт для wSH панели, для работы которого требуется наличие библиотеки foo_vis_vumeter в папке user-components.
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 53
Откуда: Украина, Днепр
Репутация: 351
С нами: 4 года 8 месяцев

Сообщение #317 AHAPXICT » 08.11.2014, 01:06

kgena_ua, и как оно нечего? У меня как всегда к вам пару вопросов накопилось. :smile:
Media Library it's bad - explorer it's good!
AHAPXICT M
Мастер
Аватара
Возраст: 46
Откуда: Киев
Репутация: 113
С нами: 4 года 1 месяц

Сообщение #318 Гармонист » 07.12.2014, 19:28

У меня стандартный Вуметр. Хочу поставить ВуМетр типа "градусник". Можете написать какие шаги нужно сделать и где чего скачать?
1....
2....
3 и т.д.
Гармонист
Бывалый
Репутация: -4
С нами: 4 года 6 месяцев

Сообщение #319 macarych » 08.12.2014, 19:27

Гармонист писал(а):и где чего скачать
тут тема есть с готовыми "скинами", там ищите
Гармонист писал(а):какие шаги нужно сделать
качаете 'скин' и помещаете его в одну папку с foo_vis_vumeter.dll, потом через контекстное меню vu meter'a выбираете этот "скин"

Ответ на Ваш вопрос настолько очевиден и лежит на поверхности, что за сутки так и не нашлось желающих ответить, я ответил лишь что бы указать на это.
Сами-то искать пробовали?
macarych M
Гуру
Аватара
Репутация: 272
С нами: 8 лет 11 месяцев

Сообщение #320 Гармонист » 10.12.2014, 23:33

Спасибо. Ответ лежит на поверхности...вот я и ищу эту поверхность. Незнающим я быть не стесняюсь. Тем более ссылки в первом посте не работают.
Гармонист
Бывалый
Репутация: -4
С нами: 4 года 6 месяцев

Пред.След.

Вернуться в Плагины