foobar2000

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » foobar2000 » Частные конфигурации » VU Meter skins (WSH)


VU Meter skins (WSH)

Сообщений 1 страница 28 из 28

1

Обсуждение и выкладывание скриптов WSH, работающих с VU Meter

Отредактировано San_dr (2012-06-04 22:23:55)

0

2


Обсуждение и выкладывание скриптов WSH, работающих с VU Meter.
Вопросы и ответы, адресованные DRON-у, лучше размещать в основной теме компонента.
----------------------------------------------------------------------------------------------------------------------------------

Ок, и зонировать, нарезая диапазоны по ToDB(LM) ?
Дальше я уперся. Если делать универсально, т.е. под любую бэкграунд-шкалу, с заранее неизвестным количеством светодиодов и их расположением на шкале, надо в WSH делать кусок, эквивалентный Вашему VUEditorGUI с расстановкой точек. Только здесь нужно вводить диапазоны по уровню и соответствующие каждому диапазону X(i)min и X(i)max - левые и правые границы светодиодных сегментов в процентах к ww (ну или к wh, в зависимости от ориентации шкалы). При фиксированном и известном количестве светодиодов можно было бы организовать диалог с юзером через окно Properties с 4-мя переменными на каждый уровень. А вот как организовать диалог для заполнения массива переменной длины, не соображу. В бесконечном цикле поднимать popup-окно с 4-мя полями для заполнения и кнопкой "конец диалога" для прерывания процесса ? Как вообще организуются диалоги в WSH, я что-то не припомню ни одного ? Или не морочиться, создать массив 30х4, окнище Properties с 30-ю строчками, забить изначально массив нулями и пусть юзер сколько заполнит - столько и будет ? Т.е. например, заполнит строчку "LED №2 " -25, -20, 14.2, 13.8 (при ToDB(LM) в диапазоне от -25 до -20 зажигать сегмент от ww/14.2 до ww/13.8)

Отредактировано onv (2012-06-06 10:38:27)

0

3

San_dr

Индикатор баланса (звуковой сцены, как угодно) не могу придумать, как органично вписать в LED-шкалу. Горизонтально, вроде, правильно, но на этой шкале - как здрасьте (см. видео). Пробовал вертикальное перемещение (размещал между +2 и +4дБ - тоже не ахти. Придумай что-нибудь :)

Свернутый текст



Если есть время и желание покрутить это вживую, в мой предыдущий скрипт добавь

var LR = 0;
function ToLine(Level){return Level;}

и в on_paint(gr)

LR = ToLine(L) - ToLine(R);
gr.FillSolidRect(ww/2 + ww*LR, wh/2-10, 5, 20, RGBA(255,255,55,100));

Отредактировано onv (2012-06-08 02:08:00)

0

4

Типа
http://savepic.net/2870085m.png
Немного расширил. Градиентная полупрозрачная заливка, левая и правая границы фиксированы. Центральная граница обеих полублоков  - двигается, поверх прикрыта более яркой "полоской" для четкости визуализации. Может стоит увеличить (компенсировать) яркость оцифровки шкалы, попадающей в "зону затопления"
В синем варианте светодиодов - баланс зеленый

0

5

Неплохой вариант, наверное, имеет право на жизнь в горизонтальном исполнении на вертикальном индикаторе. А с горизонтальным, похоже, ничто несовместимо. В общем случае, эта зона (твоя синяя) должна быть на всю ширину. А это будет жуть. Так что, как ни не хотелось заводить отдельное окно для такой мелочи, а, похоже, таки придется. Разве что туда же и индикатор пересадить :)

Свернутый текст



Отредактировано onv (2012-06-08 02:07:04)

0

6

onv, возможно твои проблемы дискретизации шкалы поможет решить такой пример, (создай горизонтальную панель WSH)

Код:
var ww = 0, wh = 0, j=6;
var g_syscolor = 0;
var COLOR_BTNFACE = 15;

function get_colors() {
    g_syscolor = utils.GetSysColor(COLOR_BTNFACE);
}
get_colors();

function on_size() {
    ww = window.Width;
    wh = window.Height;
}
function RGB(r, g, b) {return (0xff000000 | (r << 16) | (g << 8) | (b));}

function on_paint( gr ) { 
    gr.FillSolidRect(0, 0, ww, wh,g_syscolor);  
   var i = 0;
    while (i < ww+1) {
        gr.FillSolidRect(i,0,j,wh, RGB(55,55,55));
        i = i +11;    
    }
}

function on_colors_changed() {
    get_colors();
    window.Repaint();
}


ты должен привязаться к j - ширина светодиода, i - шаг

Отредактировано San_dr (2012-06-07 22:20:36)

0

7

А чем поможет этот матрац с шагом 11 ? :)  Нет, никакой сетчатой графической маской это не решить. Как бы ты ни дробил шкалу, каждый из сегментов останется частично засвечиваемым до тех пор, пока ты линейную пилу на входе не превратишь в ступеньки по числу светодиодов. Т.е., нужно разбить весь диапазон по уровню на зоны по количеству светодиодов и при любом уровне внутри конкретной зоны полностью зажигать соответствующий светодиод. Я это уже решил. Может быть, корявенько с точки зрения красоты кода, но зато настраивать шкалу по уровням элементарно.
В твоем примере ты прав в том, что в 99% случаев ширины светолиодов и межцентровки одинаковы и можно смело пользоваться просто счетчиком номера светодиода, давая одну неизменную поправку на неиспользуемые края окна.

Свернутый текст



Для этого достаточно :

Свернутый текст


добавить такие строчки

var ledlm = 0, ledrm = 0;

switch(true) {
    case ToDB(LM) < -25:                    ledlm =  0; break;
    case ToDB(LM) >= -25 && ToDB(LM) < - 20: ledlm =  1; break;
        case ToDB(LM) >= -20 && ToDB(LM) < - 17: ledlm =  2; break;
        case ToDB(LM) >= -17 && ToDB(LM) < - 15: ledlm =  3; break;
        case ToDB(LM) >= -15 && ToDB(LM) < - 12: ledlm =  4; break;
        case ToDB(LM) >= -12 && ToDB(LM) < - 10: ledlm =  5; break;
        case ToDB(LM) >= -10 && ToDB(LM) < -  8: ledlm =  6; break;
        case ToDB(LM) >= - 8 && ToDB(LM) < -  5: ledlm =  7; break;
        case ToDB(LM) >= - 5 && ToDB(LM) < -  3: ledlm =  8; break;
        case ToDB(LM) >= - 3 && ToDB(LM) <    0: ledlm =  9; break;
        case ToDB(LM) >=   0 && ToDB(LM) <    1: ledlm = 10; break;
        case ToDB(LM) >=   1 && ToDB(LM) <    2: ledlm = 11; break;
        case ToDB(LM) >=   2 && ToDB(LM) <    3: ledlm = 12; break;
        case ToDB(LM) >=   3:                    ledlm = 13; break;
            }
switch(true) {
    case ToDB(RM) < -25:                    ledrm =  0; break;
    case ToDB(RM) >= -25 && ToDB(RM) < - 20: ledrm =  1; break;
        case ToDB(RM) >= -20 && ToDB(RM) < - 17: ledrm =  2; break;
        case ToDB(RM) >= -17 && ToDB(RM) < - 15: ledrm =  3; break;
        case ToDB(RM) >= -15 && ToDB(RM) < - 12: ledrm =  4; break;
        case ToDB(RM) >= -12 && ToDB(RM) < - 10: ledrm =  5; break;
        case ToDB(RM) >= -10 && ToDB(RM) < -  8: ledrm =  6; break;
        case ToDB(RM) >= - 8 && ToDB(RM) < -  5: ledrm =  7; break;
        case ToDB(RM) >= - 5 && ToDB(RM) < -  3: ledrm =  8; break;
        case ToDB(RM) >= - 3 && ToDB(RM) <    0: ledrm =  9; break;
        case ToDB(RM) >=   0 && ToDB(RM) <    1: ledrm = 10; break;
        case ToDB(RM) >=   1 && ToDB(RM) <    2: ledrm = 11; break;
        case ToDB(RM) >=   2 && ToDB(RM) <    3: ledrm = 12; break;
        case ToDB(RM) >=   3:                    ledrm = 13; break;
            }

и заменить прорисовку на :

gr.FillSolidRect(25+(ww-35)*ledlm/13, wh/5, ww-(ww-35)*ledlm/13, wh/5, RGBA(0,0,0,255));
gr.FillSolidRect(25+(ww-35)*ledrm/13, wh/1.65, ww-(ww-35)*ledrm/13, wh/5, RGBA(0,0,0,255));

Отредактировано onv (2012-06-08 14:28:21)

0

8

San_dr

Хочешь игрушку прикольную (реалтайм АРУ, Replaygain на лету) ? :)
Добавляешь такое:

var LRmax=-25;

в on_paint(gr) :

if(ToDB(LM) > LRmax) {LRmax=ToDB(LM)};
if(ToDB(RM) > LRmax) {LRmax=ToDB(RM)};
if(LRmax > 0) {fb.RunMainMenuCommand("Playback/Volume/Down"); LRmax = -25};

Перестараешься с оффсетом - улетишь в -100дБ :)

0

9

onv написал(а):

но зато настраивать шкалу по уровням элементарно

ага, очень элементарно)

Код:
var ToLed = function(MValue)
{
    var Values = [-25, -20, -17, -15, -12, -10, -8, -5, -3, 0, 1, 2, 3];
    var DBValue = ToDB(MValue);
    
    for (var i = 0; i < Values.length; i++)
    {
        if (DBValue < Values[i]) return i;
    }
    return Values.length;
}

gr.FillSolidRect(25+(ww-35)*ToLed(LM)/13, wh/5, ww-(ww-35)*ledlm/13, wh/5, RGBA(0,0,0,255));
gr.FillSolidRect(25+(ww-35)*ToLed(RM)/13, wh/1.65, ww-(ww-35)*ledrm/13, wh/5, RGBA(0,0,0,255));


а вот за switch(true) вам отдельное спасибо, он меня сильно порадовал (в хорошем смысле)

0

10

чисто скриптовый VU, без картинки
http://savepic.net/2822705.png
Скрипт:

скрытый текст

// @author "VU Meter component/object by DRON, jscript by Br3tt aka Falstaff >> http://br3tt.deviantart.com"
// @adapted  - San_dr
ColorTypeDUI = {
    background: 1,
    textcolor: 0
};
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));
};
// VUMeter Object
VUMeter = new ActiveXObject("VUMeter");
VUMeter.RegisterWindow(window.ID);
// Globals
var ww = 0, wh = 0;
var g_backcolor = 0;
var g_textcolor = 0;
var g_syscolor = 0;
var COLOR_BTNFACE = 15;
var tooltip_timer = false;
function get_colors() {
        g_backcolor = window.GetColorDUI(ColorTypeDUI.background);
        g_syscolor = utils.GetSysColor(COLOR_BTNFACE);
        g_textcolor = window.GetColorDUI(ColorTypeDUI.textcolor);
}
get_colors();
function on_size() {
    ww = window.Width;
    wh = window.Height;
};
function on_paint(gr) {
    N=wh/12;
    L=VUMeter.LeftLevel;
    R=VUMeter.RightLevel;
    LM = VUMeter.LeftPeak;
    RM = VUMeter.RightPeak;
    // create draw area
    // fill bgcolor
    gr.FillSolidRect(0, 0, ww, wh, g_syscolor);
    gr.FillSolidRect(0, 2*N, ww, wh-4*N, g_backcolor);
    // Draw Peak
        // left peak
          var i = 0;
    while (i < ww*LM+1) {
       var g_leftcolor = ( i>ww*5/7 ) ? RGB(255,140,0) : RGB(70,100,140);
        gr.FillSolidRect(i-4, 2*N, 9, 3*N, g_leftcolor);
        i = i +11;
    }
        // right peak
          var k = 0;
    while (k < ww*RM+1) {
       var g_rightcolor = ( k>ww*5/7 ) ? RGB(255,140,0) : RGB(70,100,140);
        gr.FillSolidRect(k-4, 7*N, 9, 3*N, g_rightcolor);
        k = k +11;   
    }
    // left level
     var g_leftcolorL = ( ww*L>ww*5/7 ) ? RGBA(255,90,0,220) : RGBA(40,255,0,190);
    gr.FillGradRect(0, N, ww*L, 4*N, 0, RGBA(150,155,0,200), g_leftcolorL, 1);
    gr.FillSolidRect(ww*L-3, N, 4, 4*N, RGB(255,255,245));
    // right level
     var g_rightcolorR = ( ww*R>ww*5/7 ) ? RGBA(255,90,0,220) : RGBA(40,255,0,190);
    gr.FillGradRect(0, 7*N, ww*R, 4*N, 0, RGBA(150,155,0,200),g_rightcolorR, 1);
    gr.FillSolidRect(ww*R-3, 7*N, 4, 4*N, RGB(255,255,245));
        // background
    gr.DrawRect(2, N+3, ww-4, wh-2*N-6,6,  g_backcolor);
       
}
function on_colors_changed() {
    get_colors();
    window.Repaint();
}

пиковые - из наборных светодиодов 2-х цветов, среднеквадратичные - градиентная сплошная поверх (цвет не только градиентный, немного прозрачный, но и зависит от уровня)
щас АРУ попробую :)

Отредактировано San_dr (2012-06-09 13:48:35)

0

11

k6

Да, так намного красивее и оптимальнее, спасибо. Я ж сразу предупреждал, что корявенько, топорно, но наглядно :) Только одна маленькая личная просьба - проверять вживую код перед публикацией. Я, даже не пробуя, вижу нестыковки, так у людей работать не будет. Для наброска для примера это абс. нормально, будь он в ЛС, а на форуме лучше проверять во избежание лишних вопросов потом. Теперь так же красиво надо сделать смену на лету бэкграундов по кругу из набора по левому даблклику, чтобы не перебивать DRON-овский перебор по левому синглу :)

San_dr

Если делаешь градиентную, добавь поканальный вертикальный (90) градиент в обе стороны от центра полосы каждого канала (добавь выпуклости полосам). У меня так в сборках регулятор уровня рисуется, смотрится изрядно веселее плоского.

Отредактировано onv (2012-06-09 12:33:08)

0

12

onv написал(а):

смотрится изрядно веселее плоского

есть такое мнение, что это определяется общим стилем оформления

0

13

MrGrey написал(а):

есть такое мнение, что это определяется общим стилем оформления

Ну, да, никто и не спорит, плоский вариант уже есть, готов, почему бы выпуклый не попробовать ? :) Тем более, что вертикальный градиент можно ведь делать не просто линейной растяжкой двух зеркальных в обе стороны, а разбить на немножко зон ( сымитировать выпуклость или вогнутость, трапецеидальность или эффект чеканки, как вариант),  сделать понизу полосы красивую тень, например. Сам светящийся прямоугольник светодиода можно набирать решеткой из тонких световых полосок, сеткой из светящихся точек малого диаметра... Были бы варианты, из чего подбирать лучший под конкретный стиль оформления. У San_dr с фантазией все в порядке, он разберется :)

Отредактировано onv (2012-06-09 16:09:56)

0

14

onv
подскажи, плз чем ты "движущиеся картинки"  http://foobar2000.ho.ua/forum/qip/i-m_so_happy.gif вместо скриншотов снимаешь ? Вот понадобилась.

0

15

Camtasia Studio 7.1

0

16

так это usb vebcamera нужна? а то у меня на ноуте встроенная, смотрит в одну сторону с монитором, зеркало нужно :)

0

17

San_dr
http://foobar2000.ho.ua/forum/min/rofl.gif Нет, вебка не нужна. Камтазия (и подобные) снимают видео с экрана, включая Ваш курсор (зависит от настроек).

0

18

установил, отснял, но видно нужны еще плагины для того, чтоб сконвертить в понятный проигрывателям стандарт. В общем, кому интересно - испытайте и посмотрите этот чисто скриптовый VU meter

код|

// @author "VU Meter component/object by DRON, jscript by Br3tt aka Falstaff >> http://br3tt.deviantart.com"
// @adapted  - San_dr
window.MaxHeight=36;
ColorTypeDUI = {
    background: 1,
    selcolor: 3,
};
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));
};
// VUMeter Object
VUMeter = new ActiveXObject("VUMeter");
VUMeter.RegisterWindow(window.ID);
// Globals
var ww = 0, wh = 0;
var g_backcolor = 0;
var g_selcolor = 0;
var g_syscolor = 0;
var COLOR_BTNFACE = 15;
var tooltip_timer = false;
function get_colors() {
        g_backcolor = window.GetColorDUI(ColorTypeDUI.background);
        g_syscolor = utils.GetSysColor(COLOR_BTNFACE);
        g_selcolor = window.GetColorDUI(ColorTypeDUI.selcolor);
        g_textcolor_hl = window.GetColorDUI(2);
}
get_colors();
function on_size() {
    ww = window.Width;
    wh = window.Height;
};
function on_paint(gr) {
    D=(ww-43)/21
    N=wh/12;
    L=VUMeter.LeftLevel;
    R=VUMeter.RightLevel;
    LM = VUMeter.LeftPeak;
    RM = VUMeter.RightPeak;
    var LR = 0;
function ToLine(Level){return Level;}
LR = ToLine(R) - ToLine(L);
    // create draw area
    // fill bgcolor
    gr.FillSolidRect(0, 0, ww, wh, g_backcolor);
    // Draw Peak
        // left peak
          var i = -D;
    while (i < ww*LM+1) {
       var g_leftcolor = ( i>14*D+28 && i < 16*D+32) ? RGBA(230,255,0,200) : (i > 16*D+32 && i <18*D +32 ) ? RGB(250,220,0) : (i > 18*D +32) ?  RGB(255,55,0) : RGB(10,105,250,100) ;
        gr.FillSolidRect(i, 0, D, 5*N+1, g_leftcolor);
        i = i +D+2;
    }
        // right peak
          var k = -D;
    while (k < ww*RM+1) {
       var g_rightcolor = ( k>14*D+28 && k < 16*D+32) ? RGBA(230,255,0,200) : (k > 16*D+32 && k <18*D +32 ) ? RGB(250,220,0) : (k > 18*D +32) ?  RGB(255,55,0) : RGB(10,105,250,100) ;
        gr.FillSolidRect(k, 7*N-1, D, 5*N+1, g_rightcolor);
        k = k +D+2;   
    }
    // left level
    gr.FillGradRect(0, 0, ww*L, 5*N+1, 0, RGBA(150,155,60,177), RGBA(220,250,177,227), 1);
    gr.FillSolidRect(ww*L-3, 0, 4, 5*N+1, RGB(185,85,185));
    // right level
    gr.FillGradRect(0, 7*N-1, ww*R, 5*N+1, 0, RGBA(150,155,60,177),RGBA(220,250,177,227), 1);
    gr.FillSolidRect(ww*R-3, 7*N-1, 4, 5*N+1, RGB(185,85,185));
        // background
    gr.FillGradRect(0, 5*N, ww/2+ ww*LR, 2*N+2,0, g_backcolor, g_selcolor);
    gr.FillGradRect(ww/2+ ww*LR, 5*N, ww/2- ww*LR, 2*N+2,0,g_selcolor,g_backcolor);
    gr.FillSolidRect(ww/2 + ww*LR-2, 5*N, 5, 2*N+2, g_textcolor_hl);
    gr.GdiDrawText("R",gdi.Font("Tahoma", 3*N,1),g_syscolor, -4, 5*N-1, 2*D, 3*N,0x00000001);
    gr.GdiDrawText("L",gdi.Font("Tahoma", 3*N,1),g_syscolor, 20*D+36, 5*N-1, 2*D, 3*N,0x00000001);
    gr.GdiDrawText("S T E R E O P A N O R A M E R",gdi.Font("Tahoma", 3*N,1),g_syscolor&0x11aaaaaa, 3*D+6, 5*N-1, 20*D, 3*N,0x00000001);
    gr.DrawRect(0, 0, ww, wh,4,  g_backcolor);
}
function on_colors_changed() {
    get_colors();
    window.Repaint();
}

Отредактировано San_dr (2012-06-12 22:15:06)

0

19

http://savepic.net/2934964.png
а это мелкий вариант, без панорамометра

код|

// @author "VU Meter component/object by DRON, jscript by Br3tt aka Falstaff >> http://br3tt.deviantart.com"
// @adapted  - San_dr
window.MaxHeight=window.MinHeight=25;
ColorTypeDUI = {
    background: 1,
    textcolor: 0
};
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));
};
// VUMeter Object
VUMeter = new ActiveXObject("VUMeter");
VUMeter.RegisterWindow(window.ID);
// Globals
var ww = 0, wh = 0;
var g_backcolor = 0;
var g_textcolor = 0;
var g_syscolor = 0;
var COLOR_BTNFACE = 15;
var tooltip_timer = false;
function get_colors() {
        g_backcolor = window.GetColorDUI(ColorTypeDUI.background);
        g_syscolor = utils.GetSysColor(COLOR_BTNFACE);
        g_textcolor = window.GetColorDUI(ColorTypeDUI.textcolor);
}
get_colors();
function on_size() {
    ww = window.Width;
    wh = window.Height;
};
function on_paint(gr) {
    D=(ww-43)/21
    N=wh/12;
    L=VUMeter.LeftLevel;
    R=VUMeter.RightLevel;
    LM = VUMeter.LeftPeak;
    RM = VUMeter.RightPeak;
    // create draw area
    // fill bgcolor
    gr.FillSolidRect(0, 0, ww, wh, g_backcolor);
    // Draw Peak
        // left peak
          var i = -D;
    while (i < ww*LM+1) {
       var g_leftcolor = ( i>14*D+28 && i < 16*D+32) ? RGBA(230,255,0,200) : (i > 16*D+32 && i <18*D +32 ) ? RGB(250,220,0) : (i > 18*D +32) ?  RGB(255,55,0) : RGB(10,105,250,100) ;
        gr.FillSolidRect(i, 0, D, 5*N+1, g_leftcolor);
        i = i +D+2;
    }
        // right peak
          var k = -D;
    while (k < ww*RM+1) {
       var g_rightcolor = ( k>14*D+28 && k < 16*D+32) ? RGBA(230,255,0,200) : (k > 16*D+32 && k <18*D +32 ) ? RGB(250,220,0) : (k > 18*D +32) ?  RGB(255,55,0) : RGB(10,105,250,100) ;
        gr.FillSolidRect(k, 7*N-1, D, 5*N+1, g_rightcolor);
        k = k +D+2;   
    }
    // left level
    gr.FillGradRect(0, 0, ww*L, 5*N+1, 0, RGBA(150,155,60,177), RGBA(220,250,177,227), 1);
    gr.FillSolidRect(ww*L-3, 0, 4, 5*N+1, RGB(185,85,185));
    // right level
    gr.FillGradRect(0, 7*N-1, ww*R, 5*N+1, 0, RGBA(150,155,60,177),RGBA(220,250,177,227), 1);
    gr.FillSolidRect(ww*R-3, 7*N-1, 4, 5*N+1, RGB(185,85,185));
        // background
    gr.DrawRect(0, 0, ww, wh,4,  g_backcolor);   
}
function on_colors_changed() {
    get_colors();
    window.Repaint();
}

0

20

Не подскажете, как просимулировать флуоресцентный индикатор? Примерно, такой.
http://img5.imageshost.ru/imgs/090225/42e8fe87284e71417b479106daa99728/874841f5d535a911012c1be92b942984.jpg
Если что, в штатно работающем индикаторе элементы включаются сразу и полностью.
На WSH можно сделать такое с помощью картинок? Прозрачные PNG (для накала и стекла) поддерживаются?

0

21

Инженер Овцеухов написал(а):

Прозрачные PNG (для накала и стекла) поддерживаются?

да, нужна хорошая фотка без перспективных искажений незажженного индикатора (т.е. снимок д.б. выполнен не короткофокусной "мыльницей". Остальное делатся в графическом редакторе полупрозрачным размытием. Сама нить - как желто-красная линия, можно постоянно горящая, можно выключать на стопе и паузе - установить порог этого "светодиода" в - 60дб.

Отредактировано San_dr (2012-06-13 07:00:13)

0

22

да, нужна хорошая фотка

Скорее всего, буду рисовать руками, возможно, что по чертежу из паспорта индикатора.
Единственное, не идеально понимаю английский язык, а на Гидрогене 70 страниц. Может кто в сам движок носом тыкнуть?

0

23

Движок https://sites.google.com/site/foobar200 … me/vumeter
редактор с описанием https://sites.google.com/site/foobar200 … Editor.zip
еще описание VU Meter# (пост 110)

Отредактировано San_dr (2012-06-13 10:26:40)

0

24

San_dr написал(а):

Движок https://sites.google.com/site/foobar200 … me/vumeter
редактор с описанием https://sites.google.com/site/foobar200 … Editor.zip
еще описание VU Meter# (пост 110)

Сие понятно, только вот на VFD элементы не могут светиться с разной яркостью. Сегмент либо включен, либо выключен. Затем и задал вопрос в теме именно по скриптовому движку.

0

25

Инженер Овцеухов написал(а):

VFD элементы не могут светиться с разной яркостью. Сегмент либо включен, либо выключен

на деле даже у VFD элементов не идеальная переключательная характеристика - на микроуровне порог размыт. редактор (опция add custom...) позволяет вводить необходимую для полной реальности остроту зажигания сегмента
http://savepic.net/2934850m.png

0

26

San_dr написал(а):

WSH PeakMeter - очень "лёгкий" скрипт на 60 строк
http://savepic.net/2834393.png
http://savepic.net/2883545.png
http://rghost.ru/download/38475421/fd6b … es-Peak.7z
(Скрипт в архиве)
картинку vu_bg.png расположить по адресу: foobar2000\themes\fooRazor\images-Peak

Отредактировано San_dr (2012-06-04 22:23:55)

0

27

WSH, горизонтальный,  VU-meter, пикметр, многоцветный, шкала после минус 1 дБ, DUI, использует шрифт "EuropeExt" - в гугле поиск "EuropeExt шрифт скачать"
http://savepic.net/3077980.png

код

// @author "VU Meter component/object by DRON, jscript by Br3tt aka Falstaff >> http://br3tt.deviantart.com"
// @adapted  - San_dr
window.MaxHeight=window.MinHeight=36;
window.MinWidth=124;
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));
};
// VUMeter Object
VUMeter = new ActiveXObject("VUMeter");
VUMeter.RegisterWindow(window.ID);
// Globals
var ww = 123, wh = 0;
var g_backcolor =RGB(30,40,40);
var tooltip_timer = false;
function on_size() {
    ww = window.Width;
    wh = window.Height;
};
function on_paint(gr) {
    D=(ww-43)/21
    N=wh/12;
    L=VUMeter.LeftLevel;
    R=VUMeter.RightLevel;
    LM = VUMeter.LeftPeak;
    RM = VUMeter.RightPeak;
    // create draw area
    // fill bgcolor
    gr.FillGradRect(0, 0, ww/2, wh,0,g_backcolor, RGB(80,110,110));
    gr.FillGradRect(ww/2, 0, ww/2, wh,0,RGB(80,110,110), g_backcolor);
    gr.FillSolidRect(ww/2, 0, 1, wh,RGB(80,110,110));
        // шкала
          var S = -1;
    while (S < ww+1) {
        gr.FillSolidRect(S,3,1,30,RGB(100,130,130));
        S = S+D+2;   
    }
    gr.FillSolidRect(3,12, ww-6,13,RGBA(0,0,0,80));
    gr.GdiDrawText("—",gdi.Font("tahoma", 14,1),RGB(100,255,0),-D,8, 30, 12,0x00000001);
    gr.GdiDrawText("60",gdi.Font("EuropeExt", 9,1),RGB(0,200,0),5,13, 30, 12,0x00000001);
    gr.GdiDrawText("-40",gdi.Font("EuropeExt", 9,1),RGB(0,200,0),4*D+6,13, 30, 12,0x00000001);
    gr.GdiDrawText("-20",gdi.Font("EuropeExt", 9,1),RGB(0,200,0),7*D+32,13, 30, 12,0x00000001);
    gr.GdiDrawText("-10",gdi.Font("EuropeExt", 9,1),RGB(0,200,0),12*D+32,13, 30, 12,0x00000001);
    gr.GdiDrawText("0",gdi.Font("EuropeExt", 9,1),RGB(210,210,100),17*D+33,13, 30, 12,0x00000001);
    gr.GdiDrawText("2",gdi.Font("EuropeExt", 9,1),RGB(220,170,100),18*D+36,13, 30, 12,0x00000001);
    gr.GdiDrawText("4",gdi.Font("EuropeExt", 9,1),RGB(255,170,100),19*D+36,13, 30, 12,0x00000001);
    gr.GdiDrawText("+",gdi.Font("tahoma", 14,1),RGB(255,100,0),20*D+34,8, 30, 20,0x00000001);
    // Draw Peak
        // left peak
          var i = -D;
    while (i < ww*LM+1) {
       var g_leftcolor = ( i>17*D+34 && i < 18*D+36) ? RGB(177,227,127) : (i > 18*D+36 && i <19*D +38 ) ? RGB(250,222,0) : (i > 19*D +38 && i <20*D +40) ?  RGB(255,160,122) : (i > 20*D +40) ?  RGB(255,0,50) : RGBA(120,200,255,160) ;
        gr.FillSolidRect(i, 2, D, 5*N-6, g_leftcolor);
        i = i +D+2;
    }
        // right peak
          var k = -D;
    while (k < ww*RM+1) {
       var g_rightcolor = ( k>17*D+34 && k < 18*D+36) ? RGB(177,227,127) : (k > 18*D+36 && k <19*D +38 ) ? RGB(250,222,0) : (k > 19*D +38&& k <20*D +40) ?  RGB(255,160,122) : (k > 20*D +40) ?  RGB(255,0,50) : RGBA(120,200,255,160) ;
        gr.FillSolidRect(k, 7*N+4, D, 5*N-6, g_rightcolor);
        k = k +D+2;   
    }
    // left level
    gr.FillGradRect(0, 0, ww*L, 5*N-3, 0, RGBA(0,0,0,111), RGBA(255,255,255,140), 1);
    gr.FillSolidRect(ww*L-3, 0, 3, 4*N, RGB(215,155,75));
    // right level
    gr.FillGradRect(0, 8*N, ww*R, 5*N, 0, RGBA(0,0,0,111),RGBA(255,255,255,140), 1);
    gr.FillSolidRect(ww*R-3, 8*N, 3, 4*N, RGB(215,155,75));
}

Скачать 30 сек видео VU-meter (1мб) http://rghost.ru/download/39527154/a0ad7ae7284621cca1db0f55e0c2a3ed912903ca/wsh-vu meter1.avi

Отредактировано San_dr (2012-08-02 08:17:10)

+1

28

Вертикальный со шкалой. (WSH, peak-meter, VU-meter )
http://savepic.net/3100067.png

code

// @author "VU Meter component/object by DRON, jscript by Br3tt aka Falstaff >> http://br3tt.deviantart.com"
// @adapted  - San_dr
window.MaxWidth=window.MinWidth=44;
window.MinHeight=160;
ColorTypeDUI = {
    background: 1,
    textcolor: 0
};
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));
};
// VUMeter Object
VUMeter = new ActiveXObject("VUMeter");
VUMeter.RegisterWindow(window.ID);
// Globals
var ww = 0, wh = 0;
var g_backcolor = 0;
var g_textcolor = 0;
var g_syscolor = 0;
var COLOR_BTNFACE = 15;
var tooltip_timer = false;
function get_colors() {
        g_backcolor = window.GetColorDUI(ColorTypeDUI.background);
        g_syscolor = utils.GetSysColor(COLOR_BTNFACE);
        g_textcolor = window.GetColorDUI(ColorTypeDUI.textcolor);
}
get_colors();
function on_size() {
    ww = window.Width;
    wh = window.Height;
};
function on_paint(gr) {
    D=(wh-42)/21
    N=ww/12;
    L=VUMeter.LeftLevel;
    R=VUMeter.RightLevel;
    LM = VUMeter.LeftPeak;
    RM = VUMeter.RightPeak;
    // create draw area
    // fill bgcolor
    gr.FillSolidRect(0, 0, ww, wh,g_syscolor);
    gr.FillGradRect(0, 10, ww, wh/2-20,90, g_syscolor,g_backcolor);////g_backcolor&0x88ffffff
    gr.FillGradRect(0, wh/2+10, ww, wh/2-20,90, g_backcolor,g_syscolor);
    gr.FillSolidRect( 0,wh/2-10, ww, 21,g_backcolor);
    gr.FillSolidRect( 0,10, ww, 1,g_syscolor);
        // шкала
          var S = 0;
    while (S < wh+1) {
        gr.FillSolidRect(N,S,N*10,1,RGBA(180,255,255,111));
        S = S+D+2;   
    }
    gr.FillSolidRect(4*N-3, 0, 4*N+5, wh, RGBA(0,20,35,140));
    // Draw Peak
        // left peak
          var i = -D;
    while (i < wh*LM+1) {
       var g_leftcolor = ( i>18*D+28 && i < 19*D+38) ? RGB(177,227,127) : (i > 19*D+38 && i <20*D +40 ) ? RGB(255,222,0) : (i > 20*D +40) ?  RGB(255,155,0) : RGBA(110,190,255,150) ;
        gr.FillSolidRect(1, wh-i, 4*N-2, D, g_leftcolor);
        i = i +D+2;
    }
        // right peak
          var k = -D;
    while (k < wh*RM+1) {
       var g_rightcolor = ( k>18*D+28 && k < 19*D+38) ? RGB(177,227,127) : (k > 19*D+38 && k <20*D +40 ) ? RGB(255,222,0) : (k > 20*D +40) ?  RGB(255,155,0) : RGBA(110,190,255,150) ;
        gr.FillSolidRect(7*N+3, wh-k, 4*N-1, D, g_rightcolor);
        k = k +D+2;   
    }
    // left level
    gr.FillGradRect(0, wh-wh*L, 4*N-2, wh*L, -90, RGBA(165,150,145,177), RGBA(80,80,80,137), 1);
    gr.FillSolidRect(0, wh-wh*L, 4*N-2, 2, RGB(215,155,75));
    // right level
    gr.FillGradRect(7*N+4, wh-wh*R, 4*N-2, wh*R, -90, RGBA(165,150,145,177),RGBA(80,80,80,137), 1);
    gr.FillSolidRect(7*N+4, wh-wh*R, 4*N-2, 2, RGB(215,155,75));
   
    gr.GdiDrawText("-",gdi.Font("tahoma", 17,1),RGB(0,250,0),2+N,21*D+26, 30, 12,0x00000001);
    gr.GdiDrawText("60",gdi.Font("tahoma", 9,1),RGB(0,250,0),2+N,18*D+36, 30, 12,0x00000001);
    gr.GdiDrawText("40",gdi.Font("tahoma", 9,1),RGB(0,250,0),2+N,14*D+30, 30, 12,0x00000001);
    gr.GdiDrawText("20",gdi.Font("tahoma", 9,1),RGB(0,250,0),2+N,10*D+20,30, 12,0x00000001);
    gr.GdiDrawText("10",gdi.Font("tahoma", 9,1),RGB(0,240,0),2+N,6*D+14, 30, 12,0x00000001);
    gr.GdiDrawText("0",gdi.Font("tahoma", 9,1),RGB(210,210,100),2+N,3*D+2,30, 12,0x00000001);
    gr.GdiDrawText("3",gdi.Font("tahoma", 9,1),RGB(255,210,100),2+N,D+5,30, 12,0x00000001);
    gr.GdiDrawText("5",gdi.Font("tahoma", 9,1),RGB(255,150,0),2+N,0, 30, 12,0x00000001);   
}
function on_colors_changed() {
    get_colors();
    window.Repaint();
}

+1


Вы здесь » foobar2000 » Частные конфигурации » VU Meter skins (WSH)


Cоздать форум на 0pk.ru, cоздать форум анимешный на AniHub.ru, cоздать форум ролевой на Rolka.su © 2007–2014 «Quadro.Boards» LLC