# [PlanetCCRMA] Re: sine waves in real time

Bill Schottstaedt bil at ccrma.Stanford.EDU
Mon Oct 15 15:23:02 2007

```> On a very recent Intel laptop running a Core Duo at 2.4GHz (I think
> that's the speed), SuperCollider would do 500 interpolated sine
> oscillators with a (roughly) 50% cpu load (in one of the cores).

In the Scheme version of Snd, at 44100 KHz, I get about 180 such
sines (actually, I'm calling the sin function, not interpolating some
table):

(with-sound (:statistics #t)
(let ((gens (make-vector 180)))
(do ((i 0 (1+ i)))
((= i 180))
(vector-set! gens i (make-oscil (* 10 (1+ i)) (random (* 2 pi)))))
(run
(lambda ()
(do ((i 0 (1+ i)))
((= i 44100))
(let ((sum 0.0))
(do ((k 0 (1+ k)))
((= k 180))
(set! sum (+ sum (oscil (vector-ref gens k)))))
(outa i (* .01 sum) *output*)))))))

;test.snd:
maxamp: 0.2935
compute time: 1.020

30% of the time is handling the loops and writing output, nearly all the rest
is in the oscils, so if I were writing direct to a DAC, I'd estimate 200.
More interesting to me is the same question with the fm-violin -- I
think I get 53:

(with-sound (:statistics #t)
(do ((k 0 (1+ k)))
((= k 53))
(fm-violin 0 1 440 .01)))

;test.snd:
maxamp: 0.4320
compute time: 1.000

In the Common Lisp (sbcl) clm, I get around 68:

(with-sound (:srate 44100 :statistics t) (do ((i 0 (1+ i))) ((= i 68)) (fm-violin 0 1 440 .01)))
test.snd:
Duration: 1.0000, Last begin time: 0.0000
Compute time: 0.997, Compute ratio: 1.00
OutA max amp: 0.559 (near 0.249 secs)
"test.snd"

and presumably the sine wave case would scale similarly.

```