Using the Tickle in a Linux Environment

Prerequisite is a Linux system already optimized and configured for real-time audio performance.

The Tickle is a USB 2.0 class compliant audio and MIDI device. Use the lsusb command to see if it is connected:

$ lsusb | grep tickle
Bus 003 Device 028: ID 04b4:bef0 Cypress Semiconductor Corp. tickle
more info

The audio device provides one channel of audio output towards the host and no audio sink. The command aplay --list-devices only shows sinks, so it will not list the Tickle device. The counterpart arecord --list-devices will.

$ arecord --list-devices
card 5: tickle [tickle], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0

Or more:

cat /proc/asound/cards | grep "tickle
5 [tickle         ]: USB-Audio - tickle
                  chair.audio tickle at usb-0000:00:14.0-6, full speed

The Tickle only knows one sample rate: 44100 Hz. Since you also need an audio output to hear the amazing sounds it will make, you will experience clock deviation which will inevitably result in dropouts. The only way to avoid this is adaptive resampling. This also allows the host to run with a higher sample rate. We recommend to either use the Jack2 environment or PipeWire on your machine. If you use Jack2, we recommend to use the zita-a2j tool for adaptive resampling. After Jack is started (for example using a GUI like QjackCtl or Cadence) run the Zita ALSA to Jack bridge command

$ zita-a2j -d hw:tickle -c 1 -r 44100 -j Tickle
Starting synchronisation.
zita-a2j flags explanation
-d device
-c number of channels
-r sample rate
-j Jack name

QjackCtl provides a Graph view which lets you explore and manage Jack-audio and ALSA-MIDI connections. The Jack-audio (green) Tickle device going into input0 of pure_data is provided by the zita-a2j resampler started with the aforementioned command.


If your QjackCtl does not provide the Graph window you might want to update. Activating the rncbc PPA helps to stay updated on ubuntu based systems.

Next step: Try out the Pure Data examples.

2 Likes

Hi Max,
it is not clear to me why I cannot start jackd with Tickle as capture device which works to me:

jackd -d alsa -r 44100 -C hw:tickle -P hw:CODEC

why is this really different than using zita-a2j?

Yes, this works, but you will inevitably get dropouts at some point. When using two different sound cards, both will have their own hardware clocks (quartz crystal oscillators) and even when you set them to the same sampling rate they will inevitable drift apart and then cause dropouts. The only way to solve this is adaptive resampling. Adding another input to your jack system via zita-a2j will take care of this issue through the zita-resampler and also will allow jack and Pd to run on a higher sample rate (an added benefit!). A well tuned system with a good sound card should be able to run 48 kHz with a block size of 64 samples (or better). Higher sampling rates and lower block sizes will reduce latency, giving you an improved playing experience and the feeling of intimate control.

Cool!
yeah, it is true I was getting some dropouts and now it sounds perfect! thanks!

For jack1 users like me, the graphic environment to edit connections is still qjackctl Patchbay, in my case it looks like:

If you add the rncbc PPA your QjackCtl will be updated (mine is 0.6.1.9git as of today) and you will have the nice Graph window too. The Patchbay is still super useful to make it connect automatically.

If you have migrated to a pipewire setup, there is in-built support and automatic resampling with multiple sound cards. No more need for zita-a2j in that case.