Overwitch, a JACK client for Overbridge devices, AKA Overbridge for Linux

Hi, I’m having a trouble initializing overwitch,

admin@pop-os:~$ overwitch-cli -n -v 0
ERROR:engine.c:690:(ow_engine_init): Error while initializing device: LIBUSB_TRANSFER_STALL
overwitch-cli: …/…/libusb/os/threads_posix.h:46: usbi_mutex_lock: Assertion `pthread_mutex_lock(mutex) == 0’ failed.
Aborted (core dumped)

admin@pop-os:~$ overwitch-cli -d Analog Rytm MKII -v -b 4
DEBUG:overwitch.c:195:(ow_get_devices): Found Analog Rytm MKII (bus 001, address 002, ID 1935:0010)

Prior to this I was receiving LIBUSB_ERROR_ACCESS so I wrote permission rules to udev and am now faced with this transfer stall.

Any ideas?
Thanks for such a great release by the way!

1 Like

So, it seems like it’s just CLI I’m having issues with.

I’m able to record into Ardour
But when i try to use terminal:

admin@pop-os:~$ overwitch-record -d Analog Rytm MKII -v
DEBUG:overwitch.c:195:(ow_get_devices): Found Analog Rytm MKII (bus 001, address 002, ID 1935:0010)

If it’s not working in the terminal but the GUI is, it might be the parameters you’re passing.

Not sure if this is the problem but you need to quote the device name like this.

$ overwitch-record -d "Analog Rytm MKII" -v

Does this fix it?

I’m having a problem with this but I don’t know if it’s just me missing something.

Basically, the Digitakt external inputs are coming through both Main L&R and Input L&R. How do I stop it coming through Main? I’m using that for the fx but currently the inputs are duplicated in both.

In the DT settings I have Route to Main as just the fx and Int to Main as OFF (this seems to make no difference).

I think there is a Digitakt hardware limitation that doesn’t allow audio to pass thru FX without being mixed into main.

See Send FX for External Input Mixer Via Overbridge?.

i opened a PR for AH+FX support to overwitch:

yay for opensource!

4 Likes

Thanks. That’s so annoying and pretty odd.

hey, i am dreaming of a small device that makes it possible to have all tracks of my digitakt or digitone available as seperate direct outputs, which i can then each plug into my mixer.

I thought maybe a raspberry that can run overbridge plus some kind of audiointerface for the outputs. now i found this.

Do you think it would be possible to create such a device?

It’'s perfectly possible.

In this case, I’d recommend you to not use PipeWire and run JACK directly over the ALSA device , run overwitch-cli and use jack_connect to make the connections. Real time restrictions still apply but that would be all.

What audio interface are you planning to use?

i’ve recently attempted doing exactly that using a raspberry pi 400 but haven’t had success sadly

if anyone has successfully run overwitch-cli on a raspberry i’d be glad to read any details about setting it up!

What issues do you have?

would be great if that really works!
I have no experience with raspberry Pi yet, so iguess there is a lot to learn before i can try this.

my audiointerface is an old Roland UA-1010 Octa-Capture with 8 outputs or my soundcraft mtk 12, but as i want to use it for live gigs size is a huge factor.

I guess if somebody could design a compact device with 8 or 10 outputs with a raspberry pi inside, this would be a killer product among the elektronauts…

@robin how did you try to set it up?

getting a bunch of these every time i try to run it

ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT

haven’t had the stamina to dive deeper into it yet, since overwitch works nicely on my linux laptop.
but it would be great to have it running on the pi nonetheless!

here’s some more verbose output:

-vvv flag added
robin@raspberrypi:~ $ overwitch-cli -vvv
DEBUG:overwitch.c:314:(ow_get_device_desc_from_vid_pid): Failed to open file “/home/robin/.config/overwitch/devices.json”: No such file or directory
DEBUG:overwitch.c:320:(ow_get_device_desc_from_vid_pid): Falling back to /usr/local/share/overwitch/devices.json...
DEBUG:overwitch.c:379:(ow_get_device_desc_from_vid_pid): Device with PID 30 found
DEBUG:overwitch.c:240:(ow_get_usb_device_list): Found Syntakt (bus 001, address 014, ID 1935:001e)
DEBUG:overwitch.c:314:(ow_get_device_desc_from_vid_pid): Failed to open file “/home/robin/.config/overwitch/devices.json”: No such file or directory
DEBUG:overwitch.c:320:(ow_get_device_desc_from_vid_pid): Falling back to /usr/local/share/overwitch/devices.json...
DEBUG:overwitch.c:379:(ow_get_device_desc_from_vid_pid): Device with PID 30 found
DEBUG:engine.c:531:(ow_engine_init_mem): o2p: USB in frame size: 80 B
DEBUG:engine.c:532:(ow_engine_init_mem): p2o: USB out frame size: 32 B
DEBUG:engine.c:541:(ow_engine_init_mem): o2p: USB in block size: 592 B
DEBUG:engine.c:543:(ow_engine_init_mem): p2o: USB out block size: 256 B
DEBUG:engine.c:551:(ow_engine_init_mem): o2p: audio transfer size: 13440 B
DEBUG:engine.c:553:(ow_engine_init_mem): p2o: audio transfer size: 5376 B
DEBUG:engine.c:1280:(ow_engine_load_overbridge_name): USB control in data (32 B): Syntakt
DEBUG:engine.c:1300:(ow_engine_load_overbridge_name): USB control in data (16 B): 0047       1.20A
DEBUG:jclient.c:102:(jclient_set_buffer_size_cb): JACK buffer size: 1024
DEBUG:resampler.c:539:(ow_resampler_set_buffer_size): resampler buffer size: 1024
DEBUG:resampler.c:161:(ow_resampler_reset_dll): Resetting the DLL...
DEBUG:dll.c:114:(ow_dll_primary_reset): Target delay: 39.0 ms (1872 frames)
DEBUG:jclient.c:112:(jclient_set_sample_rate_cb): JACK sample rate: 48000
DEBUG:resampler.c:552:(ow_resampler_set_samplerate): resampler sample rate: 48000
DEBUG:resampler.c:161:(ow_resampler_reset_dll): Resetting the DLL...
DEBUG:dll.c:114:(ow_dll_primary_reset): Target delay: 39.0 ms (1872 frames)
DEBUG:jclient.c:112:(jclient_set_sample_rate_cb): JACK sample rate: 48000
DEBUG:jclient.c:502:(jclient_run): Using RT priority 5...
DEBUG:engine.c:1105:(ow_engine_start): Starting p2o MIDI thread...
DEBUG:engine.c:1118:(ow_engine_start): Starting audio and o2p MIDI thread...
DEBUG:jclient.c:102:(jclient_set_buffer_size_cb): JACK buffer size: 1024
DEBUG:resampler.c:348:(ow_resampler_compute_ratios): Booting Overbridge side...
DEBUG:resampler.c:359:(ow_resampler_compute_ratios): Starting up resampler...
Syntakt@001,014: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 1.013115, avg. 1.000234
DEBUG:resampler.c:407:(ow_resampler_compute_ratios): Tuning resampler...
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
Syntakt@001,014: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 1.038266, avg. 1.017655
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
Syntakt@001,014: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 1.090252, avg. 1.066824
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
Syntakt@001,014: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 1.145662, avg. 1.118421
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
Syntakt@001,014: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 1.161636, avg. 1.153253
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
Syntakt@001,014: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 1.162423, avg. 1.166701
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
Syntakt@001,014: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 1.147373, avg. 1.155812
ERROR:engine.c:328:(cb_xfr_audio_in): o2p: Error on USB audio transfer: LIBUSB_TRANSFER_TIMED_OUT
^CSyntakt@001,014: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 1.131927, avg. 1.155812
DEBUG:jclient.c:604:(jclient_run): Exiting...

EDIT: just reflashed the Pi’s SD card, built nothing but overwitch and am still getting the same errors. i’ve also compared how it behaves when using the Digitakt instead of the Syntakt. The frequency of the timeout errors is much less severe, but they’re still there.

EDIT 2: overclocking the Pi to 2GHz didn’t make any difference either :confused:

Have you tried increasing the USB transfer timeout?

$ git diff
diff --git a/src/engine.c b/src/engine.c
index b283529..e5faa43 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -37,7 +37,7 @@
 #define MIDI_OUT_EP 0x01
 #define MIDI_IN_EP  (MIDI_OUT_EP | 0x80)
 
-#define XFR_TIMEOUT 5
+#define XFR_TIMEOUT 10
 
 #define MIDI_BUF_EVENTS 64
 #define MIDI_BUF_LEN (MIDI_BUF_EVENTS * OB_MIDI_EVENT_SIZE)

Similar errors were reported here.

I still need to add a parameter for this. :frowning:

Let me know if this helps.

1 Like

nice, thanks for the quick reply!!!

this managed to make the error messages disappear :raised_hands:

however i’m still not getting any sound :confused:

output of jack_lsp -c is this:

Summary
robin@raspberrypi:~ $ jack_lsp -c
system:capture_1
system:capture_2
system:playback_1
   Digitakt:Track 4
   Digitakt:Main R
system:playback_2
   Digitakt:Track 4
   Digitakt:Main L
Digitakt:Main L
   system:playback_2
Digitakt:Main R
   system:playback_1
Digitakt:Track 1
Digitakt:Track 2
Digitakt:Track 3
Digitakt:Track 4
   system:playback_1
   system:playback_2
Digitakt:Track 5
Digitakt:Track 6
Digitakt:Track 7
Digitakt:Track 8
Digitakt:Input L
Digitakt:Input R
Digitakt:Main L Input
Digitakt:Main R Input
Digitakt:MIDI out
Digitakt:MIDI in

i’ve also verified that my jack server and hardware are working correctly using jack_simple_client - everything ok there, i can clearly hear sine waves.

Great. Getting closer.

There are many reasons for this to not work but since some people have succeeded to run Overwitch on a Rasberry Pi I’d say the issue is not in the code.

Have you tried overwitch-record? If it works, this would discard a USB issue.

Could you post the output of overwitch -vv to verify that there are no other errors?

getting closer and closer…

it seems stuck in between “tuning resampler” and “running resampler” for at least two minutes. afterwards sound starts working, albeit with very frequent dropouts.

if you want i can try timestamping the lines somehow

first 250 lines of log output
DEBUG:overwitch.c:240:(ow_get_usb_device_list): Found Digitakt (bus 001, address 006, ID 1935:000c)
DEBUG:engine.c:531:(ow_engine_init_mem): o2p: USB in frame size: 48 B
DEBUG:engine.c:532:(ow_engine_init_mem): p2o: USB out frame size: 8 B
DEBUG:engine.c:541:(ow_engine_init_mem): o2p: USB in block size: 368 B
DEBUG:engine.c:543:(ow_engine_init_mem): p2o: USB out block size: 88 B
DEBUG:engine.c:551:(ow_engine_init_mem): o2p: audio transfer size: 2688 B
DEBUG:engine.c:553:(ow_engine_init_mem): p2o: audio transfer size: 448 B
DEBUG:engine.c:1280:(ow_engine_load_overbridge_name): USB control in data (32 B): Digitakt
DEBUG:engine.c:1300:(ow_engine_load_overbridge_name): USB control in data (16 B): 0084        1.50
DEBUG:jclient.c:102:(jclient_set_buffer_size_cb): JACK buffer size: 1024
DEBUG:resampler.c:539:(ow_resampler_set_buffer_size): resampler buffer size: 1024
DEBUG:resampler.c:161:(ow_resampler_reset_dll): Resetting the DLL...
DEBUG:dll.c:114:(ow_dll_primary_reset): Target delay: 34.3 ms (1648 frames)
DEBUG:jclient.c:112:(jclient_set_sample_rate_cb): JACK sample rate: 48000
DEBUG:resampler.c:552:(ow_resampler_set_samplerate): resampler sample rate: 48000
DEBUG:resampler.c:161:(ow_resampler_reset_dll): Resetting the DLL...
DEBUG:dll.c:114:(ow_dll_primary_reset): Target delay: 34.3 ms (1648 frames)
DEBUG:jclient.c:112:(jclient_set_sample_rate_cb): JACK sample rate: 48000
DEBUG:jclient.c:502:(jclient_run): Using RT priority 5...
DEBUG:engine.c:1105:(ow_engine_start): Starting p2o MIDI thread...
DEBUG:engine.c:1118:(ow_engine_start): Starting audio and o2p MIDI thread...
DEBUG:jclient.c:102:(jclient_set_buffer_size_cb): JACK buffer size: 1024
DEBUG:resampler.c:348:(ow_resampler_compute_ratios): Booting Overbridge side...
DEBUG:resampler.c:359:(ow_resampler_compute_ratios): Starting up resampler...
DEBUG:resampler.c:407:(ow_resampler_compute_ratios): Tuning resampler...
Digitakt@001,006: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 1.006948, avg. 1.000175
Digitakt@001,006: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 1.003477, avg. 1.003544
Digitakt@001,006: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 1.001471, avg. 1.002609
Digitakt@001,006: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 0.999604, avg. 1.000412
Digitakt@001,006: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 0.999080, avg. 0.999257
Digitakt@001,006: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 1.002674, avg. 1.000542
Digitakt@001,006: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 1.002004, avg. 1.002675
Digitakt@001,006: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 1.000181, avg. 1.000996
Digitakt@001,006: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 1.004008, avg. 1.001093
Digitakt@001,006: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 1.003710, avg. 1.004526
Digitakt@001,006: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 1.000612, avg. 1.002060
Digitakt@001,006: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 1.001102, avg. 1.000939
Digitakt@001,006: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 0.999956, avg. 1.000558
Digitakt@001,006: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 0.999280, avg. 0.999551
Digitakt@001,006: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 1.000265, avg. 0.999394
Digitakt@001,006: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 1.001146, avg. 1.001034
Digitakt@001,006: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 1.002104, avg. 1.001601
Digitakt@001,006: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 1.001749, avg. 1.001692
Digitakt@001,006: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 1.001466, avg. 1.001886
Digitakt@001,006: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 1.000003, avg. 1.000696
Digitakt@001,006: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 0.999388, avg. 0.999608
Digitakt@001,006: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 0.999333, avg. 0.999317
Digitakt@001,006: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 0.999546, avg. 0.999430
Digitakt@001,006: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 0.999737, avg. 0.999651
Digitakt@001,006: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 0.999792, avg. 0.999775
Digitakt@001,006: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 1.001626, avg. 1.000555
Digitakt@001,006: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 1.001789, avg. 1.001632
Digitakt@001,006: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 1.001910, avg. 1.002217
Digitakt@001,006: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 1.000324, avg. 1.001086
Digitakt@001,006: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 1.000950, avg. 0.999984
Digitakt@001,006: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 1.004889, avg. 1.004023
Digitakt@001,006: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p ratio: 1.003530, avg. 1.004097
Digitakt@001,006: o2p latency: -1.0 ms, max. -1.0 ms; p2o latency: -1.0 ms, max. -1.0 ms, o2p raDEBUG:resampler.c:418:(ow_resampler_compute_ratios): Running resampler...
DEBUG:engine.c:384:(cb_xfr_midi_in): o2p MIDI: 0f, f8, 00, 00 (9787.543845)
DEBUG:jclient.c:144:(jclient_o2j_midi): Skipping until the next cycle (event frames 33293434)...
DEBUG:engine.c:384:(cb_xfr_midi_in): o2p MIDI: 0f, f8, 00, 00 (9787.561769)
DEBUG:resampler.c:241:(resampler_o2p_reader): o2p: Emptying buffer (49152 B) and running...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:jclient.c:160:(jclient_o2j_midi): Event frames: 122
DEBUG:jclient.c:160:(jclient_o2j_midi): Event frames: 982
DEBUG:engine.c:384:(cb_xfr_midi_in): o2p MIDI: 0f, f8, 00, 00 (9787.579775)
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:jclient.c:160:(jclient_o2j_midi): Event frames: 822
DEBUG:engine.c:384:(cb_xfr_midi_in): o2p MIDI: 0f, f8, 00, 00 (9787.598421)
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:jclient.c:160:(jclient_o2j_midi): Event frames: 694
DEBUG:engine.c:384:(cb_xfr_midi_in): o2p MIDI: 0f, f8, 00, 00 (9787.616444)
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:jclient.c:160:(jclient_o2j_midi): Event frames: 534
DEBUG:engine.c:384:(cb_xfr_midi_in): o2p MIDI: 0f, f8, 00, 00 (9787.634425)
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:jclient.c:160:(jclient_o2j_midi): Event frames: 373
DEBUG:engine.c:384:(cb_xfr_midi_in): o2p MIDI: 0f, f8, 00, 00 (9787.652429)
DEBUG:engine.c:384:(cb_xfr_midi_in): o2p MIDI: 0f, f8, 00, 00 (9787.670426)
DEBUG:jclient.c:160:(jclient_o2j_midi): Event frames: 214
DEBUG:jclient.c:144:(jclient_o2j_midi): Skipping until the next cycle (event frames 33299509)...
DEBUG:engine.c:384:(cb_xfr_midi_in): o2p MIDI: 0f, f8, 00, 00 (9787.688429)
DEBUG:jclient.c:160:(jclient_o2j_midi): Event frames: 53
DEBUG:jclient.c:160:(jclient_o2j_midi): Event frames: 917
DEBUG:engine.c:384:(cb_xfr_midi_in): o2p MIDI: 0f, f8, 00, 00 (9787.707087)
DEBUG:jclient.c:160:(jclient_o2j_midi): Event frames: 788
DEBUG:engine.c:384:(cb_xfr_midi_in): o2p MIDI: 0f, f8, 00, 00 (9787.725087)
DEBUG:jclient.c:160:(jclient_o2j_midi): Event frames: 629
DEBUG:engine.c:384:(cb_xfr_midi_in): o2p MIDI: 0f, f8, 00, 00 (9787.743092)
DEBUG:jclient.c:160:(jclient_o2j_midi): Event frames: 469
DEBUG:engine.c:384:(cb_xfr_midi_in): o2p MIDI: 0f, f8, 00, 00 (9787.761099)
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:jclient.c:160:(jclient_o2j_midi): Event frames: 309
DEBUG:engine.c:384:(cb_xfr_midi_in): o2p MIDI: 0f, f8, 00, 00 (9787.779080)
DEBUG:engine.c:384:(cb_xfr_midi_in): o2p MIDI: 0f, f8, 00, 00 (9787.797091)
DEBUG:jclient.c:160:(jclient_o2j_midi): Event frames: 148
DEBUG:jclient.c:160:(jclient_o2j_midi): Event frames: 1013
DEBUG:engine.c:384:(cb_xfr_midi_in): o2p MIDI: 0f, f8, 00, 00 (9787.815813)
DEBUG:jclient.c:160:(jclient_o2j_midi): Event frames: 887
DEBUG:engine.c:384:(cb_xfr_midi_in): o2p MIDI: 0f, f8, 00, 00 (9787.833724)
DEBUG:jclient.c:160:(jclient_o2j_midi): Event frames: 722
DEBUG:engine.c:384:(cb_xfr_midi_in): o2p MIDI: 0f, f8, 00, 00 (9787.851762)
DEBUG:jclient.c:160:(jclient_o2j_midi): Event frames: 565
DEBUG:engine.c:384:(cb_xfr_midi_in): o2p MIDI: 0f, f8, 00, 00 (9787.869761)
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:resampler.c:223:(resampler_o2p_reader): o2p: Audio ring buffer underflow (0 < 2688). Replicating last samples...
DEBUG:jclient.c:160:(jclient_o2j_midi): Event frames: 404
DEBUG:engine.c:384:(cb_xfr_midi_in): o2p MIDI: 0f, f8, 00, 00 (9787.887764)
DEBUG:engine.c:384:(cb_xfr_midi_in): o2p MIDI: 0f, f8, 00, 00 (9787.906462)
DEBUG:jclient.c:160:(jclient_o2j_midi): Event frames: 244
DEBUG:jclient.c:144:(jclient_o2j_midi): Skipping until the next cycle (event frames 33310837)...
DEBUG:engine.c:384:(cb_xfr_midi_in): o2p MIDI: 0f, f8, 00, 00 (9787.924464)
DEBUG:jclient.c:160:(jclient_o2j_midi): Event frames: 118
DEBUG:jclient.c:160:(jclient_o2j_midi): Event frames: 982
DEBUG:engine.c:384:(cb_xfr_midi_in): o2p MIDI: 0f, f8, 00, 00 (9787.942422)
DEBUG:jclient.c:160:(jclient_o2j_midi): Event frames: 819
DEBUG:engine.c:384:(cb_xfr_midi_in): o2p MIDI: 0f, f8, 00, 00 (9787.960468)
DEBUG:jclient.c:160:(jclient_o2j_midi): Event frames: 661
DEBUG:engine.c:384:(cb_xfr_midi_in): o2p MIDI: 0f, f8, 00, 00 (9787.978425)
DEBUG:jclient.c:160:(jclient_o2j_midi): Event frames: 500

EDIT: after a while (10-15 minutes) of playing around and listening for clicks/dropouts the audio stopped and i got a constant high-pitched squeal/whine instead. the digitakt froze shortly afterwards :open_mouth:
however i think i might have been drawing too much power since the audio interface is bus-powered. i’m retrying with one that has its own PSU to see if it happens again.

That should be 5 s top.

Overwitch uses a resampler to synchronize the Elektron device audio clock and the JACK clock, which is basically the audio interface clock.

Although both could be running at the same frequency, let’s say 48 kHz, the clocks might be slightly off. This means that at some point there would be either too few or too many samples at both sides.

To fix all this, the resampler is needed to ensure the same amount of samples is expected and delivered and the issue becomes to adjust the ratio the the exact value. If fact, it is readjusting continuously in a very smooth fashion.

The starting ratio is the exact ratio between both clocks but to avoid filling the internal buffers with samples due to inaccuracies during the startup (and thus increasing the latency for the whole program run) a lot of tricks are implemented. The main one is to tune the ratio up to a point where the error is lower than a constant.

I’m getting to the point, sorry.

To ensure that the calculations are accurate, a few things are needed.

  • The system (computer) clock needs to be stable to measure time with accurately. This is very probably not an issue.
  • The JACK calls to Overwitch need to be just in time. This is probably the issue.
  • Besides, the USB side needs the bandwidth and the computer power to process the audio and the resampler.

There are a few things to improve the second point.

  • Run a RT Linux kernel and install the rtirq-init package for your distribution.
  • Configure RT priorities for the user running JACK. Overwitch will use the adequate RT priority.
  • Disable virtual CPU cores. (This is not needed for the Raspberry Pi I think.)

top -H should show if things are running properly. Negative priority values are RT priorities.

Threads: 2170 total,   2 running, 2167 sleeping,   0 stopped,   1 zombie
%Cpu(s):  0.8 us,  3.5 sy,  0.0 ni, 95.0 id,  0.1 wa,  0.0 hi,  0.6 si,  0.0 st 
MiB Mem :  15895.6 total,    454.5 free,   6432.1 used,   9281.9 buff/cache     
MiB Swap:  16319.0 total,  16319.0 free,      0.0 used.   9463.5 avail Mem 

    PID USER     PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                           
 243068 user     20   0  714616  49520  36976 S  27.7   0.3   0:16.11 overwitch                                                         
 243087 user    -83   0  714616  49520  36976 R  17.3   0.3   0:09.79 overwitch                                                         
 243088 user    -86   0  714616  49520  36976 S   8.5   0.3   0:04.82 overwitch                                                         
    383 root    -89   0       0      0      0 S   5.9   0.0   0:04.41 irq/55-xhci_hcd                                                   
 243041 user      9 -11   72516  21888   9472 S   2.9   0.1   0:01.94 pipewire                                                          
 243050 user    -86 -11   72516  21888   9472 S   2.9   0.1   0:01.87 pipewire                                                          
 243086 user    -83   0  714616  49520  36976 S   2.0   0.3   0:01.08 overwitch                                                         
 243093 user     20   0   12652   7936   3712 R   1.6   0.0   0:00.16 top                                                               
     30 root     -2   0       0      0      0 S   0.7   0.0   1:46.40 ktimers/1                                                         
   1561 user     20   0 5763656 386360 140388 S   0.7   2.4  79:49.09 gnome-shell                                                       
   2728 user     20   0   12.3g 959344 268096 S   0.7   5.9 166:22.26 firefox-esr                                                       
   3831 user     20   0  644188  66624  43552 S   0.7   0.4  10:11.57 gnome-terminal-                                                   
 132334 user     20   0 2798032 276876 107376 S   0.7   1.7   7:08.51 Isolated Web Co                                                   
     31 root     20   0       0      0      0 S   0.3   0.0   3:43.62 ksoftirqd/1                                                       
     39 root     -2   0       0      0      0 S   0.3   0.0   1:50.32 ktimers/2                                                         
     45 root     -2   0       0      0      0 S   0.3   0.0   0:54.52 irq_work/3                                                        
     48 root     -2   0       0      0      0 S   0.3   0.0   1:53.50 ktimers/3                                                         
     57 root     -2   0       0      0      0 S   0.3   0.0   1:17.15 ktimers/4                                                         
     58 root     20   0       0      0      0 S   0.3   0.0   0:47.22 ksoftirqd/4                                                       
     84 root     -2   0       0      0      0 S   0.3   0.0   1:19.29 ktimers/7
[...]

I’m having some timing issues with PipeWire when connections are created, so stay away from it for now.

2 Likes

this along with a petter PSU for the pi did it, thanks for sticking with me for so long!

1 Like

Due to the issue with the value of XFR_TIMEOUT reported above by @robin and knowing this has been an issue for others too , I’ve decided to add a parameter for the timeout and increase the default value to 10 ms.

I hope this makes Overwitch easier to use for everyone.

5 Likes