Getting Tidal to run on a low-spec 32 bits system

Intro

It appears it's quite hard to get Tidal running properly on a 32 bit system when it's low-spec. I've been trying some ideas and also been reading the topic Tidal on Raspberry Pi 4 with Ubuntu? where @renzo.rospigliosi explained he had to switch to a 64 bit system on the raspi to get it to finally work. I, however, have no option with the computer which I'm trying to get Tidal to work on.

System

OS: Debian GNU/Linux 11 (bullseye) i686
Kernel: 4.9.0-279-antix.1-486-smp
Host: ASUS Eee PC 1000HA
CPU: Intel Atom N270 (2 cores) @ 1.600GHz 
GPU: Intel Mobile 945GM/GMS/GME, 943/940GML Express 
Memory: 992MiB
Audio device: Intel Corporation NM10/ICH7 Family High Definition Audio Controller (rev 02)
Audio Device Subsystem: ASUSTeK Computer Inc. NM10/ICH7 Family High Definition Audio Controller

Problem

My main problem right now is XRuns. They are constant when certain patterns are being played. I'm not sure what the common factor is between the patterns that start the XRuns, like, no idea at all. Of course high polyphony and using lots of effects generate them quite quickly but sometimes I get XRuns on very simple patterns.

JackEngine::XRun: client = SuperCollider was not finished, state = Running

However

When the XRuns are happening the CPU isn't at 100% usage as one would asume. There's spare CPU time from what I can see on htop.

Current most-effective setup

CPU

The cpu is set to performance mode using cpupower.

$ sudo cpupower frequency-set --governor performance 

Which means for this system that the CPU clock speed will be constantly 1.6GHz

Jackd

Jackdmp version 1.9.17 tmpdir /dev/shm protocol 8

$ jackd -R -d alsa -S -p 256 -n 4 -i 0
  • Realtime mode activated
  • Alsa backend
  • 16 bit little-endian
  • 48000 Hz (default)
  • 256 frames per period
  • 4 periods for playback
  • 0 inputs

Note that I tried higher frame and period sizes, even insanely high sizes. I tried using lower frame sizes as suggested by @yaxu on the discord server and it helped a little bit or so it seems.

SuperCollider

SuperCollider 3.11.2 - loaded via terminal
Has realtime priority.

s.options.numBuffers = 1024 * 128;
s.options.memSize = 8192 * 32;
s.options.numWireBufs = 64;
s.options.maxNodes = 1024*32;
s.options.numOutputBusChannels = 2;
s.options.numInputBusChannels = 0;

Note

My audio device does have inputs, I'm just telling SC to ignore them.

SuperDirt

SuperDirt 1.7.3

~dirt = SuperDirt.new(1, s);
~dirt.doNotReadYet = true;
~numberOfOrbits = 8;
s.sync;
~dirt.start(57120, 0!~numberOfOrbits);

Running in mono just to see if it helps lower resource demand (although this doesn't seem to be the issue, since as explained earlier, there's spare CPU time).

Tidal

Tidal 1.8.0

tidal <- startTidal (superdirtTarget {oLatency = 1.0, oAddress = "127.0.0.1", oPort = 57120}) (defaultConfig {cVerbose = True, cFrameTimespan = 1/5})

Editor

  • nvim
  • tidal-vim

Environment

I've tried both using i3 with RoxTERM and using the tty's without loading any WM.

Other things I've tried

  • Disabling wireless internet connection
  • I should clarify I am on the machine's audio group

End note

What should I try now? Using something other than alsa? Any ideas?

1 Like

I've tried running tidalcycles on a rpi3B+. It doesn't work very well on anything but simple patterns and stutters in a minute or so. This would be an armv7 with the standard 32 bit OS. I've not read about the 64 bit solution, but the intel atoms should be a lot better than the broadcom raspberry pi 3s 32 bit or otherwise.

Supposedly the jackd number of periods should be 3 for USB but I really think that part doesn't matter. What you might like to try would be a jackd -R -d plug -d alsa. I found that worked a lot better in my test with other soft synths.

Also you might like to not load up all the samples in the dirt-sample library. I tried the on demand loading, and removing 70 percent of the samples, and so ,at least on the rpi3B+, it helped slightly but 1GB ram is too little for anything, plus I think the constant reads from the SD card was causing more glitches. I also reduced the number of orbits to 4.

But by then, i decided to run without X, and it worked the best of the lot. So you might like to try running without GUI of any sort, which doesn't quite work for me because I want to run some plugins and those need a windowing environment. Also yaxu had a C version of superdirt, which should help with the overheads.

I also think maybe you might like to try having a larger swap file on disk.

btw which distro is this with the antix kernel? Have you tried the liquorix ones? Also does tidalvim work? It doesn't seem to tmux copy from one frame to another.

Hmhm I never saw a boot like this. What does it do? I'll try it either way

Yes, I'm doing that! Also I'm loading from a mounted USB instead of HDD since it usually runs faster.

Also tried it. Although not all the way. Technically I still have antiX' log-in screen running. Since I tried it on the TTYs.

I don't remember hearing about this. Can you link it to me? @yaxu

It's antiX, I decided to test it out on this laptop. Running quite well tbh.

Nope, should I? Is there a way to easily switch kernels keeping all my configs and stuff? I never tried doing it

Yes, perfectly. BUT I'm using tidal-vim on nvim with terminal mode.

the formatting is a bit screwed up, but let's say aplay -l shows hw0 and hw1 then run

jackd -d alsa -d plughw:0

Here's where i muddled through, trying to get a dedicated tidal synth.

Trying to have an operating nc10 before the end of the summer, it's embedding a n270 too.
I tried last weekend using the alternate 18.04 i386 iso, then selecting ubuntu studio base desktop and scripts (which installed a genuine xfce de, antiX or MX would be a better choice indeed).
As said on discord i was stuck at cabal install tidal :


@cleary supposed it was an integrity issue from an upstream file

Meanwhile ive had a pair of interesting reads
We're supposed to edit the repos to add a ppa that has and maintains emacs 26.3 and above (gnu keyring and melpa issues) : GNU Emacs 26.3 Released, How to Install it in Ubuntu 18.04
As i386 users we're more or less doomed : Statement on 32-bit i386 packages for Ubuntu 19.10 and 20.04 LTS | Ubuntu
Im about to start from scratch and try the ansible installer
Do you have any opinion on a possible improvement if we use an os that ditches systemd and uses another sysinit environment?

wow just googled the nc10, we have quite similar specs going on !!! personally i had absolutely no trouble installing tidal. the problem is more with it working properly as you see... so i'd totally recommend antiX over any ubuntu flavour on these low specs.

about systemd:
i actually have no idea what systemd is, and i've been curious about it since some info about it popped up in some installation i tried to do lol. i'll read about it today then.

curious about the liquorix kernels tho...

AHHHHH i totally forgot the original Dirt was C-based

I will try Dirt now, but still, here are some ideas to minimize the resource demand even more that we could try out on even lower spec systems:

  • Ditch regular samples completely
    • Maybe a back-end that simply takes Tidal's OSC and turns them into simple MIDI that goes into fluidsynth ? For those who don't know fluidsynth is a MIDI Soundfont player. I tried using it for some old Windows games that used MIDI, running with WINE, and it works wonders tbh.
    • Maybe an FM Synth based backend ? (just dreaming/brainstorming here, I've no idea how plausible this is) I imagine 6 DX7-like synths with some controllable presets would be enough.

So it seems that cabal is globally broken on 18.04 and derivatives.
Wonder if stack would work ok.
About to test some lightweight non-systemd debian derivatives (Devuan chimaera and GNUinos) but there's no reason it shouldnt work.

I casually got warnings on superfm memory access on SC startup, maybe one with only 2-op crossmod should be enough, like half of an YS200 rather than a DX7 !

Well i now have the famous whitescreen flaw, even at grub. I suck at smd soldering. Ill wait a few weeks to take a decision (decent equivalents are about 40€ on classifieds) but following this thread anyway.
Edit: might be an issue in the display driver in sysv or the antix kernel, it's running debian 11 with lxqt, and the ansible installer for tidal_vim looks like it's working great for i386 machines !
Edit 2: snagged a 60 gb sata ssd in the nc10 (9€ on a classifieds site), it doesnt do many miracles but the disk access is way faster, and it looks like the blank screen issue is fixed. Installing devuan with sysvinit rn