#lang scribble/manual @(require (for-label racket)) @title{subsample-offset} Offset from synth start within one sample. When a synth is created from a time stamped osc-bundle, it starts calculation at the next possible block (normally 64 samples). Using an offset-out ugen, one can delay the audio so that it matches sample accurately. For some synthesis methods, one needs subsample accuracy. subsample-offset provides the information where, within the current sample, the synth was scheduled. It can be used to offset envelopes or resample the audio output. See also offset-out. Demonstrate cubic subsample interpolation. An impulse train that can be moved between samples. @racketblock[ (with-sc3 (lambda (fd) (send-synth fd "s" (letc ((out 0) (add-offset 0)) (let* ((i (mul (impulse ar 2000 0) 0.3)) (d sample-dur) (x 4) (o (add (sub 1 subsample-offset) (mouse-x kr 0 add-offset 0 0.1))) (r (delay-c i (mul d (add 1 x)) (mul d (add o x))))) (offset-out out r)))))) ] Create two pulse trains one sample apart, move one relative to the other. When cursor is at the left, the impulses are adjacent, on the right, they are exactly 1 sample apart. View this with an oscilloscope. @racketblock[ (with-sc3 (lambda (fd) (let ((t (utc)) (dt (/ 1 (server-sample-rate-actual fd)))) (send fd (bundle (+ t 0.2) (list (s-new1 "s" -1 1 1 "addOffset" 3)))) (send fd (bundle (+ t 0.2 dt) (list (s-new1 "s" -1 1 1 "addOffset" 0))))))) ]