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

I don’t think so. Internally, JACK works with 32 bits float data. When the audio is sent to JACK to be played thru the audio interface, it changes it to match the hardware data type. I think clients can use other data types but Overwitch uses 32 bits float too.

Is the problem happening when monitoring or when recording? I’d like to know if the Overwitch audio is recorded properly.

BTW, the output I meant are this kind of lines and the possible errors between them.

Digitakt: o2j latency: 0.0 ms, max. 0.0 ms; j2o latency: 0.0 ms, max. 0.0 ms; o2j ratio: 1.000088, avg. 1.000024

Weird.

Could you post the output of lsusb -t? I’ve checked the laptop and audio interface specifications but I have no experience WRT FireWire.

One last thing, does your audio interface sport both USB and FireWire? In this case, could you connect it by USB?

There are no errors. As far as overwitch and jackd are concerned, everything is fine. It’s just the audio that comes out bit-crushed. Connecting the Digitakt jack port to Mixbus doesn’t make any difference, so recording is the same as monitoring in this case.

Here’s the lsusb output without and with -t:

$ lsusb
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 003: ID 0bda:5511 Realtek Semiconductor Corp. Integrated_Webcam_HD
Bus 003 Device 005: ID 1935:000c Elektron Music Machines Digitakt Overbridge
Bus 003 Device 004: ID 8087:0026 Intel Corp. 
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
$ lsusb -t
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 10000M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/12p, 480M
    |__ Port 8: Dev 5, If 0, Class=Vendor Specific Class, Driver=, 480M
    |__ Port 8: Dev 5, If 1, Class=Vendor Specific Class, Driver=, 480M
    |__ Port 8: Dev 5, If 2, Class=Vendor Specific Class, Driver=, 480M
    |__ Port 8: Dev 5, If 3, Class=Vendor Specific Class, Driver=, 480M
    |__ Port 8: Dev 5, If 4, Class=Vendor Specific Class, Driver=, 480M
    |__ Port 9: Dev 3, If 1, Class=Video, Driver=uvcvideo, 480M
    |__ Port 9: Dev 3, If 4, Class=Application Specific Interface, Driver=, 480M
    |__ Port 9: Dev 3, If 2, Class=Video, Driver=uvcvideo, 480M
    |__ Port 9: Dev 3, If 0, Class=Video, Driver=uvcvideo, 480M
    |__ Port 9: Dev 3, If 3, Class=Video, Driver=uvcvideo, 480M
    |__ Port 10: Dev 4, If 0, Class=Wireless, Driver=btusb, 12M
    |__ Port 10: Dev 4, If 1, Class=Wireless, Driver=btusb, 12M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 10000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/1p, 480M

The laptop has just two USB-C ports. Switching the Digitakt from one to the other just changes the Dev number from 2 to 5.

There is no firewire port on the laptop. The firewire soundcard connects via one of the two USB-C ports as a Thunderbolt 3 device. The Digitakt connects to the other and it doesn’t make a difference which device goes to which port. Unusual setup, I know. Nevertheless pulseaudio, instrument plugins in Mixbus, and my bass going through Mixbus all play just fine, so the it works fine.

So, does usb -t show both the Digitakt and the FireWire adapter in the same bus?

Have you tried the same configuration with another OS?

@DG2 lsusb doesn’t list the Firewire device, presumably due to the different protocol.

I got overwitch to work by disconnecting the external monitor, which also feeds the laptop its power. Apparently connecting the monitor takes up bandwidth from the USB bus. Once that is removed, the bit crushing is gone.

So I am in a pickle: I have 2 USB-C ports for 3 things: power, firewire, overwitch. :confused:

By the way, brilliant project @DG2 - thanks a lot. And I’m perfectly happy with just a CLI interface as long as the audio part is robust.

2 Likes

Thanks. Great that it works for you.

Nice that you find the culprit. I think there are cables that can be used for powering the computer while using the USB port so you could still use both.

Hey! thanks for all this! I installed it and made it run in linux mint 20.2 I haven’t really check if there is stutter or xruns, but the fact of having it working already made me happy.

Now I wanted to install it in my laptop which runs linux mint 20.2 but with pipewire and I couldn’t make it work. Is it because of pipewire that makes this impossible? or is my mistake somewhere else?
thanks!

2 Likes

You’re welcome.
You should try it as it works well enough to be useful.

I’ve just tried it on Debian Bullseye (stable) and kind of works.

top - 20:41:53 up 9 days,  2:13,  1 user,  load average: 4,04, 2,81, 1,94
Tasks: 380 total,   1 running, 377 sleeping,   2 stopped,   0 zombie
%Cpu(s):  1,0 us,  0,5 sy,  0,0 ni, 98,5 id,  0,0 wa,  0,0 hi,  0,0 si,  0,0 st
MiB Mem :  16003,5 total,   6834,4 free,   3873,2 used,   5295,9 buff/cache
MiB Swap:  16319,0 total,  16319,0 free,      0,0 used.  11920,5 avail Mem 

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                           
 122552 user       9 -11 4634372 463064  98096 S  14,6   2,8   3:08.93 ArdourGUI                                                         
   1510 user      20   0 3243140 103744  69912 S   6,3   0,6  16:20.37 Xwayland                                                          
 123104 user      20   0  467236   9872   6344 S   4,0   0,1   0:15.46 overwitch                                                         
   1362 user      20   0 6077492 343692 126000 S   2,3   2,1  51:42.99 gnome-shell                                                       
   1196 user      20   0  133000  35720   5512 S   1,3   0,2   0:08.00 pipewire                                                          
     52 root      20   0       0      0      0 S   0,3   0,0   1:09.86 ksoftirqd/6

I’ve installed it by following the official Debian instructions from here.

This is the Overwitch output.

$ overwitch 
Device: Digitakt (outputs: 12, inputs: 2)
JACK sample rate: 48000
[W][000144959.100715][pipewire-jack.c:4743 jack_acquire_real_time_scheduling()] not implemented 140556855265024 20
[W][000144959.100737][pipewire-jack.c:4743 jack_acquire_real_time_scheduling()] not implemented 140556846872320 20
ERROR:utils.c:140:(set_rt_priority): Could not set real time priority
ERROR:utils.c:140:(set_rt_priority): Could not set real time priority
JACK buffer size: 64
[W][000144965.664818][pipewire-jack.c:1095 cycle_run()] jack-client 0x7fd5ec006aa0: missed 15 wakeups
[W][000144965.681360][pipewire-jack.c:1095 cycle_run()] jack-client 0x7fd5ec006aa0: missed 1 wakeups
[W][000144982.550302][pipewire-jack.c:1095 cycle_run()] jack-client 0x7fd5ec006aa0: missed 6 wakeups
[W][000144982.558513][pipewire-jack.c:1095 cycle_run()] jack-client 0x7fd5ec006aa0: missed 9 wakeups
[W][000144984.844442][pipewire-jack.c:1095 cycle_run()] jack-client 0x7fd5ec006aa0: missed 1 wakeups
[W][000144993.058265][pipewire-jack.c:1095 cycle_run()] jack-client 0x7fd5ec006aa0: missed 5 wakeups

The use-case was monitoring the 8 individual tracks thru Ardour and send the master out to my Digitakt inputs.

As it can be seen, a lot of wakeups are missed but audio works. MIDI doesn’t.

Setting realtime priorities doesn’t work and for whatever reason I can’t see my audio interface in the Ardour routing window. But being the first attempt I consider this a success. After all, PipeWire is not supported on Debian stable right now.

I’m gonna revert it back because I need to use my audio system properly.

Feel free to report your findings in the PipeWire issue.

1 Like

I react again on this: I received the DN today and checked Overwitch on Github.
As an OT owner I was eager to check how this Overbridge version would look like.

Alas I am far from being a computer engineer guy and just the installation is very opaque (I am on Manjaro btw). I’ll check if there is a GUI someday to be able to access this wonder. Keep up what seems an amazing job!

1 Like

Doing freestyle right now :slight_smile: kind of a noob on computers

Is it possible to make somekind of device with RB eg: DN/DT/A4 -> RB with OW -> Multichannel out?

Would make use of dawless scenarious to have multichannels for those sweeties.

Yeah, you don’t need a DAW. You just need JACK.

You could install QjackCtl and run JACK from there and use it as a routing tool to send the individual outs to a multichannel interface.

BTW, what is RB?

My thought of shortening RaspBerry

Sorry, I’m used to RPi so preferred to ask.

Overwitch has been reported to work on RPi so it’s perfectly possible.

So as I’m noob on soldering and hacking RPi myself, it would be cool If somebody made a ready product out of it :slight_smile: would def buy I think :smiley:

I have DT / DN / A4 and it would totally change the game, if it would be possible to route them separately through effects etc.

Elektron ! Hire this man.

1 Like

Please no, he developed that much faster alone than the Overbridge :wink:

4 Likes

On the pi, with abelton link, to send start stop? To this midi bridge?

Found this one, but needs more I/O

1 Like

2 ms latency , isnt too bad, synchronized via link, it could act as a recorder , network midi bridge etc, 99€ is a bit steep, but still a nice audio interface. one could connect a usb interface with more ports to it -but not at 2 ms i think.

I tried to use Overwitch for the first time.

My goal is to dump to a WAV file containing audio passing thru the DN inputs.
Is that only doable?

Whenever i type the overwitch-dump command it says the command is unfindable.

Yes, it should work the way you intended. This is quite experimental at the moment but… should work.

If you’re interested I could add a feature to choose which tracks to dump. Shouldn’t be difficult.

$ overwitch-dump -h
overwitch 0.2
Usage: overwitch-dump [options]
Options:
  --use-device-number, -n value
  --use-device, -d value
  --list-devices, -l
  --verbose, -v
  --help, -h
$ overwitch-dump -l
0: Bus 001 Device 033: ID 1935:000c Digitakt
$ overwitch-dump -n 0
Device: Digitakt (outputs: 12, inputs: 2)
^C436800 frames written
$ ls -l dump.wav 
-rw-r--r-- 1 user user 20966568 Mar 21 21:21 dump.wav
$ sox --i dump.wav 
sox WARN wav: wave header missing extended part of fmt chunk

Input File     : 'dump.wav'
Channels       : 12
Sample Rate    : 48000
Precision      : 25-bit
Duration       : 00:00:09.10 = 436800 samples ~ 682.5 CDDA sectors
File Size      : 21.0M
Bit Rate       : 18.4M
Sample Encoding: 32-bit Floating Point PCM

Have you installed Overwitch from the sources again? This is on the master branch and no release includes it yet as it was not intended to be available till the GUI application will be. But now that this is out, I’ll probably release a version 0.3.