• Posts
  • RSS
  • ◂◂RSS
  • Contact

  • More work on looper software

    April 26th, 2010
    looper, tech, music  [html]
    I've now (after talking to chris jacoby and blake) got the software for a three loop synchronizing system working. The problem I had last week was that I needed the loops to sync: now I understand what I needed to do. Calculating how long you need to wait until the beginning of the loop comes around is somewhat tricky. The issue was that LiSa buffers have several attributes: duration, play/record positions, and loop start/ends. Waiting for loopEnd - position samples is pretty good, unless the loop happens to go off the end of the buffer and come back on the other side, in which case loopEnd will be less than position and we can't wait for negative intervals. So in those cases we want to add on the duration of the loop. To cover both cases, we calculate the result modulo duration, so we're always between 0 and duration, which gives:
    (duration + loopEnd - position) % duration
    Unfortunately, this isn't quite right. There's latency involved in the system, with buffers in several places. This means that the samples that you are recording at time T were created to go along with samples that you played at time T - latency where latency is small but noticible. If I were able to get jack working with chuck in realtime mode (and the usb mouse driver too) then I might be able to get latency down to perhaps 2ms (64 samples) and be able to ignore it. That approach didn't seem to be working. Talking to blake, though, I realized I could simply start recording a little early to compensate. So really the number of samples to wait for is:
    (duration + loopEnd - position - latency) % duration
    Then the question is, what to set latency to. I put jack on its default setting, where it performed pretty well. This turned out to be using two buffers of 1024 samples each. So I started with latency set to 2048. Some trial and error showed that really what I wanted was 1024+1024+512. Where does the 512 come from? I'm not sure. It might be jack's input buffer, or perhaps a chuck buffer. Regardless, I can now play one loop and then put another one on top of it totally synchronized. Very exciting.

    Comment via: facebook

    Recent posts on blogs I like:

    What should we do about network-effect monopolies?

    Many large companies today are software monopolies that give their product away for free to get monopoly status, then do horrible things. Can we do anything about this?

    via benkuhn.net July 5, 2020

    More on the Deutschlandtakt

    The Deutschlandtakt plans are out now. They cover investment through 2040, but even beforehand, there’s a plan for something like a national integrated timetable by 2030, with trains connecting the major cities every 30 minutes rather than hourly. But the…

    via Pedestrian Observations July 1, 2020

    How do cars fare in crash tests they're not specifically optimized for?

    Any time you have a benchmark that gets taken seriously, some people will start gaming the benchmark. Some famous examples in computing are the CPU benchmark specfp and video game benchmarks. With specfp, Sun managed to increase its score on 179.art (a su…

    via Posts on Dan Luu June 30, 2020

    more     (via openring)


  • Posts
  • RSS
  • ◂◂RSS
  • Contact