WEBVTT

00:00.000 --> 00:09.000
Yeah, next up, we have Zobia.

00:09.000 --> 00:11.000
Hey everyone.

00:11.000 --> 00:15.000
Can you hear me well enough?

00:15.000 --> 00:16.000
Yeah.

00:16.000 --> 00:18.000
So my name is Xavier.

00:18.000 --> 00:20.000
I'm a programmer and songwriter.

00:20.000 --> 00:22.000
I'm based here in Brussels.

00:22.000 --> 00:25.000
And I'm going to be presenting a software project called

00:25.000 --> 00:29.000
it's a prototype of a music production software that tries to bridge the gap between

00:29.000 --> 00:32.000
life-coding and conventional dollars.

00:32.000 --> 00:34.000
The stock is not going to be a product pitch.

00:34.000 --> 00:37.000
Power is mainly a research prototype at this point.

00:37.000 --> 00:42.000
And while it is open source, I wouldn't recommend you actually try it out.

00:42.000 --> 00:46.000
Instead, I kind of want to sell you on the ideas behind it and how I think they fit

00:46.000 --> 00:48.000
into the free software movements.

00:48.000 --> 00:51.000
I'm hoping to make you maybe curious or inspired.

00:51.000 --> 00:55.000
So to explain how I started this project, I'll give you an example from Odor.

00:55.000 --> 00:58.000
Let's say I have two different effects in Odor.

00:58.000 --> 01:01.000
And I want to sync up their settings.

01:01.000 --> 01:06.000
For example, one node that I can turn and it changes the EQ on two different tracks.

01:06.000 --> 01:08.000
It's something that you can do in some of the dots.

01:08.000 --> 01:11.000
I haven't found a way to do it in Odor.

01:11.000 --> 01:13.000
To me, it feels conceptually simple.

01:13.000 --> 01:16.000
It's basically, I declare some states for my knob.

01:16.000 --> 01:20.000
And then I use that state as the value for two different EQs.

01:20.000 --> 01:22.000
And then, you know, slap a GUI on top of it.

01:22.000 --> 01:24.000
How difficult can it be?

01:24.000 --> 01:27.000
But in reality, this requires a really good understanding.

01:27.000 --> 01:31.000
I think it's a good understanding of the codebase of Odor, which is really big, by the way.

01:31.000 --> 01:35.000
And not only that, you can't just slap a GUI on top of something.

01:35.000 --> 01:39.000
It's like you have to kind of understand how it fits into the program,

01:39.000 --> 01:42.000
how to configure the settings of the knob and everything.

01:42.000 --> 01:46.000
So even though the feature seems simple, it's not something that I can do quickly.

01:46.000 --> 01:51.000
For example, what I take a break from mixing a song that I'm working on.

01:51.000 --> 01:57.000
To me, this represents a mismatch between the ideals of free software and reality.

01:57.000 --> 02:00.000
We have the essential freedoms and they're important.

02:00.000 --> 02:04.000
But why they guarantee that we may change software that we'd use.

02:04.000 --> 02:06.000
It doesn't mean that we actually can change it.

02:06.000 --> 02:09.000
And I find that in practice, software doesn't really want to be changed.

02:09.000 --> 02:13.000
Unless you're like an actual contributor to the program you're using.

02:14.000 --> 02:16.000
And we have it pretty good.

02:16.000 --> 02:19.000
I assume most people in this room are programmers like me.

02:19.000 --> 02:26.000
Like most users, like to most users of the ideas of free software, even less accessible.

02:26.000 --> 02:31.000
And I think one of the big problems is a lack of composability.

02:31.000 --> 02:36.000
A tool is composable when it's made from simple parts that can be combined together into complex things.

02:36.000 --> 02:40.000
For example, the UNIX shell is composable.

02:40.000 --> 02:45.000
Simple tools that do one thing well, and then you pipe them together to accomplish complex tasks.

02:45.000 --> 02:48.000
Another great example is EMAX.

02:48.000 --> 02:53.000
When you're using EMAX, basically it involves learning and using a little bit of E-list.

02:53.000 --> 02:58.000
And this creates a sort of gradient between using and programming EMAX.

02:58.000 --> 03:03.000
And you can walk this gradient based on your needs and your mastery of E-list.

03:03.000 --> 03:07.000
And in comparison, most GUI applications have poor composability.

03:07.000 --> 03:08.000
There are good reasons for that.

03:08.000 --> 03:11.000
Making GUI is composable is difficult.

03:11.000 --> 03:14.000
In some ways, it's still an open problem.

03:14.000 --> 03:19.000
And composable interfaces tend to be more complex and less beginner-friendly.

03:19.000 --> 03:24.000
But the consequence is that instead of a gradient like EMAX, we have a cliff.

03:24.000 --> 03:29.000
And so sometime ago, I set out to make my own DAW with composability in mind.

03:29.000 --> 03:32.000
And to do that, I borrowed ideas from two different fields.

03:32.000 --> 03:34.000
The first is live coding.

03:34.000 --> 03:40.000
And if you don't know, live coding is the form of live music, where a performer writes a program in a domain-specific language.

03:40.000 --> 03:45.000
And then the program is continuously executed and produces sound.

03:45.000 --> 03:49.000
And because live coding is based on programming, it's inherently composable.

03:49.000 --> 03:56.000
Typically, live coding is used in electronic music to make procedural loop-based music.

03:56.000 --> 04:04.000
The part my project, it's based on live coding, but the goal is a bit different because it targets the same use cases as a traditional DAW.

04:04.000 --> 04:08.000
So things like recording, arranging, and mixing tracks.

04:08.000 --> 04:11.000
Let's look at an actual example.

04:11.000 --> 04:14.000
How do I do this?

04:14.000 --> 04:20.000
So let's pray that the sound actually works.

04:20.000 --> 04:28.000
And shout at me if it's too loud.

04:28.000 --> 04:32.000
So basically, I have this source code here on the left.

04:32.000 --> 04:38.000
And it's the source code for this music that we can hear on the right.

04:38.000 --> 04:42.000
And I'm going to show you how I can, so this is supposed to be a DAW.

04:42.000 --> 04:44.000
Imagine that it's a DAW.

04:44.000 --> 04:49.000
And I'm going to show you how I can add a track to this DAW.

04:49.000 --> 04:54.000
And so because it's a programming language, a track is going to be a data structure.

04:54.000 --> 04:56.000
I'm going to copy some code to go faster.

04:56.000 --> 04:58.000
So this is a track.

04:58.000 --> 05:02.000
And the important part is this list of clips that I have here.

05:02.000 --> 05:05.000
And so there's a single clip in my track.

05:05.000 --> 05:06.000
It's this wave file.

05:06.000 --> 05:10.000
I have a start and end that represents how the clip is trimmed.

05:10.000 --> 05:12.000
And then I have a location on the track.

05:12.000 --> 05:15.000
And I'm going to go ahead and set it at the beginning of the track.

05:15.000 --> 05:18.000
Let's rewind and let's listen it.

05:19.000 --> 05:22.000
Right, we count here anything because this is just a data structure.

05:22.000 --> 05:24.000
I actually need to sample from it.

05:24.000 --> 05:28.000
So I'm going to call this function here called track read buffer at.

05:28.000 --> 05:33.000
And basically, it reads a buffer of audio from this track at a given location.

05:33.000 --> 05:37.000
And then I'm going to mix that buffer into the master buffer,

05:37.000 --> 05:39.000
which is the one that we're actually listening to.

05:39.000 --> 05:42.000
And this is just like a vector addition.

05:42.000 --> 05:44.000
I'm like adding all the samples in those two buffers.

05:44.000 --> 05:47.000
And let's see what this sounds like.

05:48.000 --> 05:50.000
Now I can hear my track.

05:52.000 --> 05:53.000
Okay.

05:53.000 --> 05:56.000
Now maybe I want to change the volume of the track.

05:56.000 --> 05:58.000
And for this, I'm going to call this buff scale function,

05:58.000 --> 06:01.000
which multiplies every sample in a buffer with.

06:01.000 --> 06:05.000
By a constant, let's actually maybe set it to minus 10.

06:05.000 --> 06:07.000
So we can hear better.

06:08.000 --> 06:10.000
Oh yeah, it had to compile.

06:10.000 --> 06:12.000
It's a programming language.

06:12.000 --> 06:14.000
Yeah, there you go.

06:14.000 --> 06:16.000
And then another thing.

06:16.000 --> 06:17.000
Yeah.

06:17.000 --> 06:19.000
If you want to reply and effects,

06:19.000 --> 06:23.000
well, effects and like pretty much every behavior in part are functions.

06:23.000 --> 06:26.000
And so if I want to do a low pass favor, for example,

06:26.000 --> 06:28.000
I'm doing a function call here.

06:28.000 --> 06:32.000
Let's set it to maybe 200 hertz and a queue of 0.7.

06:32.000 --> 06:34.000
And let's listen to it.

06:34.000 --> 06:36.000
We can barely hear it.

06:36.000 --> 06:39.000
But yeah, you can hear the low pass filter, hopefully.

06:39.000 --> 06:41.000
Yeah, yeah.

06:42.000 --> 06:43.000
And that's basically it.

06:43.000 --> 06:45.000
And if you're kind of wondering how this works,

06:45.000 --> 06:48.000
like this is this application on the right.

06:48.000 --> 06:52.000
It's like language server for the programming language

06:52.000 --> 06:53.000
that I have here on the left.

06:53.000 --> 06:56.000
So I can actually go to like the definition of things and so on.

06:57.000 --> 06:58.000
Okay.

06:58.000 --> 07:00.000
Let's,

07:00.000 --> 07:02.000
oh, that's my notes.

07:02.000 --> 07:04.000
Let's continue.

07:04.000 --> 07:05.000
Yes.

07:07.000 --> 07:09.000
So now as you can plainly see,

07:09.000 --> 07:12.000
I'm changing a song this way is miserable.

07:12.000 --> 07:16.000
And I think this is why live coding doesn't usually target this use case.

07:16.000 --> 07:19.000
But I think the properties of this medium are still valuable.

07:19.000 --> 07:21.000
I'm using a programming language.

07:21.000 --> 07:22.000
It's during complete.

07:22.000 --> 07:24.000
I can sort of do anything.

07:24.000 --> 07:27.000
It's making easy things really difficult.

07:27.000 --> 07:30.000
But it's not making anything impossible.

07:30.000 --> 07:34.000
And something that I also really like about this is like all the data in my

07:34.000 --> 07:36.000
file is there in its raw form.

07:36.000 --> 07:37.000
I can see it.

07:37.000 --> 07:38.000
I can understand it.

07:38.000 --> 07:39.000
I can change it.

07:39.000 --> 07:41.000
You saw me like copy pasting stuff.

07:41.000 --> 07:45.000
I get like all the nice things from having this text based medium.

07:45.000 --> 07:48.000
A lot of the features that I would need in a regular DAW.

07:48.000 --> 07:51.000
I don't need to implement them directly in this because I have them in my text

07:51.000 --> 07:53.000
at it or in some way.

07:53.000 --> 07:58.000
And all the features of my DAW like the effects and everything are functions.

07:58.000 --> 08:00.000
I can compose them and I can go to the source.

08:00.000 --> 08:03.000
I can make my own version.

08:03.000 --> 08:05.000
But we have the usability issue.

08:05.000 --> 08:09.000
And so to address it, I borrowed a second idea which is bi-directional programming.

08:09.000 --> 08:14.000
It's a concept from the fields of programming language theory and human computer interaction.

08:14.000 --> 08:19.000
In bi-directional programming, you write a program that has some sort of outputs.

08:19.000 --> 08:23.000
But you can also change the output of the program by changing it directly.

08:23.000 --> 08:28.000
And this gets reflected back into the source code of the program that generated that output.

08:28.000 --> 08:32.000
A seminal work in this space is sketch and sketch.

08:32.000 --> 08:34.000
It's a vector graphics tool.

08:34.000 --> 08:37.000
And basically, you have code here on the left.

08:37.000 --> 08:42.000
And when this code is executed, it generates the drawing on the right.

08:42.000 --> 08:46.000
And then you can actually change this drawing directly like an inkscape.

08:46.000 --> 08:51.000
And it essentially runs the program backwards to change back the source code,

08:51.000 --> 08:53.000
like really cool project.

08:53.000 --> 08:57.000
In part implemented, the like simple version of this.

08:57.000 --> 09:01.000
Basically, I have these, what I call these visual macros,

09:01.000 --> 09:05.000
their special forms that wrap a value in the programming language

09:05.000 --> 09:09.000
and generates a GUI for that value specifically.

09:09.000 --> 09:13.000
And I'm going to show you a few of those.

09:13.000 --> 09:16.000
Let's go.

09:16.000 --> 09:20.000
Okay, so now I'm going to, where's my mouse here?

09:20.000 --> 09:22.000
Now I'm going to reveal this window here.

09:22.000 --> 09:25.000
And you can see a bunch of these visual macros that I talked about.

09:25.000 --> 09:30.000
So if I click on this one, I can see this checkbox here is connected to that piece of code there.

09:30.000 --> 09:31.000
I have a slider here.

09:31.000 --> 09:33.000
It's connected to that piece of code there.

09:33.000 --> 09:40.000
And to give you an example, I'm going to change this frequency that I have here in the effect that I added earlier.

09:40.000 --> 09:46.000
And make it into a slider so that I can actually adjust the frequency as I'm playing.

09:46.000 --> 09:49.000
I'm going to arrange it from 100Hz to 10,000Hz.

09:49.000 --> 09:51.000
And so I have the slider that appeared here.

09:51.000 --> 09:53.000
Now if I start playing.

09:59.000 --> 10:05.000
Yeah, you can sort of here the, you can hopefully hear the,

10:05.000 --> 10:07.000
like frequency of the loop as well as changing.

10:07.000 --> 10:11.000
And you'll notice that when I change this slider, it changes the source code.

10:11.000 --> 10:15.000
And like a slider like this, it's a pretty common thing that you'll find in a lot of life-coding systems.

10:15.000 --> 10:18.000
It's very useful to have.

10:18.000 --> 10:21.000
Another macro that I really like is the checkbox.

10:21.000 --> 10:23.000
I find it to be very versatile.

10:23.000 --> 10:27.000
So for example, a lot of this music, like all of this music here, I recorded myself.

10:27.000 --> 10:29.000
We have like some MIDI stuff.

10:29.000 --> 10:30.000
We have some audio stuff.

10:30.000 --> 10:34.000
And I recorded it with a click track, which we can listen like this.

10:34.000 --> 10:37.000
And if I uncheck the box, we don't have the click track anymore.

10:37.000 --> 10:38.000
And I check it again.

10:38.000 --> 10:40.000
And then we hear it again.

10:40.000 --> 10:42.000
And the way this works is very simple.

10:42.000 --> 10:47.000
In the source code, here I have the definition in use of my click track.

10:47.000 --> 10:50.000
And then it's wrapped in an if statement.

10:50.000 --> 10:52.000
And the condition for the if is the value of the checkbox.

10:52.000 --> 10:53.000
That's it.

10:53.000 --> 10:56.000
And I use it also to like record on tracks.

10:56.000 --> 10:59.000
I can use it to mute a track or to enable an effect.

10:59.000 --> 11:01.000
Okay, thank you.

11:01.000 --> 11:06.000
And then the final, which is that I'm going to show you the final macro.

11:06.000 --> 11:08.000
Then I'm going to show you is this track macro.

11:08.000 --> 11:10.000
So I returned to the track I had at first.

11:10.000 --> 11:13.000
I wrap it in this track macro, I save.

11:13.000 --> 11:16.000
And now we have this track that appears here.

11:16.000 --> 11:19.000
And this is the sample that I did at the start of the first demo.

11:19.000 --> 11:21.000
And I can move it around.

11:21.000 --> 11:23.000
I can resize it.

11:23.000 --> 11:25.000
And yeah, that's kind of it.

11:25.000 --> 11:28.000
And if I don't like what I did, I can undo the changes in my text editor.

11:28.000 --> 11:33.000
And there are like the things I'll back to to where they were.

11:33.000 --> 11:38.000
And yeah, that's it for the second demo.

11:38.000 --> 11:47.000
So this track editor is like the final thing that kind of makes this into a sort of usable though.

11:47.000 --> 11:50.000
Like I've used it to make actual music.

11:50.000 --> 11:55.000
But it's also maybe my least favorite macro because it kind of goes against some of the ideas in this project.

11:55.000 --> 11:56.000
Because it's not really composable.

11:56.000 --> 11:58.000
It's just this monolithic entity.

11:58.000 --> 12:00.000
I think that better ways to do it.

12:00.000 --> 12:02.000
This is what I have now.

12:02.000 --> 12:04.000
Okay.

12:04.000 --> 12:05.000
I really understood.

12:05.000 --> 12:10.000
I argued that adding a small feature to auto was a lot of work for someone who's only a user of auto.

12:10.000 --> 12:12.000
How is Pau any better?

12:12.000 --> 12:14.000
I think it improves in two ways.

12:14.000 --> 12:18.000
First, this idea of walking the gradient that I mentioned earlier.

12:18.000 --> 12:21.000
Using Pau and extending Pau are no distinct actions.

12:21.000 --> 12:23.000
They exist on a continuum.

12:23.000 --> 12:27.000
If you know how to do one, you sort of know how to do the other.

12:27.000 --> 12:33.000
And then another thing that makes that is better is how changing the GUI in Pau is less complicated than in auto.

12:33.000 --> 12:35.000
Like don't get me wrong.

12:35.000 --> 12:37.000
Overall, auto has a better GUI.

12:37.000 --> 12:39.000
It's more powerful.

12:39.000 --> 12:42.000
It's like tax more stuff into it.

12:42.000 --> 12:44.000
But it's more complex to extend.

12:44.000 --> 12:47.000
In Pau, the GUI is more modular and more composable.

12:47.000 --> 12:55.000
If you're familiar with immediate mode GUI's, it really feels like writing an immediate mode GUI for the song that I'm working on.

12:55.000 --> 13:01.000
Pau doesn't like meet all my ideals of like maliable music production tool that I would like to have.

13:01.000 --> 13:06.000
But I think it's a step in the right direction, and I think there's a lot more to explore in this space.

13:06.000 --> 13:09.000
So I'm going to wrap up now.

13:09.000 --> 13:16.000
Why did I come to first them to show you a prototype of an obstacle doll that I don't think you should use?

13:16.000 --> 13:20.000
Well, as I said, I'm hoping to make you think about how we make software.

13:20.000 --> 13:30.000
And I think we the developers of free software, and particularly free creative software like does, have an opportunity to think about this sort of stuff in different ways.

13:30.000 --> 13:33.000
And to build it differently.

13:33.000 --> 13:39.000
As I explained at the start, I think the essential freedoms of free software are not enough to uphold these principles we value.

13:39.000 --> 13:44.000
We should strive to make tools that users can actually own and shape to fit their needs.

13:44.000 --> 13:47.000
This is particularly true of creative software.

13:47.000 --> 13:50.000
Making art has always involved some degree of toolmaking.

13:50.000 --> 13:55.000
I think of painters who are like tweaking their own paint recipes.

13:56.000 --> 14:01.000
I also don't think we will see this sort of innovation from commercial actors or like big commercial actors.

14:01.000 --> 14:06.000
If you're in the business of selling creative software to a mass market, you can't make anything that's too weird.

14:06.000 --> 14:11.000
Whereas I think in this community, we have the freedom to make something different.

14:11.000 --> 14:17.000
And I think like if you're interested in creating new music production software, I suggest you try and make it weirder.

14:17.000 --> 14:19.000
And it doesn't have to be great.

14:19.000 --> 14:22.000
Creative software does not have to be great to be a value.

14:22.000 --> 14:26.000
It mainly has to be different and interesting in its own right.

14:26.000 --> 14:30.000
Because art is not about efficiency, it's not about correctness, it's about aesthetics.

14:30.000 --> 14:34.000
And aesthetics is shaped in part by the tools that we use.

14:34.000 --> 14:37.000
Tools that are different, invite their users to make art that is different.

14:37.000 --> 14:42.000
And tools that can be shaped by their users, invite them to craft their own direction.

14:42.000 --> 14:44.000
Thank you very much.

14:44.000 --> 14:51.000
Thank you.

14:51.000 --> 14:52.000
Amazing presentation.

14:52.000 --> 14:54.000
Really, really, it's very interesting.

14:54.000 --> 14:55.000
There are any questions.

14:55.000 --> 14:58.000
In the meanwhile, it's just in the room as well.

14:58.000 --> 15:00.000
No, I mean, it's just the next speaker.

15:00.000 --> 15:02.000
Okay, so if you can start preparing.

15:02.000 --> 15:07.000
So the first question was here.

15:08.000 --> 15:15.000
I don't know if our door is scriptable or not, but he's okay.

15:15.000 --> 15:17.000
So yeah.

15:17.000 --> 15:29.000
Okay, indeed the question was if it was thinkable to kind of integrate these project into an existing project to have the best of the two worlds.

15:29.000 --> 15:34.000
And for instance, I also think into LMMS.

15:34.000 --> 15:40.000
I don't know if you know LMMS is another sequencer, simpler.

15:40.000 --> 15:44.000
So maybe a good starting point for this kind of integration.

15:44.000 --> 15:47.000
If it's not scriptable, that as well, I don't know.

15:47.000 --> 15:50.000
But the idea is to take the best of the words.

15:50.000 --> 15:56.000
Yeah, so the bird question was, is it like possible to integrate this into an existing tool?

15:56.000 --> 15:57.000
What is it?

15:57.000 --> 15:58.000
I don't know.

15:58.000 --> 16:00.000
If you just put it into the MMS.

16:00.000 --> 16:04.000
So I think it is possible.

16:04.000 --> 16:05.000
Yeah, yeah.

16:05.000 --> 16:14.000
And if you've used the door like a lot more tweakable in a lot of ways.

16:14.000 --> 16:19.000
This project was more like, as I said, it's more of a research project.

16:20.000 --> 16:25.000
And I think I wanted to explore some specific ideas.

16:25.000 --> 16:32.000
I do think probably the, you might get more value by trying to like extend something that exists already.

16:32.000 --> 16:40.000
The advantage of doing something green field is that you don't, you are not limited by the thing that already exists.

16:40.000 --> 16:42.000
You can sort of do whatever you want.

16:42.000 --> 16:47.000
And there are drawbacks to this, but there's also a lot of value in that.

16:48.000 --> 16:50.000
Thank you for the presentation.

16:50.000 --> 16:51.000
I have a very basic question.

16:51.000 --> 16:54.000
What does FTL stand for?

16:54.000 --> 16:59.000
Oh, it's just the name of the programming language in the, it's just called FTL.

16:59.000 --> 17:00.000
It's called futile.

17:00.000 --> 17:02.000
It's a reference to a song that I like.

17:02.000 --> 17:03.000
That's it.

17:03.000 --> 17:07.000
So it's also available as a standalone programming.

17:07.000 --> 17:12.000
Yeah, but I mean the programming language is tightly coupled into the project.

17:12.000 --> 17:15.000
Like, it's just, I made this project without, I'm also programming language nerd.

17:15.000 --> 17:18.000
And so I was like, oh, it's an opportunity to make a programming language.

17:18.000 --> 17:19.000
So I did.

17:19.000 --> 17:20.000
Yeah.

17:20.000 --> 17:21.000
Thank you.

17:26.000 --> 17:28.000
I'm also available for questions afterwards.

17:28.000 --> 17:30.000
It's also time to get everybody.

17:30.000 --> 17:36.000
It is also easy to write, effect inside or only use the effect that is ready from the,

17:36.000 --> 17:39.000
So everything that you heard, like the, the drum and everything,

17:39.000 --> 17:42.000
I wrote everything in the programming language of the thing.

17:42.000 --> 17:46.000
For example, if you want to create an equalizer, for example,

17:46.000 --> 17:51.000
I can code it to the integralizer or I can only use the function of equalizer.

17:51.000 --> 17:54.000
No, so the equalizer that we heard, I wrote myself.

17:54.000 --> 17:57.000
The, like, not the equalizer, but the, like, the low path filter,

17:57.000 --> 18:01.000
which is sort of an equalizer if you rethink about it.

18:01.000 --> 18:07.000
They're making me run for the, to the, to the back lines, so just a second.

18:07.000 --> 18:17.000
Okay, so the question, because this is very, very interesting.

18:17.000 --> 18:20.000
I think it would fit very well in the modular approach,

18:20.000 --> 18:22.000
where you connect things to other things.

18:22.000 --> 18:25.000
Yeah. So do you see any technical problems

18:25.000 --> 18:28.000
into turning this into an audio plugin?

18:28.000 --> 18:30.000
Um, no, I don't think so.

18:30.000 --> 18:34.000
Like, here, here I'm writing buffers of audio outputs,

18:34.000 --> 18:38.000
but like, I could connect them, like, I'm, this is running on jacks,

18:38.000 --> 18:40.000
so I can connect it to auto if I want.

18:40.000 --> 18:44.000
And I could also, like, output MIDI if I wanted to, I, like,

18:44.000 --> 18:48.000
the drums I recorded with a MIDI pad, so I can input MIDI,

18:48.000 --> 18:51.000
I can also output MIDI, so I could connect it into other things.

18:51.000 --> 18:56.000
Okay, because sounds would do more than, yes, thank you.

18:56.000 --> 19:01.000
There was, yeah, one last question, and then we'll move to just.

19:01.000 --> 19:05.000
I mean, I haven't jogged much lately, so this is good for me.

19:09.000 --> 19:13.000
I'm sorry, there's something that is just begging,

19:13.000 --> 19:15.000
and I might have missed something.

19:15.000 --> 19:18.000
You have bi-directional programming,

19:18.000 --> 19:23.000
and it seems to me that AI is the best bi-directional programming ever.

19:23.000 --> 19:28.000
So, I'm expecting this question, and I'm not going to know that for that.

19:28.000 --> 19:34.000
So, I don't feel totally sold on the state of AI as it is right now,

19:34.000 --> 19:38.000
and I'm not going to talk about, like, the ethical aspects of it and anything,

19:38.000 --> 19:44.000
but the thing is, like, AI works great as, like, to generate code,

19:44.000 --> 19:46.000
but it's also good to be able to understand it.

19:46.000 --> 19:52.000
I think here, the idea is, like, if the medium of my, like,

19:52.000 --> 19:55.000
like, program Moldo is this programming language,

19:55.000 --> 19:58.000
and I can use an LM to generate the source code.

19:58.000 --> 20:01.000
I can get a lot of value through this approach as well,

20:01.000 --> 20:05.000
and so I can have an LM to generate some source code.

20:05.000 --> 20:09.000
It also generates the GUI for it, and then I can use the GUI instead of like this.

20:09.000 --> 20:12.000
I think, I don't want to talk more about LM's,

20:12.000 --> 20:15.000
but there might be some ideas there, for sure.

20:19.000 --> 20:20.000
Thank you very much.

20:20.000 --> 20:21.000
Thank you.

