En ^ Ru

SuperScope Tutorial v.1.0 by Idealius
 (SuperScope_Tutorial_v1_0.avs)
 
http://avs.chat.ru/avsbyidealius.htm
http://avs.chat.ru/avsbyidealius.avs
 
Это не окончательное руководство, но оно будет полезно тем, кому хочет узнать основы и начать экспериментировать дальше с чем-то новым. Просто пройдите через все секции подряд, кликните на каждом списке эффектов, убедитесь, что он включен, а все другие после него выключены, затем прочтите комментарии, которые сопровождают показ. Данное руководство предполагает, что вы знаете достаточно о Superscopes (т.е. waveform/spectrum, dots/lines, left/center/right channels, colors), исключая детализированный процесс описания. Если это не так, то вам будет сложно читать это руководство, поэтому оставайтесь на некоторое время в роли экспериментатора. Вы можете изменить разрешение монитора в вашем компьютере на более низкое. Можно рекомендовать разрешение 800x600, поскольку так читать эти комментарии намного легче для глаз. Эта консультация сделана для waveform областей только потому, что они лучшие! Те же методы, без особого труда, могут быть использованы и для spectrum, если только вы понимаете различие между ними (отличие spectrum в использовании линейной переменной v, которая всегда строго положительна).
 
1) Text box
 
Нет необходимости убеждаться что этот список эффектов включен, поскольку ничего всё равно не будет отображено. Это просто знакомство с текстовыми боксами. Сначала взглянем на текстовый бокс init. Он выполняется каждый раз, когда вы загружаете пресет. Когда он вычисляется, то происходит это ранее всех других текстовых боксов. Вторым, по последовательности вычислений, следует текстовый бокс point. Он вычисляется в каждом пункте (или в точке, или в позициях между линиями), которые отображаются на экране. Третьим выполняется текстовый бокс frame, который вычисляется после того, как отображены все точки из текстового бокса point, но только один раз перед "первой" точкой, которая будет вычислена за рамками сценария (for reasons beyond my comprehension). Вы особо не должны беспокоиться об этом, но такова фактическая последовательность действий! Не забывайте при этом, что точка в секции point вычисляется n раз. Четвертый, и последний, текстовый бокс beat вычисляется только когда обнаруживаются всплески ритма, и после того, как первые три текстовых бокса будут выполнены. Теперь поясним кое-что из синтаксиса. Переменными являются x,y,v,i,n, и также ваши пользовательские переменные. Первые четыре - это переменные AVS, используемые для большинства из всех SuperScope. Они наиболее актуальны в большинстве случаев. Ваши пользовательские переменные - это те, которые вы сами назначите, и могу предупредить, что некоторые ваши обозначения не будут работать, по причинам, которые находятся за рамками моего понимания. Односимвольные переменные вероятно лучше, но я предпочитаю двухсимвольные комбинации. Для тех из вас, кто не имеет опыта программирования пояню, что запись x=3 не означает "3 равняется x" или "x равняется 3". Это означает присвоение величины 3 переменной x. Что-либо после "=" указывает, что именно присваивается x. Операция не может использоваться равнозначно (т.е. 3=x не означает присвоение величины 3 на x, а означает присвоение величины x на 3, что не возможно, поскольку 3 является константой). Все выражения присвоения должны разделяться точкой с запятой. Так, если вы говорите "n=n+100" и "y=v-.4", то в текстовом боксе нужно поместить "n=n+100; y=v-.4", и их можно использовать равнозначно, размещая иначе "y=v-.4; n=n+100".
 
2) Simplest scope
 
n=300
x=i;y=v
 
Давайте взглянем на самую простую область, которую вы можете легко сделать. Как можно видеть, n - количество точек или пунктов, с которыми область должна работать. Это также, по очевидным причинам, то количество раз, которое бокс point будет вычислен, до перехода в бокс frame. Если у вас есть 100 точек (n=100), вы должны вычислить point бокс 100 раз. Данная переменная прописана в init боксе, поскольку мы только хотим в этой области установить количество точек только один раз. Теперь посмотрим на point бокс. Обычно это наиболее сложный текстовый бокс. Мы введем переменные x, y, i прямо сейчас. x - горизонтальная позиция текущей вычисленной точки, отображаемой в окне AVS. y - вертикальная позиция текущей вычисленной точки, отображаемой в окне AVS. Эти переменные базируются в декартовой системе координат (т.е. (0,0) является центром экрана, (-1,1) - верхний слева угол экрана, и (1,-1), - нижний справа угол экрана). i - это сокращение от "index" текущей точки, которая рассчитывается при вычислении SuperScope. i принимает значения от 0 до 1 с шагом (1/n) (для общего понимания, просто представьте точку области, которая вычисляется в данном отрезке времени). v - это число от -1 до 1, связанное со звуком. Так, в итоге, у нас есть SuperScope с 300 точек, которые горизонтально начинаются в 0, и заканчиваются в 1, а вертикально начинаются в 0, плюс некоторое добавочное v, переменное для каждого пункта.
 
3) Scaling and Shifting
 
n=300
x=v-.5;y=i*2-1
 
n=300
x=v/2+.5;y=i*2-1
 
В этом списке эффекта показаны возможности масштабирования (scaling) и перемещения (shifting) областей. Прежде обратите внимание, что обе области располагаются вертикально от -1 до 1 (весь экран по вертикали). Это следут из вычисления переменной y с параметром i. Обратите внимание, что в предшествующем списке эффектов переменная i меняла x от 0 до 1. Всё, что нужно сделать, чтобы обеспечить области изменение от -1 до 1, - масштабировать переменную, умножая её на 2. Это пока только создаст область в диапазоне от 0 до 2, так что просто вычитаем 1, чтобы переместить область назад, в диапазон от -1 до 1. Отметим, что этот приём может быть использован равнозначно для переменных x и y. Затем, обратите внимание, что области не отцентрированы к середине экрана. Это происходит из-за добавок (-.5) и (+.5) в переменных x, для обеих областей. Это так назваемое перемещение. Довольно очевидно как это работает. После этого, обратите внимание, что красная область, оказывается, реагирует на звук более чувствительно. Это происходит, поскольку в синей области v пропорционально уменьшен показателем 2.
 
4) Random
 
n=300;dd=0;dc=0;t=1
t=1
dd=(rand(12)-6)/10;dc=(rand(12)-6)/10;t=rand(6)+1
x=(i*2-1)/2+dd;y=v*t+dc
 
Теперь сделаем нечто более серьёзное. Вы знаете как делать простую суперобласть, подобно области с тем же именем (simple). Вы даже можете изменить её отклик на звук, и можете перемещать её по экрану. Теперь, возможно, вы хотите сделать эти перемещения произвольными, на каждый раз, когда обнаруживаются ударные? Для этого потребуются две новые переменные. Эти переменные могут равняться чему угодно, по нашему желанию, а x,v,n,i не будут иметь отношения к ним, если только мы не изменим этого (т.е. мы можем изменить новые переменные по своему желанию, и они всё ещё не будут иметь эффекта в области, пока мы не модифицируем первоначальные переменные некоторым образом). Назовём их dd и dc. Сначала инициализируем их равными 0. Затем, когда появятся всплески ритма, сделаем их равными произвольной позиции где-нибудь на экране. Это то место, где появляются несколько более сложные вещи. Вводится функция rand(). Число в скобках определяет максимальную величину произвольного возможного числа, минус единицу. Так, мы получаем число, колеблющееся от 0 до 11, и независимо от того, что за число находится в функции rand(), оно всегда возвращает положительное число. Но мы используем декартовую систему (у нас также есть отрицательная часть экрана). Итак, мы хотим посетить весь экран. Просто вычитаем половину от 12, и тогда величина будет между -5 и 5. Наконец, если помните, размер экрана по ширине и высоте (-2, 2), значит мы должны поделить эти числа, или почти никогда не увидим область! Теперь dd и dc изменяются каждый раз при обнаружении ударных, но как сделать, чтобы они влияли на нашу область? Дстаточно просто, поскольку наша область уже отцентрирована, просто перемещаем (shift) её, добавляя dd в переменную x, а dc в переменную y, и, пока находимся здесь, пропорционально уменьшаем (scale down) переменную x, разделив всё выражение (i*2-1) на два. Но всё как-то несколько неподвижно. Сделаем, чтобы в области каждый раз возникала beat hits реакция на увеличение звучка. Это означает v. Просто добавляем эту переменную к t. Мы инициализировали t как 1, поскольку если бы она равнялась 0, и мы умножили её на v, то v равнялась бы 0, пока мы не изменили бы t! Соответственно, мы просто делаем t равным чему-либо, кроме величины 1, когда обнаруживаются всплески ритма. В боксе beat, мы позволили t равняться произвольному числу от 0 до 5, и добавили 1, чтобы t не могло стать равным 0. И теперь суперобласть столь же велика, как и t до обнаружения следующих всплесков ритма! Мы просто хотим, чтобы область отображала t всякий раз, когда возникают всплески ритма. Таким образом, мы только что указали в текстовом боксе frame, что t равно 1 между ударами, и на этом закончим.
 
5) Trig tutorial
 
n=300
x=i*2-1;y=sin(x*20)
 
n=300;t=20
t=10+rand(40)
x=i*2-1+v;y=cos(x*t)
 
Чтобы двигаться дальше с областями, позвольте предложить немного тригонометрии. Здесь не будет подробного обучения тригонометрии, так что если хотите узнать больше, исследуйте это самостоятельно. Я просто изложу материал, который наиболее важен для получения superscope. Желтая область, которую вы видите на экране прямо сейчас - это, по сути, волна синуса. Функция sin() возвращает синус независимо от того, каким является аргумент, но если вы, в самом деле, не знаете, что есть синус, то как вы узнаете, что он возвращает? Главным образом, он берет величину и делает волну от -1 до +1, как нарастающее увеличение. Видите rollercoaster на экране? Если бы мы установили y равный синусу x, то получили бы не слишком красивую линию, поэтому умножаем x на 20 в функции sin, чтобы получить 6 вершин. Теперь, для второй области, просто добавим тот модный случайный эффект ритма с параметром t, и реакцию на звук с переменной v, добавленной к x. Неплохая область?
 
6) Trig tutorial vol II
 
n=80
r=i*3.14159*2; x=cos(r); y=sin(r)
 
n=80
r=i*3.14159*2+v*8; x=cos(r)/2; y=sin(r)/2
 
Теперь мы можем делать синусоиды (rollercoasters), но где же циклы? Попробуем сделать круговую область. Для этого потребуется, как можно видеть, длинное число 3.14159. Полагаю, что вам нужно запомнить это число, поскольку оно очень важно в мире математики. Сначала хотя бы 9 знаков после запятой. Это число назвается PI, и является математическим символом. Оно полностью привязано к синусу, косинусу, тангенсу, их обратным величинам, и вообще к кругу (unit circle). Больше подробностей ищите в тригонометрии. Для AVS просто освоим то, что наиболее важно! Для первого superscope, в текстовом боксе point, мы установили переменную r равной i*PI, помноженное на 2 (множитель от -1 до 1 не даст вам круг). Нет необходимости инициализировать r как что бы то ни было, поскольку он постоянно изменяется вслед за i. На самом деле, хотелось бы более детально рассказать про r, но всю тригонометрию не объяснить в комментариях. Причина, по которой мы имеем x равный синусу r, а y равный косинусу r, в том, что нам необходим круг. В общем и целом, косинус является точно таким же, как и синус, с волной, сдвинутой на -PI/2. Но это заключение будет очень полезным, и если вы задумаетесь об этом, то всё оно имеет смысл. Соедините две связанные кривые вместе и получите круг. Только не говорите об этом своему учителю математики! Для второго superscope попробуем добавить немного звуковой реакции. Поместим v в r так, чтобы круг остался кругом, но реагировал на звук. Также пропорционально уменьшим x и y на 2, увеличим v в 8 раз, и закончим с этим superscope.
 
7) Bouncy beat ball
 
n=80;dd=0;dc=0;bb=.3;cc=.1
dd=dd+bb;dc=dc+cc;bb=if(above(abs(dd),1),-bb,bb);cc=if(above(abs(dc),1),-cc,cc)
r=i*3.14159*2+v*8; x=cos(r)/4+dd; y=sin(r)/4+dc
 
n=80;dd=0;dc=0;bb=(rand(30)-15)/100;cc=(rand(30)-15)/100;t=4
dd=dd+bb;dc=dc+cc;bb=if(above(abs(dd),1),-bb,bb);cc=if(above(abs(dc),1),-cc,cc)
bb=(rand(10)-5)/40;cc=(rand(10)-5)/40;t=4-rand(3);dd=if(equal(t,2),0,dd);dc=if(equal(t,2),0,dc)
r=i*3.14159*2+v*8; x=cos(r)/t+dd; y=sin(r)/t+dc
 
Достаточно тригонометрии! Теперь поэкспериментируем с некоторыми более сложными, связанными с программированием, опциями в AVS superscope. Хотя, круг всё же оставим. При этом, немного масштабируем его, уменьшив, скажем, в 4 раза. И что, если бы мы захотели, чтобы он отскакивал от сторон экрана? Мы просто должны добавить некоторые новые переменные. Нужно всего четыре переменные для этих целей, - две для позиция x и y, относительно первоначальной области круга, и две с направлением и скоростью. Назовем переменные для позиции dc и dd. Инициализируем их в 0 и добавим к нашим исходным переменным x и y в текстовом боксе point. Хорошо, но нет движения! Мы должны сделать dd и dc изменяющимися, так что добавим переменные bb и cc. Они являются скоростью/направлением переменных dd и dc (отрицательная величина bb будет вычетаться из dd, а положительная величина будет добавляться). Инициализируем их как .3 и .1. Теперь, благодаря этим новым дополнениям в боксе frame, шар перемещается, и он, в конечном счете, просто плавает по экрану! Ничего хорошего. Теперь вводим утверждение "if". Его синтаксис: "if(cond, vartrue, varfalse)". Оператор "cond" (условие) может равняться любому из того, что указывается, когда вы нажимаете кнопку помощи в Trans / Movement. В основном, если условие является истиной, то оно возвращает vartrue, в противном случае возвращает varfalse. А что если вы хотите изменить переменную только при условии, что cond - истина или же наоборот? Для этого в cond, через запятую после нужного параметра, следует исходная переменная или наоборот. Запутанно? Хорошо, если бы мы захотели изменить bb на отрицательную величину, только если dc больше 1, то должны ввести bb=if(above(dc,1),-bb,bb). Итак, нам нужно четыре утверждения "if", поскольку у нас есть четыре стороны окна AVS. Или можно сделать иначе? Если мы просто воспользуемся удобной функцией абсолютной величины abs(), то сможем избавиться от двух утверждений "if". Так мы установливаем bb равным -bb, если абсолютная величина dc больше 1 (мы восстановим направление, если пересечём сторону окна). Сделаем так же для cc и dd. Добавив всё в бокс frame, получаем хороший скачущий шар, но можем ли мы и здесь получить некоторое разнообразие? Как добавить ритм, чтобы второй superscope начал действовать, скажем, изменяя скорость, направление, размер, каждый раз, когда пояляются всплески ритма? Для чего мы просто добавляем несколько строчек (что вам теперь нужно пояснить самостоятельно) в бокс beat, и изменяем инициализацию t на 4 вместо 1. Будем инициализировать bb и cc как случайные величины, поэтому, каждый раз, когда вы запускаете пресет, шар также пойдет в различных направлениях. После нескольких тестов, обнаружим, что если ритм песни является слишком быстрым, шар может застрять на одной из стенок. Позволите просто произвольно послать шар в середину? Да, мы могли бы добавить другую переменную, но теперь наш superscope получил красивый вид, так что сохраним некоторое место, и привяжем всё к одной из существующих переменных. Для чего просто посмотрим на наш код. Если обратим внимание на переменную t в боксе Beat, то можем увидеть, что иногда она равняется 2. Так что, просто говорим, что когда t равно 2 (шар максимально большой), мы посылаем шар в середину экрана. Для чего потребуется не менее двух "если" (помните, x и y). В завершение получаем хороший рикошетящий в ритме шар.
 
PS
 
Неудовлетворены? Так и должно быть. Это всего лишь консультация. Мы рассмотрели простейшие, едва пригодные для использования области. Остальные шаги вам предстоит делать самостоятельно! При некоторых творческих усилиях, вы можете сделать много невероятного с областями. Я предложил много более симметричные примеры. Нередко требуется много работы, чтобы получить хорошие области, с существенным коэффициентом рассогласования между большими трудозатратами и небольшим результатом, как это видно в последнем списке эффектов. Но это цена, которую вы платите за неограниченный возможности, которые вам обеспечивает AVS!
 
Idealius

Перевод: А.Панов.
http://avs.chat.ru

counter
Panow©



En ^ Ru

SuperScope Tutorial v.1.0 by Idealius
 (SuperScope_Tutorial_v1_0.avs)
 
http://www.visbot.net/category/documents
http://www.visbot.net/doc/SuperScope_Tutorial_v1_0.avs
 
Well here she is. She's definately not the definitive guide, but she's adequate for those who need to know the basics and experiment with the advanced. Just go through everything in order clicking on each effects list, making sure its enabled and all others after it are disabled, then read the comments while examining the display.
 
This tutorial also assumes you pretty much know everything about superscopes (ie waveform/spectrum, dots/lines, left/center/right channels, and colors) excluding the actual scripting process. If you don't, you're not ready to read this tutorial, so go experiment for a while. You might want to change to a lower resolution on your computer. 800x600 comes to mind because reading these comments are easier on the eyes. This tutorial is made for waveform scopes just because they're the best! :) The same techniques can be applied with spectrum with little effort if you understand the difference (the differences being spectrum uses a linear 'v' variable that is strictly positive.)
 
1)
 
     No need to make sure this fffects list is enabled, there's nothing to display! This is just a familiarity test.
     First let's take a look at the init text box. This is executed everytime you load the preset. When it -is- calculated, it is calculated before all other text boxes.
     Secondly, there's the point text box. This is calculated everytime a point (as in dot or positions between lines) is displayed on the screen.
     Thirdly, the frame text box is calculated after all the points are displayed from the point text box but only once before the -first- point is calculated for reasons beyond my comprehension. You really don't have to worry about this, but that's the way it works! Remember, point is calculated 'n' times.
     Fourthly and finally, the beat text box is calculated only when a beat hits -and- after the first three text boxes are executed.
     Alright, now lets explain some syntax. Variables are 'x', 'y', 'v', 'i', 'n', and your custom variables. The first four are the variables AVS uses for most any superscope. They are pretty much vital in most superscopes.
     Your custom variables are the ones you name, and I warn you some of your names won't work for reasons beyond my knowledge. One letter variables are probably the best, but I like some of the two letter combinations.
     For those of you with no programming experience, the line 'x=3' does -not- mean 3 is equal to 'x' and 'x' is equal to 3. It means -assign- the value of 3 to 'x'. Anything after the '=' sign's are assigned to 'x'. This can -not- be used interchangeably (ie '3=x' doesn't mean assign the value of 3 to 'x', it means assign the value of 'x' to 3, which isn't possible, because 3 is a constant.)
     All variables assignments -must- be seperated by semi colons. So if you say 'n=n+100' and 'y=v-.4' in the same text box you would put 'n=n+100; y=v-.4' and these -can- be used interchangeably, so you could put 'y=v-.4; n=n+100' instead.
 
2)
 
     Let's take a look at the simplest scope you can pretty much make. As you can see 'n' is the number of dots or points the scope has to work with. It's also the number of times the point text box is calculated before moving onto the frame text box, for obvious reasons. If you have 100 points ('n'=100), you'll have to calculate the point text box 100 times. Its present in the init text box because we only want to -set- the number of points once in this scope.
     Now lets look at the point text box. This is usually the most complicated text box. We will be introducing variables 'x', 'y', and 'i' right now. 'x' is the horizontal position the current point being calculated is displayed in the AVS window. 'y' is the vertical position the current point being calculated is displayed in the AVS window.
     These variables are based on the Cartesian coordinate system (ie (0,0) is the center of the screen, (-1,1) is the top left of the screen, and (1,-1) is the bottom right of the screen.) 'i' is 1 divided by the "index" of the current point being calculated, so as the SuperScope calculates, i goes from 0 to 1 skipping every (1/n) (for a basic explanation just think of it as which point the scope is calculating at any given time.) 'v' is a number from -1 to 1 that is based on the sound. So in summary, we have a superscope with 300 points that starts horizontally at 0 ending at 1 and starts vertically at 0 plus whatever 'v' happens to be.ЖЭѓЖ[Э
 
3)
 
     In this effect list, I'll be introducing the idea of scaling and shifting your scopes. First you'll notice both scopes start vertically from -1 to 1 (the entire screen vertically.) Well, this stems from the calculations with the variable 'y' and its assignment of 'i.' You'll notice in the previous effects list the variable 'i' moved the 'x' variable from 0 to 1. Well, to make your scope go from -1 to 1 all we have to do is scale the variable by multiplying by 2. That only makes the scope go from 0 to 2 so we just subtract 1 to move the scope back to -1 to 1. On a side note, this technique can be used for both 'x' and 'y' variables interchangeably.
     Next you'll notice the scopes aren't centered in the middle of the screen. That's because of the -.5 and +.5 on the 'x' variables for both scopes. This is called shifting. Fairly obvious how it works.
     After that, you'll notice that the red scope appears to react more sensitively to the sound. That's because in the blue scope 'v' is scaled down by a factor of 2.j$
 
4)
 
     Now let's do something cool :)
     By now you know how to make a simple superscope similar to the scope with the same name. You can even change how well it responds to sound and move it around the screen.
     Now what if you want to make it move randomly every time a beat hits? Well for that we need two new variables. These variables can equal whatever we want them to, and 'x','v','n', and 'i' have no relation to them unless we -make- them have one (ie, we can change the new variables all we want and it will still have no effect on the scope unless we modify those variables to equal them in some way.) We'll call them 'dd' and 'dc'. First we'll init them equal to 0. Then when a beat hits we'll make them equal a random position somewhere on the screen.
     This is where things start getting a little complicated. The rand() function gets introduced. The number in between the parentheses specifies the maximum value the random number can be, minus one. So we'll recieve a number ranging from 0 to eleven so no matter what number is in the rand() function, it will always return a positive number.
     But we're using the Cartesian system here people (we have a negative part of the screen too!) So we want to visit -all- of the screen. So, we just subtract half of 12 so we'll have a value between -5 and 5.
     Finally, if you remember the screen ranges in width and height from (-2, 2) in which case we'll have to divide these numbers or we'll almost never see the scope!
     So now dd and dc change every time a beat hits, but how do we get that to affect our scope? Well that's the easy part, since our scope is already centered, we just shift them by adding 'dd' to the 'x' variable and 'dc' to the 'y' variable and while were at it, lets scale down the 'x' variable so it's smaller by dividing the -whole- quantity (i*2-1) by two.
     But its still missing something. So let's make it so everytime a beat hits the reaction to sound increases. That means 'v.' So, we just add another variable 't.' We init it as 1 because if it was equal to 0 and we multiplied it by 'v' then 'v' would be equal to 0 until we changed 't'! So, we just make 't' equal something other than one when a beat hits. So in the beat text box, we let 't' equal a random number from 0 to 5 and add one, so 't' doesn't ever equal 0. But now the superscope is as big as t until another beat hits! We just want it to display 't' whenever a beat hits. So, we just put in the frame text box that 't' equals one between beats and now we're finished.
 
5)
 
     To progress further with scopes lets teach you some trig.
     Now teaching trig can take someone forever, so if you want to know more, research it yourself :) I'll just teach the stuff that's more relevant to superscope making. The yellow scope you're seeing on your screen right now is in essence a sine wave. The sin() function returns the sine of whatever its argument is, but if you don't know what the sine of something is how are you going to know what it returns, right? Well it basically takes a value and makes it rollercoaster from -1 to +1 as the value increases. See the roller coaster on your screen? Well, if we just set 'y' equal to the sine of 'x' than we'd get a pretty lame rollercoaster, so we took 'x' times 20 -inside- of the sin function to make "Six Flags" jealous :)
     Now for the second scope, we'll just add a nifty randomized beat effect with 't,' and a reaction to sound with the 'v' variable added to 'x.' Pretty nutty scope, eh?
 
6)
 
     Trig tutorial vol II.
     Alright, we can make rollercoasters, but where are the loops? :) Lets make a circle scope. For this one you can see that long number 3.14159. I would suggest you memorize that number because it's very important in the world of math. -Only- until the first 9 though :)
     This number is called PI (pronounced pie) and it's math symbol looks kind of like 'TT' with the tops of the T's connected. These are very relavent to sine, cosine, tangent, their reciprocals, and the unit circle. Learn more in trigonometry :) For AVS's sake we'll just teach you that its important!
     For starters we set our variable 'r' to 'i' times PI and finally multiply it by 2 in the point text box (multiplying from -1 to 1 will not give you a circle, but anything else will.) We don't really need to initialize 'r' as anything because it will constantly be changing because of 'i'. I really wish I could go into greater detail about 'r', but trig isn't explainable in a comment. The reason why we have x equal to the sine of 'r' and 'y' equal to the cosine of 'r' is so that we have a circle. Cosine is basically the same as sine with the rollercoaster shifted -PI/2. But this ends up to be very useful, because if you think about it, it makes sense. Put two related curves together and get a circle. Just don't tell your Math teacher that!
     So, for the second superscope lets just add some sound reaction. We'll put 'v' in 'r' so our circle stays a circle, but reacts to sound. We'll also scale down 'x' and 'y' by 2 and scale 'v' up by 8 and we end up with a pretty nifty looking superscope.
 
7)
 
     *phew* enough with the trig! Now lets mess with some of the more complicated programming-related options in the AVS superscope.
     We'll keep the circle though :) Let's scale it down a little bit more, say by 4. Well, what if we wanted it to bounce off the sides of the screen? We'll just have to add some variables :) We'll need four for this one, two for the 'x' and 'y' position relative to original circle scope and two for the directions and speeds for those variables. We'll call the position variables 'dc' and 'dd'. We'll initialize them at 0 and add them to our original 'x' and 'y' variables in the point text box.
     Well now were not even moving! We'll have to make 'dd' and 'dc' go somewhere, so we'll add the variables 'bb' and 'cc'. They're the speed/direction of the 'dd' and 'dc' variables (assigning 'bb' a negative value will subtract from the 'dd' variable and a positive value adds to the 'dd' variable, get it?). We'll init them at some respectable decimals .3 and .1. So now the ball is moving because of these new additions to the frame text box but it eventually just floats off of the screen! That's no good. So now we're introducing the 'if' statements. Their syntax is "if(cond,vartrue,varfalse)". Cond can equal any of the ones listed when you press the help button on a Trans / Movement. Basically, if the cond is true then it returns vartrue, otherwise it returns varfalse.
     So what if you want to change a variable only if the cond is true or vice versa? Well then you just put in the changed value after the cond and then a comma and the original variable or vice versa. Confused? Well if we wanted to change 'bb' to a negative value -only- if 'dc' is above one then we'd enter 'dc=if(above(dc,1),-bb,bb)'. So we'll need 4 'if' statements because we have 4 sides of the AVS window :) Or do we? If we just use a handy dandy absolute value function (abs()) we can avoid two 'if' statements. We'll just set 'bb' equal to -'bb' if the absolute value of 'dc' is above 1. (translation: we'll reverse directions if we hit the side of the window.) Do the same for 'cc' and 'dd'.
     Alrighty, adding more to the frame text box, we now have a nice bouncy ball, but can we get some variety in here!! That's where the beat and the second superscope come into play, lets say we change speed/direction/size every time a beat hits? For that we just add a few lines (that should be self explanatory to you now) to the beat text box and change 4 to 't' while initializing 't' at 1. We'll init bb and cc at random values so everytime you start the preset the ball will go a different direction, also.
     After a few tests we find out that if the song's beat is too fast the ball can get stuck on the side of one of the walls. So let's just randomly send the ball to the middle, eh? Well we could add another variable, but now our superscope is getting pretty rowdy, so lets conserve some space and base it on one of the existing variables. For that we'll just look at our code.
     Hmm.. if we take a look at the 't' variable in the Beat text box we can see that on occasion it will equal 2 so we'll just say if 't' equals two (when the ball is the biggest) we'll send the ball to the middle of the screen. For that we need two more 'if's' (remember, x -and- y.) Now were finished with a nice bouncy beat ball :)
 
PS
 
     Dissatisfied? You should be. This is a tutorial. It -should- be filled with lame, barely usable scopes. The rest is for you to decide! With some creativity you can do some crazy stuff with scopes. I did a lot of the more symmetrical examples. More often than not there's a lot of work that goes into good scopes with an unbalance ratio of lots of work and little substance, as seen in the last effects list. But that's the price you pay for unlimited customability that AVS provides!
 
Written by Idealius
idealius@yahoo.com
http://8.deskmod.comr/avs
 
http://avs.chat.ru