mirror of
https://github.com/WinampDesktop/winamp.git
synced 2024-09-24 15:54:12 +00:00
59 lines
2.5 KiB
Text
59 lines
2.5 KiB
Text
|
SPS allows you to program signal processing using simple expressions.
|
|||
|
|
|||
|
Many aspects of SPS code are similar to C (including comments).
|
|||
|
|
|||
|
You can create new variables just by using them, and you can read
|
|||
|
and write predefined variables (of which each effect has its own)
|
|||
|
to interact with the effect. Note that variables are all floating
|
|||
|
point numbers (no strings), and the maximum length of a variable's
|
|||
|
name is 8 characters (anything longer will be ignored).
|
|||
|
|
|||
|
So, to create a variable, you can simply use it, for example:
|
|||
|
x = 5;
|
|||
|
|
|||
|
You can also use a variety of operators and math functions to
|
|||
|
modify variables, see the Operators and Functions tabs above.
|
|||
|
|
|||
|
Code can include C and C++ style comments:
|
|||
|
// using the doubleslash comments until the end of the line
|
|||
|
/* using the classic C comments
|
|||
|
comment a block of text */
|
|||
|
|
|||
|
You can combine operators and functions into expressions, such
|
|||
|
as:
|
|||
|
x = 5 * cos(y) / 32.0; // this does some leetness right here
|
|||
|
|
|||
|
You can use multiple expressions by seperating them with one or
|
|||
|
more semicolons, for example:
|
|||
|
x = x * 17.0; x = x / 5; y = pow(x,3.0);
|
|||
|
|
|||
|
It is worth noting that extra whitespace (spaces, newlines) is
|
|||
|
ignored, so if you need to space things out for clarity, you can.
|
|||
|
|
|||
|
Variables that are predefined for your effect to use:
|
|||
|
nch: number of channels of PCM stream (1 or 2)
|
|||
|
srate: samplerate of stream (i.e. 44100)
|
|||
|
slider1, slider2, slider3, slider4: the four sliders. Each has a range of 0.0..1.0
|
|||
|
trig1, trig2, trig3, trig4: the four trigger buttons. These should be reset to 0.0
|
|||
|
by your code when you've caught the trigger
|
|||
|
|
|||
|
Variables that your per-sample code can modify to apply its effect:
|
|||
|
spl0 = left/mono channel sample, -1.0..1.0
|
|||
|
spl1 = right channel sample, if nch == 2, -1.0..1.0
|
|||
|
skip = set this to > 0 to drop the current sample and not output it
|
|||
|
(this effectively can be used to speed up the output
|
|||
|
repeat = set this to > 0 to process this sample again after
|
|||
|
outputting (this effectively can be used to slow down
|
|||
|
the output. Note that the most you can slow down the
|
|||
|
output due to Winamp architecture limitations is by 50%)
|
|||
|
|
|||
|
Now to the important part, how to actually make meaningful effects:
|
|||
|
A simple volume control might be:
|
|||
|
spl0 = spl0*slider1; spl1=spl1*slider1;
|
|||
|
To slow down the output to half speed:
|
|||
|
tmp=bnot(tmp); repeat=tmp;
|
|||
|
To speed up the output to double speed:
|
|||
|
tmp=bnot(tmp); skip=tmp;
|
|||
|
To swap left and right channels:
|
|||
|
tmp=spl0; spl0=spl1; spl1=tmp;
|
|||
|
etc |