The mane thing Jack does to achieve low latency is set the optimum buffering parameters for full duplex. The best parameters for a USB card came from
OSS used the terms "fragment" & "sample" to define its buffering, with all the fragments combined to form a "buffer". Audio programs read or wrote 1 fragment at a time. ALSA uses the terms "period" & "frame" with audio being processed 1 period at a time & all the periods combined to still form a "buffer". The unfortunate terms are probably because ALSA was designed by a Hungarian speaker.
Unfortunately, a scratch built audio monitor using mmap is not as easy as Jack makes it look. There are some gnarly buffer alignment problems.
jack_lsp shows the ports which can be passed to jack_connect
These commands route the microphone to the speakers through the DSP:
jack_connect system:capture_1 system:playback_1
jack_connect system:capture_1 system:playback_2
This disconnects a route:
jack_disconnect system:capture_1 system:playback_1
This command records from the microphone:
jack_rec -d -1 -f test.wav system:capture_1
jack_thru creates a dummy signal processor & 4 ports which are shown on jack_lsp which can then be connected. You can see how a signal processor can be built up from the command line.
Developing jack programs requires 'apt-get install libjack-jackd2-dev'
The jack_thru example is in the jack2 source code. Compiling thru_client.c requires merely 'gcc thru_client.c -ljack' The source filenames have nothing to do with the executable names.
Unfortunately, it promotes all the samples to floats.