hsc3-0.21: Help/Graph/adc-shepard-tones.hs
-- shepard tones, alberto de campo (adc)
let interp n l r = let i = (r - l) / n in [l,l + i .. r - i]
hanning_window n =
let lp = pi * (-0.5)
rp = lp + 2 * pi
hf i = sin i * 0.5 + 0.5
in map hf (interp n lp rp)
freq_tbl = let amp_f i = (0.5 ** i) * 20000 in map amp_f (interp 1024 0 10)
amp_tbl = let square x = x * x in map square (hanning_window 1024)
b0 = asLocalBuf freq_tbl
b1 = asLocalBuf amp_tbl
rate = 0.1
ratescale = 1024 / 48000 / 10 -- sample-rate
ph = phasor ar 0 (rate * ratescale) 0 1024 0
phases = mce (map (\n -> n * 0.1 * 1024 + ph) [0..9])
freqs = bufRdC 1 ar b0 phases Loop
amps = bufRdC 1 ar b1 phases Loop
in mix (sinOsc ar freqs 0 * amps) * 0.05
-- shepard tones, alberto de campo (adc) ; id
let interp n l r = let i = (r - l) / n in [l,l + i .. r - i]
hanning_window n =
let lp = pi * (-0.5)
rp = lp + 2 * pi
hf i = sin i * 0.5 + 0.5
in map hf (interp n lp rp)
freq_tbl = let amp_f i = (0.5 ** i) * 20000 in map amp_f (interp 1024 0 10)
amp_tbl = let square x = x * x in map square (hanning_window 1024)
b0 = asLocalBufId 'α' freq_tbl
b1 = asLocalBufId 'β' amp_tbl
rate = 0.1
ratescale = 1024 / 48000 / 10 -- sample-rate
ph = phasor ar 0 (rate * ratescale) 0 1024 0
phases = mce (map (\n -> n * 0.1 * 1024 + ph) [0..9])
freqs = bufRdC 1 ar b0 phases Loop
amps = bufRdC 1 ar b1 phases Loop
in mix (sinOsc ar freqs 0 * amps) * 0.05