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

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

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

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

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

СКАЧАТЬ
Версия 2013-02-16

Так же имеется некий комплект (с примерами) для создания собственных индикаторов:

РЕДАКТОР ИНДИКАТОРОВ
VUEditor.zip
(4.12 МБ) Скачиваний: 2795


ОБУЧАЮЩЕЕ ВИДЕО
Обучающее_видео_VU_Meter.zip
(20.35 МБ) Скачиваний: 8818


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


Сообщение #141 RAZOR87 » 14.05.2012, 13:50

antisibir, в ближайшее 2-3 дня думаю не смогу, так как буду не дома.
RAZOR87 M
Аватара
Репутация: 13
С нами: 11 лет 10 месяцев

Сообщение #142 antisibir » 14.05.2012, 15:06

RAZOR87, мы подождём!!! :wink:
antisibir M
Аватара
Откуда: Усолье-Сибирское
Репутация: 11
С нами: 14 лет 9 месяцев

Сообщение #143 DRON » 14.05.2012, 23:36

Добавил в редактор раздельное управление стрелкой и лампой в режиме просмотра. Это позволяет увидеть возможные проблемы перекрытия лампочки стрелкой.
http://rghost.ru/38088807
DRON M
Автор темы
Аватара
Откуда: Санкт-Петербург
Репутация: 113
С нами: 15 лет 10 месяцев

Сообщение #144 sudden » 18.05.2012, 04:28

RAZOR87, а вы бы не могли нарисовать этот вариант более качественно
Изображение Изображение
ссылка
Последний раз редактировалось sudden 18.05.2012, 15:30, всего редактировалось 1 раз.
sudden M
Репутация: 22
С нами: 17 лет 1 месяц

Сообщение #145 macarych » 18.05.2012, 13:16

macarych M
Аватара
Репутация: 417
С нами: 15 лет 2 месяца

Сообщение #146 DRON » 26.05.2012, 16:55

Кто там хотел VUMeter на WSH?
http://rghost.ru/38351251

Код: Выделить всё
// -- predefined functions

function RGBA(r, g, b, a) {
    r &= 0xff;
    g &= 0xff;
    b &= 0xff;
    a &= 0xff;
    return ((a << 24) | (r << 16) | (g << 8) | (b));
}

function RGB(r, g, b) {
    return RGBA(r, g, b, 0xff);
}

// {{
var DT_TOP = 0x00000000;
var DT_CENTER = 0x00000001;
var DT_VCENTER = 0x00000004;
var DT_WORDBREAK = 0x00000010;
var DT_CALCRECT = 0x00000400;
var DT_NOPREFIX = 0x00000800;
// }}

// {{
// Used in window.GetColorCUI()
ColorTypeCUI = {
    text: 0,
    selection_text: 1,
    inactive_selection_text: 2,
    background: 3,
    selection_background: 4,
    inactive_selection_background: 5,
    active_item_frame: 6
};

// Used in window.GetFontCUI()
FontTypeCUI = {
    items: 0,
    labels: 1
};

// Used in window.GetColorDUI()
ColorTypeDUI = {
    text: 0,
    background: 1,
    highlight: 2,
    selection: 3
};

// Used in window.GetFontDUI()
FontTypeDUI = {
    defaults: 0,
    tabs: 1,
    lists: 2,
    playlists: 3,
    statusbar: 4,
    console: 5
};
//}}

var g_instancetype = window.InstanceType;
var g_font = null;
var g_text = "Create your script\nClick here to open the editor.";
var ww = 0, wh = 0, mw = 0, mh = 0;
var g_textcolor = 0, g_textcolor_hl = 0;
var g_backcolor = 0;
var g_hot = false;

function get_font() {
    if (g_instancetype == 0) { // CUI
        g_font = window.GetFontCUI(FontTypeCUI.items);
    } else if (g_instancetype == 1) { // DUI
        g_font = window.GetFontDUI(FontTypeDUI.defaults);
    } else {
        // None
    }
}
get_font();

function get_colors() {
    if (g_instancetype == 0) { // CUI
        g_textcolor = window.GetColorCUI(ColorTypeCUI.text);
        g_textcolor_hl = window.GetColorCUI(ColorTypeCUI.text);
        g_backcolor = window.GetColorCUI(ColorTypeCUI.background);
    } else if (g_instancetype == 1) { // DUI
        g_textcolor = window.GetColorDUI(ColorTypeDUI.text);
        g_textcolor_hl = window.GetColorDUI(ColorTypeDUI.highlight);
        g_backcolor = window.GetColorDUI(ColorTypeDUI.background);
    } else {
        // None
    }
}

// --VUMeter
Layout = {
    BothH: 0,
    BothV: 4,
    Left: 1,
    Right: 2,
    Mono: 3
};

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

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

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

var Delta=0;

function on_size() {
    ww = window.Width;
    wh = window.Height;
    mw = ww-VUWidth;
    mh = wh-VUHeight;
    X = Math.min(X,mh);
    Y = Math.min(Y,mh);
}

function on_paint(gr) {
    L=VUMeter.LeftLevel;
    R=VUMeter.RightLevel;
    LM=VUMeter.LeftPeak;
    RM=VUMeter.RightPeak;
    D=Delta*0.95+VUMeter.UpdatePeriod*0.05;
    Delta=D;
    g_text="Period:"+Math.round(D*1000)+ " ms\nLeft:"+ToDB(L)+"\nRight:"+ToDB(R)+"\nOffset:"+VUMeter.Offset+" dB";

    gr.FillSolidRect(0, 0, ww, wh, g_backcolor);
    gr.FillSolidRect(0,      wh-wh*L,  ww/2, wh*L,  RGB(255,0,0));
    gr.FillSolidRect(ww/2,   wh-wh*R,  ww/2, wh*R,  RGB(255,0,0));
    gr.FillSolidRect(ww/8,   wh-wh*LM, ww/4, wh*LM, RGB(0,255,0));
    gr.FillSolidRect(5*ww/8, wh-wh*RM, ww/4, wh*RM, RGB(0,255,0));
    gr.GdiDrawText(g_text, g_font, g_textcolor, 0, 0, ww, wh, DT_CALCRECT | DT_NOPREFIX);
}

var X=0,Y=0,DX=1.3,DY=1.6;
VUWidth=200;VUHeight=100;

VUWindow = VUMeter.CreateWindow(window.ID);
UpdatePos();
window.SetInterval(UpdatePos, 20);
VUWindow.Visible=true;
VUWindow.Enabled=false;

function UpdatePos() {
    X=X+DX;if (X>mw) {X=2*mw-X;DX=-DX}else if (X<0){X=-X;DX=-DX};
    Y=Y+DY;if (Y>mh) {Y=2*mh-Y;DY=-DY}else if (Y<0){Y=-Y;DY=-DY};
    VUWindow.SetBounds(X,Y,VUWidth,VUHeight);
}

function on_mouse_lbtn_down(x, y, mask) {
    VUWindow.LoadNextSkin(VUWindow.GroupName);
    VUWindow.Layout=Layout.Mono;
}
Последний раз редактировалось DRON 29.05.2012, 15:39, всего редактировалось 4 раз(а).
DRON M
Автор темы
Аватара
Откуда: Санкт-Петербург
Репутация: 113
С нами: 15 лет 10 месяцев

Сообщение #147 onv » 26.05.2012, 17:09

Опа. Я традиционным местом чувствовал, что это "Ж-ж-ж" (затишье на несколько дней) неспроста :)
Текстовая выдача Left/Right/Offset - глазные мышцы разрабатывать ? :biggrin:
onv M
Откуда: Харьков
Репутация: 52
С нами: 11 лет 10 месяцев

Сообщение #148 DRON » 27.05.2012, 07:41

Ссылка обновлена: исправлено падение фубара у тех кто использует foo_whatsnew, но не foo_ui_columns.
DRON M
Автор темы
Аватара
Откуда: Санкт-Петербург
Репутация: 113
С нами: 15 лет 10 месяцев

Сообщение #149 onv » 27.05.2012, 17:36

WSH Playlist Viewer by Br3tt + WSH VU-meter by DRON :)

phpBB [media]


10мс для фальстафовского скрипта - неподъемная скорость :) Начинает работать с 25, т.е. с 40Гц
onv M
Откуда: Харьков
Репутация: 52
С нами: 11 лет 10 месяцев

Сообщение #150 DRON » 27.05.2012, 18:44

Компонент и пример обновлены. Таймер теперь не нужен.
onv, в твоём примере лучше использовать RegisterRect так как обновляется не всё окно.
DRON M
Автор темы
Аватара
Откуда: Санкт-Петербург
Репутация: 113
С нами: 15 лет 10 месяцев

Сообщение #151 onv » 27.05.2012, 20:51

Ок, спасибо. Я свое дело сделал - Фальстаф загорелся, что-нибудь да родит. С чувством вкуса и меры у него все в порядке, так что за результат я спокоен :)
onv M
Откуда: Харьков
Репутация: 52
С нами: 11 лет 10 месяцев

Сообщение #152 onv » 28.05.2012, 05:07

P.S. В том примере без таймера было никак. Этот лентяйский плейлист перерисовывается по смене секунд, с бешеной частотой 1Гц, пришлось его принудительно взбадривать :)
onv M
Откуда: Харьков
Репутация: 52
С нами: 11 лет 10 месяцев

Сообщение #153 DRON » 28.05.2012, 10:37

onv:В том примере без таймера было никак.
Register* это тот же таймер, только синхронизированный со сменой уровней, к тому же он имеет доп плюсы: нет лишних обновлений (то есть перерисовка несколько раз с теми же уровнями) и обновление останавливается, если окно не видно или в том случае когда уровни не меняются (воспроизведение остановлено или на паузе).
DRON M
Автор темы
Аватара
Откуда: Санкт-Петербург
Репутация: 113
С нами: 15 лет 10 месяцев

Сообщение #154 onv » 28.05.2012, 11:07

Т.е. пока будет dU и пока оба уровня потихоньку не придут в -320 ? Или есть на каком-то уровне порог отсечки, на -200, например ? Или 320 - это и есть порог отсечки ?
onv M
Откуда: Харьков
Репутация: 52
С нами: 11 лет 10 месяцев

Сообщение #155 DRON » 28.05.2012, 15:46

Там на самом деле -240 должно быть, а "отсечка" это просто 0 с учётом погрешности: никаких дБ там нет, это просто для удобства пользователю всё в дБ показывается.
Обновил ссылку в последнем посте на исправленную версию.

А чем вы там видео пишите и выкладываете?
DRON M
Автор темы
Аватара
Откуда: Санкт-Петербург
Репутация: 113
С нами: 15 лет 10 месяцев

Сообщение #156 onv » 28.05.2012, 16:32

Про дБ, вроде, речи не было. dU - имелась в виду дельта по напряжению.
Camtasia Studio.
Ссылка, по которой я когда-то брал, устарела, вечером могу залить куда-нибудь. Там 340 метров примерно.
onv M
Откуда: Харьков
Репутация: 52
С нами: 11 лет 10 месяцев

Сообщение #157 DRON » 28.05.2012, 17:01

onv:Про дБ, вроде, речи не было.
А -320 и -200 это про попугаев чтоли?

Вобщем никакого явно заданного порога там нет, но я не думаю, что это проблема, потому как делать VUMeter на -100дБ и меньше никто не будет.
Но учтите, что при запуске вообще без звука, там будет чистый ноль, который после преобразования в дБ становится минус бесконечностью (-Inf).

onv:вечером могу залить куда-нибудь.
Спасибо, но я уже нашёл.
DRON M
Автор темы
Аватара
Откуда: Санкт-Петербург
Репутация: 113
С нами: 15 лет 10 месяцев

Сообщение #158 onv » 28.05.2012, 17:34

DRON:А -320 и -200 это про попугаев чтоли?
Вобщем никакого явно заданного порога там нет, но я не думаю, что это проблема, потому как делать VUMeter на -100дБ и меньше никто не будет.
Но учтите, что при запуске вообще без звука, там будет чистый ноль, который после преобразования в дБ становится минус бесконечностью (-Inf).
Т.е. в скрипте, перед перегоном в дБ, нужно ставить заглушку типа if(L=0) Then L=1e-12 например ? Потому что стартовать скрипт только по isplaying не хотелось бы.
onv M
Откуда: Харьков
Репутация: 52
С нами: 11 лет 10 месяцев

Сообщение #159 DRON » 28.05.2012, 18:13

onv:Т.е. в скрипте, перед перегоном в дБ, нужно ставить заглушку типа if(L=0) Then L=1e-12 например ?
JScript работает с нечислами как положено, так что можете и не ставить. Другое дело, что при выводе "-Inf дБ" может смотреться некрасиво и в этом случае проверка не помешает.
Последний раз редактировалось DRON 29.05.2012, 15:41, всего редактировалось 1 раз.
DRON M
Автор темы
Аватара
Откуда: Санкт-Петербург
Репутация: 113
С нами: 15 лет 10 месяцев

Сообщение #160 onv » 28.05.2012, 21:09

Исключительно абстрактно - теоретический вопрос по измерителю переходного затухания между каналами :) В какое место тракта максимально близко ко входу можно подать программно сгенерированную синусоиду ?
Последний раз редактировалось onv 29.05.2012, 21:46, всего редактировалось 1 раз.
onv M
Откуда: Харьков
Репутация: 52
С нами: 11 лет 10 месяцев

Пред.След.

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