librelist archives

« back to archive

Delay unit generator

Delay unit generator

From:
Tom Lieber
Date:
2010-01-04 @ 22:28
I created a Delay unit generator in Lua to see how much we can expect
where large arrays of samples are concerned. At 44100 sample rate,
this doesn't start dropping samples for me until the buffer's at least
a couple hundred milliseconds long. A second-long delay line clicks
every second, but it's definitely not as bad as I was expecting.

Delay = {
  new = function(class, delay)
    return UGen.initialize_io({
      delay = delay or second,
      last_value = 0.0,
      last_values = {},
      tick = function(self)
        if not(now() == self.last_tick) then
          local vals = self.last_values;
          local offset = math.ceil(self.delay); -- no sub-samples for you!

          vals[#vals + 1] = UGen.sum_inputs(self);

          self.last_value = vals[#vals - offset] or 0.0;

          if #vals > offset * 2 then
            for i = 1, offset, 1 do
              vals[i] = vals[#vals - offset + i]
            end

            for i = offset + 1, #vals, 1 do
              vals[i] = nil
            end
          end

          self.last_tick = now();
        end
        return self.last_value
      end
    })
  end
}

-- 
Tom Lieber
http://AllTom.com/