NUM, NUMCHECK

command return value value of RC
NUM expression value of expression or
empty string if the evaluation fails
0
error code
NUMCHECK expression value of expression or
empty string if the evaluation fails
0
warning code

The expression will be evaluated numerically, and the result (textual representation) will be returned. The expression may consist of the following parts:

decimal numbers
123.456, 17.5e3, 100, -312.123, 1e-3,…
hexa-decimal numbers
0x1234, 0xabc, 0XabC, …
special constants
pi (=3.1415...), e (=2.71828...),
rand (a linear distributed pseudo random number r; -1≤r<1)
lran (a linear distributed pseudo random number r; 0≤r<1)
numerical operators
-a (negate), a+b (add), a-b (subtract), a*b (multiply), a/b (divide), a%b (modulo), a^b (power)
logical operators (bitwise)
!a (not), a&b (and), a|b (or), a^b (exclusive or)
brackets
(expression)
functions
 setlran(seed) linear distributed pseudo random number r (0≤r<1)seed is the start value (0≤seed<<1) sin(x), cos(x), tan(x) sine, cosine or tangent of x asin(x), acos(x), atan(x) inverse sine, cosine or tangent of x exp(x) computes ex log(x) common logarithm of x (base 10) ln(x) natural logarithm of x (base e) sqrt(x) square root of x (base 10) abs(x) absolute value of x (base 10) int(x) integer part of x, the fractional part is truncated(range of x: 32bit signed integer) round(x) round to the nearest integer of x(range of x: 32bit signed integer) db(x) convert level to factor (10x/20) sinc(x), sinx(x) sinc function: sin(x) / x sign(x) sign of x; returns -1 if x<0, otherwise 1 hz2bark(x) convert x from Hertz to Bark bark2hz(x) convert x from Bark to Hertz bit(n) returns the integer with only bit n (0≤n<32) is set and all other are cleared; can be used to generate bit masks floor(x) returns a floating-point value representing the largest integer that is less than or equal to x(range of x: 64bit float) iserr(rc), iserror(rc) returns 1 if rc is a STx error code, otherwise 0this function can be used to test the completion code RC of a command iswarn(rc), iswarning(rc) returns 1 if rc is a STx warning code, otherwise 0this function can be used to test the completion code RC of a command npow2(n) next power of 2; returns the smallest possible value 2m ≥ n
Notes
• In case of the expression being syntactically ill-formed, an error (NUM) or warning (NUMCHECK) is reported.
• The special numerical objects (vectors, matrices) available in EVAL-expressions, can not be used in the NUM expressions. Only the use of numerical constants and variables is possible.
• The same expression syntax is used for the INT and INTCHECK, for the numerical expressions in conditions (e.g. IF or WHILE) and for the evaluation of numerical arguments of commands.
• Numerical expressions are evaluated in 64bit floating point precission.
• For logical (operators !, &, |, ^) and integer expressions (functions round, int, bit) 32bit signed integers are used.
INT, INTCHECK, EVAL, EVALCHECK, SEGMENT
Examples
// #wave = wave item
#t := num \$#wave[!length] / \$#wave[!srate]          // duration in seconds
// #t = frame length in seconds, #o = overlap in percent
#lfrm := int \$#t * \$#wave[!srate]                   // frame length in samples
#lhop := int \$#t * (1 - \$#o / 100) * \$#wave[!srate] // hopsize in samples
#lfft := int npow2(\$#lfrm)                          // fft length
#df   := num \$#wave[!srate] / \$#lfft                // frequency resolution
// using expressions in a IF statement
if 'db(\$#level)' > 1 then
conlog 'level must be lower or equal 0dB'
#level := 0
end