You are here

Add new comment

rncbc's picture

In summary, audio playback in qtractor goes like this:

  1. each audio clip refers to a region of an audio file
  2. each audio file is handled through one audio buffer (ringbuffer)
  3. each audio (ring)buffer is served by one dedicated thread, filling the ringbuffer from disk, doing sample-rate conversion and time-stretching when applicable
  4. the real-time thread, on each jackd callback, reads from each audio clip ringbuffer, processes plugins, mix-down and finally writes the result jack output port buffers; the nested chain of command is qtractorAudioEngine::process() -> qtractorSession::process() -> [for each audio track: qtractorTrack::process() -> [for each current clip: qtractorAudioClip::process()]]

Although the bare fundamentals are the same (ie. jackd programming model) I doubt whether ardour follows the same approach, specially regarding the one thread per clip (a region in ardour slang). I believe ardour is way more streamlined (and stand correct) in this and most regards ;)

Note: the term "sync", splintered all over the code path, is just my own call for trying to (book)keeping all threads in time.

HTH
--
rncbc aka Rui Nuno Capela