Client that dumps samples directly to the jack client with the jack package.

autopilot.stim.sound.jackclient.SERVER = None

JackClient – After initializing, JackClient will register itself with this variable.

autopilot.stim.sound.jackclient.FS = None

int – Sampling rate of the active server

autopilot.stim.sound.jackclient.BLOCKSIZE = None

int – Blocksize, or the amount of samples processed by jack per each JackClient.process() call.

autopilot.stim.sound.jackclient.QUEUE = None

multiprocessing.Queue – Queue to be loaded with frames of BLOCKSIZE audio.

autopilot.stim.sound.jackclient.PLAY = None

multiprocessing.Event – Event used to trigger loading samples from QUEUE, ie. playing.

autopilot.stim.sound.jackclient.STOP = None

multiprocessing.Event – Event that is triggered on the end of buffered audio.


NOT an event used to stop audio.

autopilot.stim.sound.jackclient.Q_LOCK = None

multiprocessing.Lock – Lock that enforces a single writer to the QUEUE at a time.

class autopilot.stim.sound.jackclient.JackClient(name='jack_client')[source]

Bases: multiprocessing.process.Process

Client that dumps frames of audio directly into a running jackd client.

When first initialized, sets module level variables above.

  • name (str) – name of client, default “jack_client”
  • q (Queue) – Queue that stores buffered frames of audio
  • q_lock (Lock) – Lock that manages access to the Queue
  • play_evt (multiprocessing.Event) – Event used to trigger loading samples from QUEUE, ie. playing.
  • stop_evt (multiprocessing.Event) – Event that is triggered on the end of buffered audio.
  • quit_evt (multiprocessing.Event) – Event that causes the process to be terminated.
  • client (jack.Client) – Client to interface with jackd
  • blocksize (int) – The blocksize - ie. samples processed per JackClient.process() call.
  • fs (int) – Sampling rate of client
  • zero_arr (numpy.ndarray) – cached array of zeroes used to fill jackd pipe when not processing audio.



Called by JackClient.run() to boot the server upon starting the process.

Activates the client and connects it to the number of outports determined by prefs.NCHANNELS

jack.Client s can’t be kept alive, so this must be called just before processing sample starts.


Start the process, boot the server, start processing frames and wait for the end.


Set the JackClient.quit_evt


Process a frame of audio.

If the JackClient.play_evt is not set, fill port buffers with zeroes.

Otherwise, pull frames of audio from the JackClient.q until it’s empty.

When it’s empty, set the JackClient.stop_evt and clear the JackClient.play_evt .


Handling multiple outputs is a little screwy right now. v0.2 effectively only supports one channel output.

Parameters:frames – Unused - frames of input audio, but there shouldn’t be any.