WEBVTT

00:00.000 --> 00:10.000
Thank you for coming here.

00:10.000 --> 00:18.000
This is a presentation about Cardinal, the HIFT-3 and some tips and tricks as well.

00:18.000 --> 00:23.000
My name is Philip, also known online as Falk DX.

00:23.000 --> 00:26.000
I'm Alexander, also known as Dreamer.

00:26.000 --> 00:31.000
We already got a nice demo of Cardinal just now, so that saves us some time.

00:31.000 --> 00:35.000
Yes, is it working the remote?

00:35.000 --> 00:37.000
Of course it isn't.

00:37.000 --> 00:42.000
We've connected with, anyway, with the old way.

00:42.000 --> 00:43.000
I think it works.

00:43.000 --> 00:44.000
Yeah, yeah.

00:44.000 --> 00:51.000
So I work at back last electronics, a finished company with a little pedal, Linux based.

00:51.000 --> 00:56.000
I maintain DPS, I maintain Carla, Jack, a couple of other things.

00:56.000 --> 01:00.000
Yeah, typically I'm Linux audio.

01:00.000 --> 01:04.000
Most of the things I do have related to Linux audio and open source.

01:04.000 --> 01:05.000
Yeah.

01:05.000 --> 01:10.000
I work at Wased Audio, which my own company and currently I'm mailing developing the heavy compiler,

01:10.000 --> 01:13.000
which is a pure data to see transpiler.

01:13.000 --> 01:20.000
And I also contribute to plug data, which really nice, sort of enhanced PD version.

01:20.000 --> 01:26.000
So before we start, we have to talk about VZV rack, which is sort of our upstream.

01:26.000 --> 01:33.000
As you can see, you have physical modular synths, which have been around since about the 50s or something.

01:33.000 --> 01:42.000
And in 2016, Andrew Belt released the first version of VZV rack, which is a virtual modular synthesis system.

01:42.000 --> 01:47.000
Initially, the 0.6 branch started as a BC3 project.

01:47.000 --> 01:51.000
And it quickly gathered a really nice size community and developers.

01:51.000 --> 01:58.000
And it was sort of open for people to create plugins and extend the software with their own modules.

01:58.000 --> 02:06.000
Unfortunately, because of the BC3 license, closed proprietary commercial forks started to appear,

02:06.000 --> 02:09.000
which developers did not really appreciate.

02:09.000 --> 02:15.000
So when the VZV rack version 1 appeared, it was released into GPL3.

02:15.000 --> 02:18.000
And it was not open to contribution.

02:18.000 --> 02:23.000
And we can only assume that some of this was because of legal issues for their future plans,

02:23.000 --> 02:33.000
which is that I think was 2021, VZV 2 launched and with their rack pro as a proprietary plugin version.

02:33.000 --> 02:36.000
Users had been requesting a plugin version for a long time.

02:36.000 --> 02:39.000
And there were sort of some hacks to get it working as a plugin.

02:40.000 --> 02:45.000
But they restricted the program to make it functional as a such.

02:45.000 --> 02:48.000
But they made their pro version, closed source.

02:48.000 --> 02:53.000
And of course, we really wanted to see an open source version of the plugin.

02:53.000 --> 02:59.000
So later we published Cardano as an alternative to the pro.

02:59.000 --> 03:01.000
Yeah, so I don't know.

03:02.000 --> 03:12.000
Okay, so basically Cardano started when we knew that the pro version, the plugin version of BCB rack was coming.

03:12.000 --> 03:17.000
We suspect for developers to be able to port their plugins early.

03:17.000 --> 03:23.000
The source code was launched a few months before the official public release was out.

03:23.000 --> 03:27.000
And we took that as an opportunity to just run some tests.

03:27.000 --> 03:33.000
If we can actually run this code that was supposed to be for the standalone version that still was open source.

03:33.000 --> 03:39.000
See if we can put it in the plugin, see how well it works, what kind of problems emerge.

03:39.000 --> 03:43.000
And yeah, got it working fairly quickly.

03:43.000 --> 03:49.000
Not using the same frameworks, same tools that the official plugin does.

03:49.000 --> 03:54.000
We also didn't know about it at the time because the plugin version is never open.

03:54.000 --> 03:58.000
So I did it on my own framework on DPS, I had just a couple of things.

03:58.000 --> 04:06.000
It was a very nice test case to like extend DPS to support other things that a bigger plugin would need.

04:06.000 --> 04:14.000
In a couple of months everything like we got our first release after the official rack probably.

04:14.000 --> 04:22.000
Intentionally I even slowed down a little bit on the release because I was collecting modules to ship within the plugin.

04:22.000 --> 04:30.000
We saw a lot of small little things that would not go well if we want to distribute the source code to be packaged by distributions.

04:30.000 --> 04:40.000
One example that we give there regarding licenses that we have to track like some developers that push to the BCB rack platform.

04:40.000 --> 04:44.000
They don't care where they files come from. There are some funds that we ask like where did you get this?

04:44.000 --> 04:48.000
They just say I just found it online, whatever.

04:48.000 --> 04:52.000
Or they copied it from their Windows machine or something like that.

04:52.000 --> 04:56.000
Which license states that is not visible.

04:56.000 --> 05:00.000
So we had to ask them to change and a bunch of other stuff.

05:00.000 --> 05:06.000
If you read this document, you're going to see it's quite extensive that we try to cover.

05:06.000 --> 05:10.000
And also because we buy it into single static binary.

05:10.000 --> 05:14.000
All of the licenses have to be compatible.

05:14.000 --> 05:16.000
It's one of the reasons. We don't mention in here.

05:16.000 --> 05:22.000
But one of the reasons we keep the project as GPL 3 or later as a requirement.

05:22.000 --> 05:28.000
Because if at some point we have GPL 4, we want to be able to have the option to upgrade to it.

05:28.000 --> 05:32.000
If we only have GPL 3 only, there's a couple of modules that are like this.

05:32.000 --> 05:36.000
And then we get stuck forever.

05:36.000 --> 05:40.000
About the name, it came as a little joke.

05:40.000 --> 05:46.000
Like Robin X42 from the Linux all the community.

05:46.000 --> 05:52.000
And the idea based on the multi-pitan sketch that the guy just says Cardinal, the rack.

05:52.000 --> 05:54.000
And it just became the name of the program.

05:54.000 --> 06:00.000
And they use it as a torture device which also modular synthesis can be very useful for that.

06:00.000 --> 06:02.000
Yeah, yeah, yeah.

06:02.000 --> 06:04.000
So what is Cardinal?

06:04.000 --> 06:08.000
It is a modular urx software emulator based on vis-vrack.

06:08.000 --> 06:12.000
It can load modules, it can connect cables, you can excount.

06:12.000 --> 06:16.000
Right now, it's a latest release that we did yesterday.

06:16.000 --> 06:20.000
It contains almost 1,400 modules from 84 different vendors.

06:20.000 --> 06:22.000
It's free and open source.

06:22.000 --> 06:26.000
It's available as pretty much all of the plugin formats.

06:26.000 --> 06:30.000
And soon it also have a shared library so you can integrate it into other software.

06:30.000 --> 06:34.000
And there is some standalone, which you also saw on the previous demo,

06:34.000 --> 06:36.000
which are kind of more for testing.

06:36.000 --> 06:39.000
They're not as featureful as you would expect from standalone.

06:39.000 --> 06:42.000
And there is a web version because we have a web assembly built

06:42.000 --> 06:44.000
so you can run it in the browser.

06:44.000 --> 06:46.000
It's cost platform.

06:46.000 --> 06:50.000
We have built for people using it for freebies, the Linux, MacOS, and Windows.

06:50.000 --> 06:52.000
And it's multi-architecture.

06:52.000 --> 06:56.000
So we have 32 bits, Intel, 64 bits, ARM, 32 bits, 64 bits.

06:56.000 --> 06:58.000
And we have risk-5 builds.

06:58.000 --> 07:01.000
We don't have any risk-5 boards, so we don't know if it actually works.

07:01.000 --> 07:04.000
So if anyone is willing to test this or give us a board to test,

07:04.000 --> 07:06.000
this of course appreciated.

07:06.000 --> 07:08.000
Yeah.

07:08.000 --> 07:11.000
Now I'm going to begin to do the technical details of this,

07:11.000 --> 07:14.000
because people always compare it against the rack pro,

07:14.000 --> 07:18.000
the proprietary version of from vis-vrack.

07:19.000 --> 07:21.000
So I'm going to list the main differences,

07:21.000 --> 07:24.000
but also explain the project a bit in the meantime.

07:24.000 --> 07:28.000
So the biggest biggest difference is that it's completely fully self-contained.

07:28.000 --> 07:31.000
So the plugin does not load external modules.

07:31.000 --> 07:35.000
The official rack version is based on standalone,

07:35.000 --> 07:38.000
where there's a marketplace of plugins you log in.

07:38.000 --> 07:40.000
You can install stuff from there.

07:40.000 --> 07:44.000
Some are free, some are proprietary, some are open,

07:44.000 --> 07:45.000
or not.

07:45.000 --> 07:49.000
We baked everything into a single program.

07:49.000 --> 07:52.000
The binary gets quite large, yes.

07:52.000 --> 07:55.000
But if you install the plugin, you have it ready to go.

07:55.000 --> 07:58.000
You don't have to go fetch like other modules,

07:58.000 --> 08:00.000
and all this nonsense.

08:00.000 --> 08:02.000
Just have it running, ready to go.

08:02.000 --> 08:05.000
It helps a lot in building.

08:05.000 --> 08:08.000
We're going to show the web version soon,

08:08.000 --> 08:12.000
where we don't have to build things one by one,

08:12.000 --> 08:16.000
if everything is separate, some projects try to like,

08:16.000 --> 08:20.000
if you want to have rack the official version for like a Raspberry Pi,

08:20.000 --> 08:23.000
for example, you have to build everything from scratch,

08:23.000 --> 08:25.000
one by one, every single module,

08:25.000 --> 08:30.000
because the official rack does not support arm on Linux.

08:30.000 --> 08:31.000
So you have to build it yourself,

08:31.000 --> 08:35.000
but managing building all these things, it's a whole mess.

08:35.000 --> 08:38.000
With Cardinal, you just build it in one go,

08:38.000 --> 08:41.000
that's what we do for the web version as well, everything is there.

08:41.000 --> 08:44.000
We build failures, we know right away.

08:44.000 --> 08:46.000
This also means the projects are portable.

08:46.000 --> 08:49.000
If you make a patch, you share with someone else,

08:49.000 --> 08:51.000
they don't have to go on the store,

08:51.000 --> 08:53.000
and you know, fetch the actual plugin they're missing,

08:53.000 --> 08:54.000
it just works.

08:54.000 --> 08:56.000
Like, completely look like.

08:56.000 --> 08:59.000
With some limitations, like if you're loading sample files,

08:59.000 --> 09:02.000
or we also have some plugin hosting that's bit more tricky,

09:02.000 --> 09:04.000
but it's standard patch it should work.

09:04.000 --> 09:05.000
Yeah.

09:05.000 --> 09:10.000
If you don't load external files, then the project's are compatible.

09:11.000 --> 09:14.000
The other big change, because we want to run as a plugin,

09:14.000 --> 09:16.000
we want to integrate nicely in the host,

09:16.000 --> 09:19.000
is that it's single threaded audio processing.

09:19.000 --> 09:25.000
In the official rack, there's ways to multi-trad the processing of the audio,

09:25.000 --> 09:27.000
which we didn't like so much to do,

09:27.000 --> 09:29.000
that's a lot of complications,

09:29.000 --> 09:32.000
and because the focus is to run as a plugin,

09:32.000 --> 09:34.000
if you put it, for example, in Ardor,

09:34.000 --> 09:37.000
each track gets its own instance,

09:37.000 --> 09:39.000
and you can do the multi-tradting for you.

09:39.000 --> 09:41.000
Every instance gets its own audio thread.

09:41.000 --> 09:46.000
So we don't have to worry so much for this as a plugin.

09:46.000 --> 09:47.000
Yeah.

09:47.000 --> 09:49.000
The things also run in order,

09:49.000 --> 09:51.000
but it's not something I can do.

09:51.000 --> 09:53.000
It's a little level.

09:53.000 --> 09:54.000
Yeah.

09:54.000 --> 09:57.000
One big change is also the host modules

09:57.000 --> 09:59.000
that we have there that do the integration.

09:59.000 --> 10:02.000
There run as always on the start of the audio chain,

10:02.000 --> 10:04.000
or at the end of the audio chain,

10:04.000 --> 10:06.000
to minimize jitter,

10:06.000 --> 10:10.000
so that if you have like a MIDI controller or something,

10:10.000 --> 10:13.000
the MIDI controller runs before it gets the same,

10:13.000 --> 10:16.000
the signals being sent to anything else,

10:16.000 --> 10:19.000
which is nice not the case for the official rack,

10:19.000 --> 10:21.000
the MIDI modules run randomly.

10:21.000 --> 10:24.000
So we try to improve this a little bit.

10:24.000 --> 10:26.000
Something that's not everyone likes,

10:26.000 --> 10:28.000
but we did it this way,

10:28.000 --> 10:31.000
if that UI is tied to the host event loop,

10:31.000 --> 10:35.000
if the host decides to run your idle cycle

10:35.000 --> 10:37.000
of the plugin at 15 FPS,

10:37.000 --> 10:39.000
your UI runs at 15 FPS.

10:39.000 --> 10:40.000
That's it.

10:40.000 --> 10:42.000
Which, yeah.

10:42.000 --> 10:44.000
I know it's not the best,

10:44.000 --> 10:46.000
but comparatively to what I see,

10:46.000 --> 10:47.000
some plugins doing,

10:47.000 --> 10:50.000
where they try to draw as fast as possible,

10:50.000 --> 10:52.000
the plugin can make the host go sluggish,

10:52.000 --> 10:55.000
because it's really trying to replace things to fast.

10:55.000 --> 10:57.000
If we are nice to the host,

10:57.000 --> 10:58.000
I develop my own host,

10:58.000 --> 11:01.000
I know that it's a pain to deal with this.

11:01.000 --> 11:03.000
I want to be nice to the host.

11:03.000 --> 11:04.000
Wherever the host can provide,

11:04.000 --> 11:06.000
we apply it and that's it.

11:06.000 --> 11:09.000
And we run the dialogs as asynchronous,

11:09.000 --> 11:10.000
so it doesn't block the main thread,

11:10.000 --> 11:13.000
but it only to know just,

11:13.000 --> 11:15.000
if you open a dialog,

11:15.000 --> 11:17.000
it's not going to blank out the entire host,

11:17.000 --> 11:19.000
it's going to keep running fine.

11:19.000 --> 11:21.000
It's just a small difference when you're never,

11:21.000 --> 11:23.000
you open dialogs that you're going to see.

11:23.000 --> 11:26.000
Which means you have to patch some of the other modules

11:26.000 --> 11:27.000
and send them upstream,

11:27.000 --> 11:29.000
so that they can differentiate their builds

11:29.000 --> 11:31.000
between VCVRack and for Cardinal,

11:31.000 --> 11:34.000
because VCV has this synchronous dialogs,

11:34.000 --> 11:37.000
which block the UI thread, which can be a bit ugly.

11:37.000 --> 11:38.000
Yeah.

11:38.000 --> 11:42.000
So we have a bunch of custom host integration modules,

11:42.000 --> 11:47.000
because the regular VCVRack integration works completely differently.

11:47.000 --> 11:49.000
So when you want to use Cardinal,

11:49.000 --> 11:52.000
you should particularly pay attention to these modules,

11:52.000 --> 11:56.000
so we see the stereo host audio,

11:56.000 --> 12:01.000
the dark sockets are basically outputs,

12:01.000 --> 12:04.000
and the light sockets are inputs,

12:04.000 --> 12:07.000
or depends on how you look at it,

12:07.000 --> 12:09.000
but if you want to send audio to the host,

12:09.000 --> 12:10.000
you put it into the dark sockets,

12:10.000 --> 12:12.000
and if you want to take audio from,

12:12.000 --> 12:13.000
let's say, it's an audio effect,

12:13.000 --> 12:15.000
you take it from the light sockets.

12:15.000 --> 12:17.000
Then there's the standard stereo,

12:17.000 --> 12:19.000
we have 8 audio,

12:20.000 --> 12:22.000
and there's also 10 CVIO,

12:22.000 --> 12:24.000
that will show later.

12:24.000 --> 12:28.000
We take this distinction between audio and CV,

12:28.000 --> 12:31.000
because there's some nice tricks in Jack and OV2

12:31.000 --> 12:34.000
that you can use to differentiate between the two.

12:34.000 --> 12:36.000
Then there's host parameters,

12:36.000 --> 12:40.000
so these are 24 parameters that are accessible to the host,

12:40.000 --> 12:42.000
for automation or for control,

12:42.000 --> 12:46.000
and then you can also map these parameters to specific knobs

12:46.000 --> 12:48.000
inside of the patch.

12:48.000 --> 12:50.000
The host time audio is really nice,

12:50.000 --> 12:54.000
so when you're playing the timeline of your DAW,

12:54.000 --> 12:57.000
you can synchronize that with the plugin,

12:57.000 --> 13:00.000
so you can get all this time information,

13:00.000 --> 13:02.000
or whether or not the host is playing.

13:02.000 --> 13:04.000
We recently added the last one,

13:04.000 --> 13:05.000
which is a BPM sync.

13:05.000 --> 13:07.000
There's some module support this,

13:07.000 --> 13:11.000
where it uses sort of a vaults per...

13:11.000 --> 13:13.000
No, it's not a vault per BPM,

13:13.000 --> 13:15.000
but there's sort of a standard that they developed

13:15.000 --> 13:20.000
for synchronizing plugins with sort of a voltage range.

13:20.000 --> 13:22.000
Then of course there's MIDI,

13:22.000 --> 13:25.000
so you can both receive and send MIDI,

13:25.000 --> 13:27.000
with multiple channels.

13:27.000 --> 13:32.000
You can map those to different parameters as well,

13:32.000 --> 13:35.000
and there's this sort of gate, host MIDI gate,

13:35.000 --> 13:40.000
which is quite handy for controlling drum machines or things like that.

13:40.000 --> 13:42.000
Then there's a bunch of other plugins,

13:42.000 --> 13:45.000
which modules for hosting other plugins,

13:45.000 --> 13:48.000
which is a vendor version of the Carla plugin host.

13:48.000 --> 13:51.000
So the top two modules you see here,

13:51.000 --> 13:55.000
the left one is LDO, which is sort of a one-to-one plugin.

13:55.000 --> 13:57.000
It can host one single plugin,

13:57.000 --> 14:00.000
and then there's the full Carla plugin switch.

14:00.000 --> 14:03.000
If you click on the right module,

14:03.000 --> 14:05.000
it will actually open the full Carla UI.

14:05.000 --> 14:07.000
You can have a full Carla patch bay

14:07.000 --> 14:10.000
and run a whole rack of plugins if you want.

14:10.000 --> 14:13.000
And then there's these extension modules you can see on the side.

14:13.000 --> 14:15.000
So when you connect this extended module,

14:15.000 --> 14:19.000
you can either send MIDI, convert CV into MIDI signals

14:19.000 --> 14:23.000
for the plugin or receive MIDI signals from a MIDI generator plugin

14:23.000 --> 14:26.000
and convert those to control voltage

14:26.000 --> 14:28.000
and run those inside of your patch.

14:28.000 --> 14:30.000
Then there's some nice convenience modules,

14:30.000 --> 14:33.000
like an audio file player, an audio to CV pitch tracker.

14:33.000 --> 14:36.000
So you can, if you have an audio signal

14:36.000 --> 14:39.000
that you want to convert to a pitching gate,

14:39.000 --> 14:43.000
and then we can also load IdaX neural models.

14:43.000 --> 14:46.000
So that's some nice additions.

14:46.000 --> 14:51.000
Then let's see if I can demo Jack and LV2 CV ports.

14:51.000 --> 14:54.000
It's a video, but I'll see if I can get this down to that.

15:03.000 --> 15:07.000
So this is a very basic plugin that I created on the right,

15:07.000 --> 15:10.000
in UC Carla hosting this plugin.

15:10.000 --> 15:13.000
And then there's a Cardinal standalone.

15:13.000 --> 15:17.000
And you can clearly see the difference between the audio ports

15:17.000 --> 15:18.000
and the CV ports.

15:18.000 --> 15:20.000
So we have a sequencer running inside of Cardinal,

15:20.000 --> 15:22.000
but it's sending CV signals.

15:22.000 --> 15:25.000
And you can have these CV plugins that respond to that.

15:25.000 --> 15:28.000
So this one is receiving pitch and gate.

15:28.000 --> 15:34.000
And very basic demo.

15:34.000 --> 15:37.000
But I think it's through the points.

15:37.000 --> 15:40.000
Then we can also do advanced.

15:40.000 --> 15:43.000
Yeah. The next name is the OEC remote control.

15:43.000 --> 15:46.000
Like the previous talk we're watching,

15:46.000 --> 15:49.000
that we can have, like,

15:49.000 --> 15:52.000
system-wide, we can enable something in the engine menu

15:52.000 --> 15:54.000
to receive OEC messages.

15:54.000 --> 15:57.000
There's the protocol specified on the website,

15:57.000 --> 16:00.000
so that you can control individual modules.

16:00.000 --> 16:03.000
So you change the parameter in the visual module.

16:03.000 --> 16:07.000
Or you can use, like, maybe on the next slide.

16:07.000 --> 16:08.000
Just to show.

16:08.000 --> 16:10.000
I can present.

16:10.000 --> 16:15.000
Like, you can, in this case, we're showing off using touch OEC.

16:15.000 --> 16:18.000
It's not an open source application, but it's just to demonstrate that.

16:18.000 --> 16:22.000
You send some knob value and remotely over the network,

16:22.000 --> 16:26.000
the host, CV, then just to receive the value,

16:26.000 --> 16:31.000
and then you can send it to whatever signal you want to control.

16:32.000 --> 16:33.000
Can you click?

16:33.000 --> 16:34.000
Yeah.

16:34.000 --> 16:36.000
This allows not just to control the parameters,

16:36.000 --> 16:39.000
but also send the entire patch.

16:39.000 --> 16:41.000
And then this, the example,

16:41.000 --> 16:43.000
hard to exactly see.

16:43.000 --> 16:45.000
But you can have a,

16:45.000 --> 16:47.000
carve-in-all being a client,

16:47.000 --> 16:49.000
one being the server.

16:49.000 --> 16:50.000
And it's only one way.

16:50.000 --> 16:52.000
It's not by directional communication,

16:52.000 --> 16:55.000
because React didn't support this from the beginning.

16:55.000 --> 16:58.000
So we're shooting in the future in a certain way.

16:58.000 --> 17:00.000
But you can have things in sync.

17:00.000 --> 17:03.000
So you have one instance that's,

17:03.000 --> 17:05.000
you know, it's playing the audio and another instance

17:05.000 --> 17:09.000
that is sending whatever patch you're working on to it,

17:09.000 --> 17:12.000
and things that are being kept in sync.

17:12.000 --> 17:14.000
There's some little caveats,

17:14.000 --> 17:16.000
but if you'd run into issues,

17:16.000 --> 17:19.000
there's like F7 key that stems the full patch again,

17:19.000 --> 17:21.000
and then it receives.

17:21.000 --> 17:26.000
Which is very useful for the embedded case.

17:26.000 --> 17:29.000
Imagine you have a device that you want to run car in a loan.

17:29.000 --> 17:32.000
The device might not be very powerful.

17:32.000 --> 17:36.000
So we can have embedded builds that's three-pout

17:36.000 --> 17:37.000
audio GUI components.

17:37.000 --> 17:40.000
So it only does the audio part.

17:40.000 --> 17:43.000
And then you connect with a real car in a,

17:43.000 --> 17:46.000
and you send the actual patch over.

17:46.000 --> 17:49.000
And this way you can have like a laptop or something

17:49.000 --> 17:51.000
that has more power doing all the things.

17:51.000 --> 17:53.000
And embedded device you prepare a patch,

17:53.000 --> 17:55.000
you check the performance and all these other things,

17:55.000 --> 17:58.000
and you can have a remote device being like a car in a loan.

17:58.000 --> 18:01.000
That's being like a car in a patch player, in a way.

18:01.000 --> 18:03.000
Which is neat.

18:03.000 --> 18:07.000
Also, that we did because we have car in a running on the web browser.

18:07.000 --> 18:10.000
This might be a bit tricky to explain,

18:10.000 --> 18:14.000
but on my previous job, in something I still maintain,

18:14.000 --> 18:17.000
we have a web GUI that's kind of like a pedal board,

18:17.000 --> 18:19.000
that you can have little pedals and you connect cables

18:19.000 --> 18:20.000
and all these things.

18:20.000 --> 18:22.000
Some people here might know it.

18:22.000 --> 18:26.000
We kind of have car in a running as a plugin

18:26.000 --> 18:28.000
inside this platform.

18:28.000 --> 18:31.000
Basically, all these little blocks pedals

18:31.000 --> 18:34.000
are like visual representations of the DSP.

18:34.000 --> 18:38.000
But because we have car in on this, working on the web browser

18:38.000 --> 18:40.000
and because we have this remote communication,

18:40.000 --> 18:44.000
we can load the full car in all UI on this platform.

18:44.000 --> 18:47.000
And whenever you make some changes,

18:47.000 --> 18:50.000
it sends over the full patch to the remote instance

18:50.000 --> 18:53.000
to the device that is running at the embedded device.

18:53.000 --> 18:57.000
And that allows to have the full plugin running

18:57.000 --> 18:59.000
on the platform like this.

18:59.000 --> 19:01.000
In better device, that allows communication

19:01.000 --> 19:03.000
over like a web portal.

19:03.000 --> 19:04.000
And you can run the full.

19:04.000 --> 19:06.000
It's just one example.

19:06.000 --> 19:08.000
Things that are possible to do.

19:08.000 --> 19:11.000
One cool thing that not many people know about.

19:11.000 --> 19:15.000
So two things we got in the web version.

19:15.000 --> 19:18.000
You can use the patch URL parameter

19:18.000 --> 19:22.000
and then just in there, you just post whatever

19:22.000 --> 19:24.000
file you have a car in all patch.

19:24.000 --> 19:27.000
So imagine you create a nice patch.

19:27.000 --> 19:30.000
It needs to be like in JSON format.

19:30.000 --> 19:33.000
You need to unpack the file.

19:33.000 --> 19:37.000
But it's possible to, for example, get to a paste pin.

19:37.000 --> 19:40.000
Paste there your patch file.

19:40.000 --> 19:41.000
Save it.

19:41.000 --> 19:42.000
Get to raw URL.

19:42.000 --> 19:45.000
So you can have the raw file and patches of the parameter

19:45.000 --> 19:48.000
to the web version.

19:48.000 --> 19:50.000
And whenever you give, for example, to someone.

19:50.000 --> 19:52.000
Like check out my patch.

19:52.000 --> 19:54.000
They load the thing and it will also pass.

19:54.000 --> 19:56.000
Which is quite neat.

19:56.000 --> 20:00.000
And we also have the mini version because it loads faster.

20:00.000 --> 20:02.000
Yeah.

20:02.000 --> 20:05.000
On the website, if you go to carinal.kx.studio,

20:05.000 --> 20:08.000
the second little button there, the trial life,

20:08.000 --> 20:12.000
basically runs the entire thing in the browser.

20:12.000 --> 20:13.000
And the browser catches it.

20:13.000 --> 20:15.000
So this is now a lot faster.

20:15.000 --> 20:17.000
But this is basically a full version of,

20:17.000 --> 20:19.000
oh, this is a mini car now we call it.

20:19.000 --> 20:21.000
So it has less modules.

20:21.000 --> 20:24.000
But this is now running as web assembly in the browser.

20:24.000 --> 20:25.000
Yeah.

20:25.000 --> 20:29.000
Which is, can be quite useful for, like,

20:29.000 --> 20:32.000
I'm seeing some people that want to demonstrate and to have

20:32.000 --> 20:35.000
use carinal as a teaching tool for some synthesis.

20:35.000 --> 20:37.000
You just, like, open this web page.

20:37.000 --> 20:39.000
There's a scope in there as well.

20:39.000 --> 20:42.000
That it can investigate whatever the sound waves are doing.

20:42.000 --> 20:46.000
It's very nice for control controlling of how to make a sound.

20:46.000 --> 20:48.000
Yeah.

20:48.000 --> 20:49.000
Okay.

20:49.000 --> 20:51.000
So how can you help?

20:51.000 --> 20:53.000
We could use more demo patches.

20:53.000 --> 20:56.000
So we include about a dozen patches right now.

20:56.000 --> 20:59.000
That sort of showcase a nice base template or

20:59.000 --> 21:02.000
showing off a specific functionality.

21:02.000 --> 21:04.000
You can help adding more modules.

21:04.000 --> 21:07.000
Although, like I said, we already have, like almost

21:07.000 --> 21:08.000
1400 modules.

21:08.000 --> 21:11.000
It's getting a little bit tight in terms of both the binary

21:11.000 --> 21:15.000
sizes and our CI, which is running all of these different

21:15.000 --> 21:16.000
fields.

21:16.000 --> 21:17.000
It's getting a little bit heavy.

21:17.000 --> 21:19.000
So it's sort of within limits.

21:19.000 --> 21:23.000
And right now, we really prefer quality over quantity.

21:23.000 --> 21:24.000
Yeah.

21:24.000 --> 21:28.000
I mean, I can say that right now, the thing is taking so long.

21:28.000 --> 21:31.000
Like, I don't like using GitHub so far, but they provide

21:31.000 --> 21:32.000
all these things for free.

21:32.000 --> 21:36.000
We, six hours is not enough to build a thing from scratch.

21:36.000 --> 21:40.000
Because on Mac OS, especially, we want to have a static build

21:40.000 --> 21:42.000
that has the dependencies altogether.

21:43.000 --> 21:44.000
And it's unified build.

21:44.000 --> 21:46.000
So it's both into an arm.

21:46.000 --> 21:47.000
Yes.

21:47.000 --> 21:48.000
Universal build.

21:48.000 --> 21:50.000
We have a lot of extra caching in the build.

21:50.000 --> 21:52.000
So that's why they are pretty fast.

21:52.000 --> 21:54.000
Once the cache is filled, but otherwise.

21:54.000 --> 21:55.000
Yeah.

21:55.000 --> 21:56.000
So we have to divide the CI in two steps.

21:56.000 --> 21:58.000
First, they build the dependencies.

21:58.000 --> 22:00.000
Then after the dependencies is done, as a separate build,

22:00.000 --> 22:02.000
then it builds the actual continual.

22:02.000 --> 22:04.000
And that can take like three hours.

22:04.000 --> 22:06.000
The builders are not the fastest.

22:06.000 --> 22:09.000
But yeah, it's getting a bit heavy.

22:10.000 --> 22:12.000
But so if there's like a good proposal, and especially

22:12.000 --> 22:15.000
if it's coming from module developers, we're very open to

22:15.000 --> 22:17.000
then contributing and then also maintaining sort of

22:17.000 --> 22:18.000
the updates.

22:18.000 --> 22:20.000
So there's, because we have so many modules,

22:20.000 --> 22:22.000
some are still being developed.

22:22.000 --> 22:24.000
And they get updates, but we're not always aware of that.

22:24.000 --> 22:27.000
So people can help with updating modules or patching

22:27.000 --> 22:30.000
them with some of the cardinal specific features.

22:30.000 --> 22:32.000
Some community guidance.

22:32.000 --> 22:35.000
Like, there's quite some people using it and

22:35.000 --> 22:36.000
posting it.

22:36.000 --> 22:39.000
We've been, like, some people wanted us to expect us to have

22:39.000 --> 22:40.000
like a discord server.

22:40.000 --> 22:41.000
We, of course, don't want that.

22:41.000 --> 22:44.000
We have an IRC server, but it's hard for people.

22:44.000 --> 22:47.000
So we don't know if we should have like a dedicated form for this,

22:47.000 --> 22:48.000
etc.

22:48.000 --> 22:50.000
So if there's people in the community that feel that there

22:50.000 --> 22:53.000
should be better ways for users to sort of come together.

22:53.000 --> 22:56.000
It's much appreciated to help organize that.

22:56.000 --> 23:00.000
So of course, thanks to VCV and direct depth community,

23:00.000 --> 23:02.000
because we are just downstream from all of them.

23:02.000 --> 23:05.000
And yeah, we're just an integrator mostly.

23:05.000 --> 23:08.000
And users are posting on patchstorage.com.

23:08.000 --> 23:11.000
So there is like a dedicated cardinal section where you can find patches

23:11.000 --> 23:12.000
that work.

23:12.000 --> 23:15.000
And we'll thank you for listening, and there's a project page.

23:15.000 --> 23:16.000
So any questions?

23:16.000 --> 23:17.000
Thank you very much.

23:22.000 --> 23:23.000
A great talk.

23:23.000 --> 23:24.000
Before we ask, before questions,

23:24.000 --> 23:27.000
it's merely in the next speaker in the room.

23:27.000 --> 23:28.000
Not yet.

23:28.000 --> 23:31.000
So I mean, as soon as he hopefully will get in here soon,

23:31.000 --> 23:33.000
because he is the next one in turn.

23:33.000 --> 23:36.000
Speaking about is there any question for Alexander and Philippe?

23:40.000 --> 23:41.000
No question at all.

23:41.000 --> 23:43.000
They were so clear, so.

23:43.000 --> 23:45.000
There's one.

23:45.000 --> 23:46.000
There's one.

23:46.000 --> 23:47.000
Okay.

23:49.000 --> 23:51.000
Big walking together.

23:52.000 --> 23:54.000
We'll show the website.

23:54.000 --> 23:56.000
Maybe we'll show the website again.

23:56.000 --> 23:58.000
Where are you, sir?

24:00.000 --> 24:01.000
The license list.

24:01.000 --> 24:02.000
I have this.

24:06.000 --> 24:07.000
Keep scrolling.

24:07.000 --> 24:08.000
Keep scrolling.

24:08.000 --> 24:10.000
Just a quick question.

24:10.000 --> 24:12.000
It's about plotting.

24:12.000 --> 24:17.000
What are the dependencies required to port to an open watering system?

24:17.000 --> 24:18.000
Depolences.

24:18.000 --> 24:19.000
Sorry, I don't hear.

24:19.000 --> 24:21.000
People say it be quiet, please.

24:22.000 --> 24:27.000
What are the dependencies required to port cardinal?

24:27.000 --> 24:29.000
The penalty is the port cardinal.

24:30.000 --> 24:33.000
As you shoot, a lot of stuff is already supported.

24:33.000 --> 24:36.000
So the main issue is not exactly cardinal.

24:36.000 --> 24:41.000
It's third party modules that assume where we're in Linux.

24:41.000 --> 24:42.000
That's the issue.

24:42.000 --> 24:45.000
Like the raccoon supports Mac Windows Linux.

24:45.000 --> 24:47.000
Not even Linux ARM.

24:47.000 --> 24:51.000
So a lot of modules have their expectation.

24:51.000 --> 24:56.000
It's possible to support PSD because we can fetch a couple of things.

24:57.000 --> 25:02.000
Out say anything that is politics and can do Excel 11 is easy enough to port.

25:02.000 --> 25:07.000
But I at some point have I call ICO as built as well.

25:07.000 --> 25:10.000
Not without the UI, but this is just the engine.

25:10.000 --> 25:13.000
It was interesting.

25:13.000 --> 25:14.000
It was interesting.

25:14.000 --> 25:16.000
It's just in the ICO.

25:16.000 --> 25:17.000
Yeah.

25:17.000 --> 25:18.000
The ICO is possible.

25:18.000 --> 25:22.000
The issue is we don't have the UI stuff ready on the DPM site.

25:23.000 --> 25:26.000
If you don't care about the UI side, you can run it.

25:26.000 --> 25:28.000
We will take a look.

25:28.000 --> 25:29.000
Thank you.

25:29.000 --> 25:30.000
Okay.

25:30.000 --> 25:31.000
Thank you.

25:33.000 --> 25:34.000
Yeah.

25:34.000 --> 25:36.000
Oh, that's one more.

25:38.000 --> 25:42.000
I think it's getting a bit too noisy for questions.

25:42.000 --> 25:45.000
But let's give them a round of applause, please.

25:45.000 --> 25:46.000
Thank you.

25:50.000 --> 25:51.000
And the beer round.

25:51.000 --> 25:55.000
So feel free to catch them outside if you want to make any question.

