Захотелось прикрутить к сборке пикметр. Понравился 
012_onv (автор onv) (тема: Пользовательские индикаторы к foo_vis_vumeter,
сообщение macarych » 18.02.2013, 11:43 ).
Скачал VUEditor. Разобраться пока не разобрался, но показалось, что VUEditor не поддерживает "прозрачность фона" изображения (может ошибаюсь).
Решил сделать на WHS (за основу взял скрипт от DRON в этой теме).
Получилось так:
		
			
 
			
			- Безымянный VU METR.png (1.9 КБ) Просмотров: 7276
 
		
		 А вопрос такой. Можно-ли проверить правильность работы данного скрипта. Я не совсем силен в этих пикметрах.
- Код: Выделить всё
 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(); 
    }
}
*/