JS: Stereo Imager (1 онлайн

belovw

Well-Known Member
22 Апр 2009
9.202
8.384
113
50
RK Almaty
Мне очень нравится плагин от Waves S1 Imager Stereo. После того как кончилась демо лицензия и не найдя альтернативу, я решил написать его самостоятельно в JS формате для Reaper. Через ReaJS его можно также использовать в Win DAW, поддерживающих VST.

Жду комментов и рецензий. Если понадобится - твикнем.

* Версия от 16.10.2012. 19.08.2013 внесён корректирующий коэффициент в режиме MS.

* Версия от 20.08.2013. Добавлена визуализация.
 
Последнее редактирование:

belovw

Well-Known Member
22 Апр 2009
9.202
8.384
113
50
RK Almaty
// (C) 2012, Vladimir V. Belov

// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO,
// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING
// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF
// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN
// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND
// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD
// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR
// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS
// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO
// ENTRUST SOMEBODY ELSE WITH DOING SO.
//
// Released under GPL:
// <http://www.gnu.org/licenses/>.

desc:Stereo Imager

slider1:<0,1,1{LR,MS}>Mode
slider2:1<0,2,0.01>Width (%)
slider3:0<-45,45,1>Rotate (Deg)

@init
k=sqrt(2);

@slider
// 2xPi/360=0.017...
rot=slider3*0.017453292;
cs=cos(rot);
sn=sin(rot);
width = slider2;

@sample

//Mode
slider1==0 ? (
a=(spl0+spl1)/2;
b=(spl0-spl1)/2;
):(
a=spl0/k;
b=spl1/k;
);

//Width
spl0=a+b*width;
spl1=a-b*width;

//Rotate
L=spl0*cs-spl1*sn;
R=spl1*cs+spl0*sn;
spl0=L;
spl1=R;
 

Вложения

belovw

Well-Known Member
22 Апр 2009
9.202
8.384
113
50
RK Almaty
Данный плагин я написал значительно раньше чем ознакомился с ссылкой с которой поделился Вадим Володин http://www.musicdsp.org/archive.php?classid=4 (Вадим,огромное спасибо за ссылку)

Если посмотреть ссылки ниже
http://www.musicdsp.org/archive.php?classid=4#173
http://www.musicdsp.org/archive.php?classid=4#255
http://www.musicdsp.org/archive.php?classid=4#256
то можно увидеть насколько похожи алгоритмы.

Как появится свободное время, попробую попереводить с С на JS другие алгоритмы. А в этой ветке обсуждаем Stereo Imager.
 
  • Like
Реакции: Al Brazy и LexaLexin

LexaLexin

Well-Known Member
23 Окт 2007
1.586
925
113
42
г. Новочеркасск
belovw, по моему пока делать отдельную ветку, например плагины в JS формате, и постить туда все что с этим связанно... перенести в неё Ваши творения и других участников форума...
ещё такой вопрос, а через Reaplugins можно осуществить Vocal Riding, что для Рипера на бесплатном софте?
 

belovw

Well-Known Member
22 Апр 2009
9.202
8.384
113
50
RK Almaty
а через Reaplugins можно осуществить Vocal Riding, что для Рипера на бесплатном софте?
Нет. Модуляция любого из параметров плагина от входного сигнала возможна только в рипере.
 
Последнее редактирование:
  • Like
Реакции: LexaLexin

daicehawk

овес-тодорогнеукупишь
Обратите внимание, пользователь заблокирован на форуме.
Нет. Модуляция любого из параметров плагина от входного сигнала возможна только в рипере.
[OFF]Володя, если ты про модуляцию пиковым уровнем сигнала, то во фрукте есть нативная приблуда для этого.
А ты где Си научился? [/OFF]
 

belovw

Well-Known Member
22 Апр 2009
9.202
8.384
113
50
RK Almaty
Предварительно раззиповал? Возможно путь не тот. Попробуй выполнить команду
Show REAPER resource path in explore
появится папка, в ней есть подпапка Effects, в неё и положи раззипованную плагину.
[HR][/HR]
А ты где Си научился?
В музыкальной школе ))).
Знаю Бейсик, микроассемблер, Фортран и Паскаль когда изучал в политехе. Си на самом деле не знаю.
 
  • Like
Реакции: MJSound

fakeitback

Super Moderator
Команда форума
6 Май 2005
14.454
15.340
113
42
Москва
Завёл в каталоге js эффектов папочку "belovw" ))

Digilay давно уже в каждом проекте, за s1 - imager, полагаю, также не застоится)
 
  • Like
Реакции: belovw

LexaLexin

Well-Known Member
23 Окт 2007
1.586
925
113
42
г. Новочеркасск
belovw, у нас есть тут люди на форуме, которые не плохо умеют рисовать всякого рода скины и мордочки.. может их подключить и вам останется всё это дело "прописать" и вуаля, плаг с "лицом"...
 

belovw

Well-Known Member
22 Апр 2009
9.202
8.384
113
50
RK Almaty
останется всё это дело "прописать" и вуаля, плаг с "лицом"...
Разбираться с этим надо. Время нужно. Я пока только в математике продвинулся. И то проблемы есть. Нужно разбираться с кросфэдингом. Если прописать огибающую, то на синусе слышны потрескивания. Если есть кто может подсказку дать, буду признателен.
 
  • Like
Реакции: LexaLexin

basЫl

атрофировал юмор.
5 Янв 2004
7.153
5.002
113
а огибающая какого параметра? возможно интерполяция (качество/метод выбери сам) поможет
 

basЫl

атрофировал юмор.
5 Янв 2004
7.153
5.002
113
а я тоже не в теме, хз как там рипер снимает параметры, мож он неаккуратно работает.
 

diggidon

Administrator
Команда форума
26 Май 2008
6.832
7.486
113
51
Днепр UA
Я что-то пропустил
[OFF]Поскольку ЧСВ распирает, скажу, что этот плагин (Digilay) Володя посвятил мне :) :scaut: Правда, Володя?
В названии всё зафиксировано, если шо... :)
[/OFF]
 
  • Like
Реакции: LexaLexin

MJSound

80 8
12 Май 2007
2.469
1.049
113
44
Ростов-Папа
belovw, я так понял, с дилеем работа закончилось?
По Stereo Imager - если бы ему нарисовать визуализацию как у "папы" - было бы отлично.
 

belovw

Well-Known Member
22 Апр 2009
9.202
8.384
113
50
RK Almaty
Версия от 20.08.2013 добавлена визуализация.

Посмотреть вложение 71410
// (C) 2012, Vladimir V. Belov
// (C) 2007, Michael Gruhn.

// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO,
// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING
// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF
// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN
// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND
// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD
// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR
// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS
// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO
// ENTRUST SOMEBODY ELSE WITH DOING SO.
//
// Released under GPL:
// <http://www.gnu.org/licenses/>.

desc:Stereo Imager

slider1:<0,1,1{LR,MS}>Mode
slider2:1<0,2,0.01>Width (%)
slider3:0<-45,45,1>Rotate (Deg)
slider5:0<0,2,1{Dots,Lines,Rays}>Display

@init
k=sqrt(2);
p=$pi/180;

gfx_clear=-1;
off = 500000;
rot=-45*0.017453292;
DOTS = 0;
LINES = 1;
RAYS = 2;
MAXDRAWSPLS = 10000;
PHASEUPDATERATE = srate/8;
n = 0;
phC = 0;
ph = 0;

@slider
width=slider2;

kr=p*slider3;
kw=atan(slider2);

kcs=cos(kr);
ksn=sin(kr);

k1=sin(kr-kw);
k2=cos(kr-kw);
k3=sin(kr+kw);
k4=cos(kr+kw);

@block

@sample

//Mode
slider1==0 ? (
a0=(spl0+spl1)/2;
a1=(spl0-spl1)/2;
):(
a0=spl0/k;
a1=spl1/k;
);

//Width
spl0=a0+a1*width;
spl1=a0-a1*width;

//Rotate
L=spl0*kcs-spl1*ksn;
R=spl1*kcs+spl0*ksn;
spl0=L;
spl1=R;

//Goniometer
s0 = sign(spl0);
s1 = sign(spl1);
angle = atan( spl0 / spl1 );
(s0 == 1 && s1 == -1) || (s0 == -1 && s1 == -1) ? angle += 3.141592654;
s0 == -1 && s1 == 1 ? angle += 6.283185307;
spl1 == 0 ? spl0 > 0 ? angle = 1.570796327 : angle = 4.71238898;
spl0 == 0 ? spl1 > 0 ? angle = 0 : angle = 3.141592654;
radius = sqrt( sqr(spl0)+sqr(spl1) ) ;
angle -= rot;
vert = 0 = cos(angle)*radius;
horiz = off = sin(angle)*radius;
b<MAXDRAWSPLS ? b += 1;


s0 != s1 ? phC-=1:phC+=1;
(n+=1) > PHASEUPDATERATE ? (
ph = (1-(phC/n))/2;
phC = n = 0;
);

@gfx 500 500

size = min(gfx_w,gfx_h-20);
sizeH = size/2;
sizeDSqr05 = sizeH * 0.70710681;
sizeQ = sizeH/2;
size2Q = 2*sizeQ;
size3Q = 3*sizeQ;

(mouse_cap) ? (
gfx_r=gfx_g=gfx_b=0; gfx_a=1;
gfx_x=gfx_y=0;
gfx_rectto(gfx_w,gfx_h);
);

gfx_r=gfx_g=gfx_b=0; gfx_a=0.066;
gfx_x=gfx_y=0;
gfx_rectto(gfx_w,gfx_h);

x = y = sizeH;

i = min(b,MAXDRAWSPLS);
while (
slider5 == DOTS ? (
gfx_a=0.33;
gfx_x=sizeH+0*sizeDSqr05;
gfx_y=sizeH-off*sizeDSqr05;
gfx_setpixel(0.5,1,0);
):(
slider5 == LINES ? (
gfx_x=x; gfx_y=y;
x=sizeH+0*sizeDSqr05;
y=sizeH-off*sizeDSqr05;
):(
gfx_x=sizeH+0*sizeDSqr05;
gfx_y=sizeH-off*sizeDSqr05;
);
gfx_r=0.5; gfx_g=1; gfx_b=0; gfx_a=0.25;
gfx_lineto(x,y,0);
);
(i-=1)>0;
);
b=0;

gfx_r=gfx_g=gfx_b=0.8; gfx_a=0.03;

gfx_x=sizeQ; gfx_y=sizeQ;
gfx_lineto(size3Q,size3Q,0);

gfx_x=sizeQ; gfx_y=size3Q;
gfx_lineto(size3Q,sizeQ,0);

gfx_a=0.03;
gfx_x=size2Q; gfx_y=size2Q-sizeQ*k;
gfx_lineto(size2Q,size2Q+sizeQ*k,1);

gfx_x=size2Q-sizeQ*k; gfx_y=size2Q;
gfx_lineto(size2Q+sizeQ*k,size2Q,1);

gfx_x = gfx_y = sizeQ;
gfx_drawchar($'L');
gfx_x = size3Q; gfx_y = sizeQ;
gfx_drawchar($'R');
gfx_x = sizeH; gfx_y = 5;
gfx_drawchar($'M');
gfx_x = 0; gfx_y = sizeH;
gfx_drawchar($'+');
gfx_drawchar($'S');
gfx_x = size-20; gfx_y = sizeH;
gfx_drawchar($'-');
gfx_drawchar($'S');

gfx_r=1; gfx_g=gfx_b=0; gfx_a=1;

gfx_x=gfx_y=size2Q;
gfx_lineto (sizeQ*(2+k1),sizeQ*(2-k2),1);
gfx_lineto (sizeQ*(2+k3),sizeQ*(2-k4),1);
gfx_lineto (size2Q,size2Q,1);
gfx_lineto (sizeQ*(2+ksn*1.05),sizeQ*(2-kcs*1.05),1);

gfx_r=gfx_g=gfx_b=0; gfx_a=1;
gfx_x=0; gfx_y=size;
gfx_rectto(size+1,size+20);
gfx_r=1; gfx_g=0; gfx_b=0; gfx_a=1;
gfx_x=1+ph*(size-1); gfx_y=size+1;
gfx_lineto(gfx_x,size+19,0);

gfx_r=gfx_g=gfx_b=0.8; gfx_a=1;
gfx_x = 0; gfx_y = size+10;
gfx_drawnumber(0,0);
gfx_x = sizeH-8; gfx_y = size+10;
gfx_drawnumber(90,0);
gfx_x = size-25; gfx_y = size+10;
gfx_drawnumber(180,0);

gfx_r=0.5; gfx_g=1; gfx_b=0; gfx_a=1;
gfx_x = 0; gfx_y = size;
gfx_drawnumber(ph*180,0);
 

Вложения

MJSound

80 8
12 Май 2007
2.469
1.049
113
44
Ростов-Папа
belovw, отлично. Возможно, стоит чуть уменьшить "дисплей", и, если возможно, сделать чтобы при кручении ручек, за красным треугольником не оставались столь явные "копии" (эхо).
 

belovw

Well-Known Member
22 Апр 2009
9.202
8.384
113
50
RK Almaty
Мужики. Есть маленькая проблема. При изменении угла наклона, появляются потрескивания очень хорошо заметные на чистом синусе. В принципе в статике не страшно, а вот если применять автоматизацию, то становятся заметными.
В принципе догадываюсь что нужно сделать что бы убрать это. При резком изменении угла происходит резкое изменение амплитуды на суммирующей матрице. Такие изменения проявляются в виде половинчатых джитеров (если конечно так можно выразиться) со своим полным спектром. Как вариант решения проблемы ввести плавное изменение коэффициентов. Как это реализовать пока не знаю. Попробовал ввести линейную апроксимацию, но и её нужно пилить и пилить. Так что други зазывайте в тему знакомых програмеров DSP. Буду допиливать алгоритм. Буду признателен.
 
Последнее редактирование:

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
Я и не качал ещё... Не могу время найти для вдумчивого прослушивания пока... Думаю у многих так.
 

Сейчас онлайн (Пользователей: 0, Гостей: 1)