'''
'''
'''
AudioFile$ = "01.mp3"
Left = _MEMSOUND(S, 1)
Right = _MEMSOUND(S, 2)
'''
FL = GetFreQ(S, Left, 1024)
FR = GetFreQ(S, Right, 1024)
CASE 20 TO 125: Analyzer
(1) = Analyzer
(1) + 30 'areas set by picture on google... CASE 126 TO 300: Analyzer
(2) = Analyzer
(2) + 30 CASE 300 TO 500: Analyzer
(3) = Analyzer
(3) + 30 CASE 500 TO 1000: Analyzer
(4) = Analyzer
(4) + 30 CASE 1001 TO 2000: Analyzer
(5) = Analyzer
(5) + 30 CASE 2001 TO 4000: Analyzer
(6) = Analyzer
(6) + 30 CASE 4001 TO 8000: Analyzer
(7) = Analyzer
(7) + 30 CASE IS > 8001: Analyzer
(8) = Analyzer
(8) + 30
CASE 20 TO 125: Analyzer2
(1) = Analyzer2
(1) + 30 'areas set by picture on google... CASE 126 TO 300: Analyzer2
(2) = Analyzer2
(2) + 30 CASE 300 TO 500: Analyzer2
(3) = Analyzer2
(3) + 30 CASE 500 TO 1000: Analyzer2
(4) = Analyzer2
(4) + 30 CASE 1001 TO 2000: Analyzer2
(5) = Analyzer2
(5) + 30 CASE 2001 TO 4000: Analyzer2
(6) = Analyzer2
(6) + 30 CASE 4001 TO 8000: Analyzer2
(7) = Analyzer2
(7) + 30 CASE IS > 8001: Analyzer2
(8) = Analyzer2
(8) + 30
'analyzer overflow control
FOR Analyze
= 1 TO 8 ' analyze 8 spectrums IF Analyzer
(Analyze
) > 150 THEN Analyzer
(Analyze
) = 150 IF Analyzer2
(Analyze
) > 150 THEN Analyzer2
(Analyze
) = 150
'draw analyzer
AnC = 0
AnC = AnC + 1
FreqHeight = Analyzer(AnC) ' Y coordinate for drawing frequency analyzer, maximal size is 150 pixels
FreqHeight2 = Analyzer2(AnC)
LINE (AnalyzatorX
- 4, 400)-(AnalyzatorX
+ 4, 400 - FreqHeight
), &HFFAD0000, BF
LINE (AnalyzatorX
+ 300 - 4, 400)-(AnalyzatorX
+ 300 + 4, 400 - FreqHeight2
), &HFFAD0000, BF
IF Analyzer
(AnC
) > 0 THEN Analyzer
(AnC
) = Analyzer
(AnC
) - 1 ' IF Analyzer2
(AnC
) > 0 THEN Analyzer2
(AnC
) = Analyzer2
(AnC
) - 1 ' always, if analyzer contains some higher position than bottom, give one pixel out
sw = Samples&
DIM x_r
(sw
- 1), x_i
(sw
- 1) DIM xx_r
(sw
- 1), xx_i
(sw
- 1)
Position&
= _SNDGETPOS(SoundHandle
) * _SNDRATE * 2 ' *2, because sound data are in INTEGER format and INTEGER is always 2 byte long IF Position&
> Samples&
AND Position&
< arr.SIZE
- Samples&
THEN 'current (actual playing) sound frame is in middle - in position Position& j& = Position& - Samples&
i = i + 1
j& = j& + 2
' test& = j& - Position&
i = 0
j& = 0
rfft xx_r(), xx_i(), x_r(), sw
'find peak
max = 0
m = 0
d
= 0.01 * SQR(xx_r
(i
) * xx_r
(i
) + xx_i
(i
) * xx_i
(i
)) max = d
m = i
u_r = xx_r(m - 1) - xx_r(m + 1)
u_i = xx_i(m - 1) - xx_i(m + 1)
v_r = 2 * xx_r(m) - xx_r(m - 1) - xx_r(m + 1)
v_i = 2 * xx_i(m) - xx_i(m - 1) - xx_i(m + 1)
c = (u_r * v_r + u_i * v_i) / (v_r * v_r + v_i * v_i)
sem:
GetFreQ
= (m
+ c
) * _SNDRATE / Samples&
' 1024 = number of samples
SUB rfft
(xx_r
(), xx_i
(), x_r
(), n
)
rev = 0
IF i
AND (2 ^ j
) THEN rev
= rev
+ (2 ^ (log2n
- 1 - j
))
xx_r(i) = x_r(2 * rev)
xx_i(i) = x_r(2 * rev + 1)
m = 2 ^ i
w_r = 1
w_i = 0
p = j + k
q = p + (m \ 2)
u_r = w_r * xx_r(q) - w_i * xx_i(q)
u_i = w_r * xx_i(q) + w_i * xx_r(q)
v_r = xx_r(p)
v_i = xx_i(p)
xx_r(p) = v_r + u_r
xx_i(p) = v_i + u_i
xx_r(q) = v_r - u_r
xx_i(q) = v_i - u_i
u_r = w_r
u_i = w_i
w_r = u_r * wm_r - u_i * wm_i
w_i = u_r * wm_i + u_i * wm_r
xx_r(n / 2) = xx_r(0)
xx_i(n / 2) = xx_i(0)
xx_r(n / 2 + i) = xx_r(n / 2 - i)
xx_i(n / 2 + i) = xx_i(n / 2 - i)
xpr = (xx_r(i) + xx_r(n / 2 + i)) / 2
xpi = (xx_i(i) + xx_i(n / 2 + i)) / 2
xmr = (xx_r(i) - xx_r(n / 2 + i)) / 2
xmi = (xx_i(i) - xx_i(n / 2 + i)) / 2
xx_r
(i
) = xpr
+ xpi
* COS(2 * pi
* i
/ n
) - xmr
* SIN(2 * pi
* i
/ n
) xx_i
(i
) = xmi
- xpi
* SIN(2 * pi
* i
/ n
) - xmr
* COS(2 * pi
* i
/ n
)
'symmetry, complex conj
xx_r(n / 2 + i) = xx_r(n / 2 - 1 - i)
xx_i(n / 2 + i) = -xx_i(n / 2 - 1 - i)