SuperCollider's Osc UGen requires a buffer in wavetable format, not a plain Signal
The Osc wavetable oscillator in SuperCollider reads from a Buffer that must be in ‘wavetable format’ — an interleaved representation different from a plain sample buffer. A Signal object (created with Signal.sineFill) holds a plain float array; calling .asWavetable converts it to the required format. Loading a plain Signal buffer into Osc produces wrong output. The conversion doubles the buffer size. Once in a Buffer, the wavetable is addressed by bufnum, and Osc behaves like SinOsc but with a custom waveform. This workflow (sineFill → asWavetable → Buffer.loadCollection) is the standard way to define arbitrary single-cycle waveforms.
Examples
~sig = Signal.sineFill(1024, [1, 0, 0.5, 0.25], [0,0,0,0]); ~wt = ~sig.asWavetable; ~buf = Buffer.loadCollection(s, ~wt); { Osc.ar(~buf, 220) * 0.2 ! 2 }.play;
Assessment
A student loads a Signal directly into a Buffer without calling asWavetable and uses it with Osc. What goes wrong? What conversion step is missing?