Home » Matt Tytel from Vital Audio

Matt Tytel from Vital Audio

Vital became an instant “must have” synthesizer upon launch in 2020. Matt talks with us about the importance of the free tier, the decision to open-source Vital’s JUCE repository, and his new shader-based graphics library, Visage.

When you are building a full featured synth like Vital or Helm or a synth in general, do you see yourself as building an instrument? Or more a platform or ecosystem?

I feel like that’s more of a business question than a technical question. You build your synth, and you have all these features. When you’re building it, it’s just pieces. With some synths, like modular synths, you just kind of ship all the pieces to them and you let the users create the instrument. But with a synth like Vital, more things are setup — not hardwired, but there’s a default path. You have oscillators going into filters. I don’t have an unlimited amount of filters.

There’s multiple steps. I’m the instrument maker, then there’s the sound designer and then there’s the musician or producer at the end. Sometimes you combine the sound designer and the musician.

Right, you are making calls on every default for parameters, modulation, ranges, how they are all tuned. Those are instrument choices. You’re exerting control over what’s exposed or not.

Yeah, these lines are always blurred. Where the instrument ends and the musician starts. If you’re combining splice loops and making a song out of that, chopping up audio and making a new song —using recorded audio as an instrument in your song — the lines are blurred, regurgitated, cyclical. If you sample songs, you are reusing samples as a new instrument.

Vital released during the first covid lockdowns and was an instant hit.

Did you add features in response to sound designer and user feedback or do they have to fit your concept of what this instrument is and what it enables people to do.

Picking what feature goes in is one of the biggest battles. It’s harder to choose what doesn’t go in. Because you get requests all the time. What doesn’t go in?

It’s just so easy to add a menu and be like “Here it is, in the menu.” But then your menu becomes 50 items long. A lot of synths do worse because they have too many options that are not good. So you’re picking the good ones that create the most amount of sounds. I always say, if your synth had 2 million sliders and every slider was one audio sample, you can create any sound you want. But it’s too many options, so it’s too complicated to use.

So you are selecting features based on maximum impact. What delivers the highest value for your stakeholders. [laughs]

Right! If a feature only sounds good under very specific circumstances then it’s usually a pretty bad choice. Like, if this filter only sounds good with this input, why would you put that in. They have to be a good functioning part of the whole.

Not for some one-off use case.

Right. And obviously, I put a lot of things in that are just really common to use, everyone wants them. Even though you’re probably going to want a reverb after your synth, you want that built in because you’re just going to get a million requests and the preset designers are going to want it. So things like that you have to put in — well, you don’t have to — a lot of synths don’t have them.

Do you regret putting anything in?

I don’t feel like I have any regrets about what I put in…

Is there stuff you want to rip out?

Well, you know, if you work on a new project, you rip everything out. It’s really enjoyable to build up from the ground.

I don’t know if there’s any feature I would like really rip out. There’s a few things I wanted to design differently. I had 2 warp modes on the oscillator. And I had some other design for that, more XY pad things, but I could never get it to feel right, so I just left it as two knobs.

What do you think about WebView in plugins?

There are some successful WebView plugins out there. Like Output. For simple UIs, if you can be like, “Here’s a parameter” and it automatically hooks up to C++, I feel like WebViews are going to be a success. It’s easier to design and move web components around than writing a UI in C++.

But there’s a reason why a lot of complicated UIs are still written in C++. You want really fast graphics and really tight responsive audio to visual. We’ll see. I would need to see some real animated beautiful things.

I have a couple friends doing WebViews with animated waveforms that you can zoom into. All the actual hard work of like, “Okay, I have to take this buffer, divide it up, calculate widths” is still the same. But I worked on a Vue app recently and there was a refreshing speed of development and not worrying about the underlying rendering.

Right.

On the other hand, I’ve heard of a company accidentally packaging all of the node_modules folder into their plugin! [laughs]

Oh wow. I mean, people have always done things they shouldn’t do in plugins. Like when the plugin is scanning and doing web calls back home. I hate when plugins do that.

When they phone home?

When you just want to scan plugins and they phone home while you’re doing a scan. So scans take forever.

[laughs] Yikes.

There’s definitely going to be some growing pains for WebViews. It’s going to be popular. The iterations — I’m kind of jealous about that. You can just modify CSS and it loads up real time.

You’ve been chewing on your own graphics framework for a while, right? What was the main goal there, just to have a more iterative WebView-like vibe?

Graphics are such a pain point for me because I had to do so much. For JUCE, with the Direct2D stuff — if they had that back when I started, I might just have stuck with JUCE.

Helm, the spiritual predecessor to Vital.

But back when I was first making Helm and Vital, I wanted faster graphics. So I started building my own graphics and now I’m working on a whole UI library. It’s things that I want, like post effects and shaders.

You can be like, “Blur this area” or “Make this bloom” or you could do crazy graphics like make this look glitchy. It’s all shader based, so it uses signed distance fields to draw things. I’ve been mainly making it more efficient so it’s not redrawing all the time. I might release it soon just to see if anyone’s interested, because I’ve kind of made it a usable library instead of something I’m just using. [Update: Visage is now released!]

The animated bloom demo in Matt’s new UI library.

Oh that’s exciting. You want to be a maintainer all of a sudden? [laughs].

[laughs] Yeah, that’s the question! This might just be something like NanoVG. He kind of just threw it out there.

Yeah. You could find someone to babysit it, I guess.

I’m going to be using it for a while, so it’s not like it’s going to go unused and un-updated. But I don’t know if I want to respond to feature requests.

Is Vital already using it?

It’s using the precursor to it. I separated all the UI stuff and I reimplemented some things. I have a test plugin I’m working on. But I probably want to get back into actual plugin development. I’ll probably port Vital to it and then work on my next project, which is kind of on the back burner right now.

Is the next project a secret?

I mean, it’s not secret, but it’s — yeah, I’ll keep it secret.

You should!

I don’t even know if I’m going to finish it, just playing around with things. But it’s starting to take form.

Is it another synth, can you say that?

Yeah, it’s another synth. I’m just going to stick with synths for now.

Let’s switch over to some business stuff. You have a $5 subscription model. What made you decide to go that route?

I have the 5 dollar subscription and you can just buy the pro version. And I have the plus version too, which just gets you less presets than the pro version.

I would probably remove the plus, simplify everything. But yeah, the subscription is nice. For a lot of people who would subscribe, five dollars a month is very little. If you want to use Vital, get extra presets and then support more development, it’s a very small amount to ask. You can’t really ask for one dollar, as the fees you pay make it not worth it. It’s one of the lowest amounts that would just get a lot of people to click it without thinking.

And then you have the free version as well. You have the whole spectrum covered, except for someone who wants to spend $200. Has the free version been good because then you get a bunch of users who onboard over time? And create support load? [laughs]

The free version is something I wanted to do. I tried to make music in college and it was really hard back then, 2008, 2009, 2010. Your options were buying an expensive software synth. To me, expensive software is so frustrating, especially as a poor college student. Just software, there’s literally no cost to ship.

Growing up in like the golden age of the internet, the first thing you learn is moving bits and bytes doesn’t really cost anything. I remember being confused by companies charging $2000 for a bundle.

Yeah, I mean those days are over. Unless you’re shipping just to producers. I guess people spend a lot of money on Ableton. DAWs. People will drop a thousand dollars on that.

There is a dichotomy, though — look how hard you are working on just the graphics backend. The costs are real.

Yeah, but having the free version was really important because I want people to use it. That was my main thing. I want to have the biggest impact. The money is necessary to have a living. But when I released Vital, I cared more about having the most amount of people use it.

It’s the same exact binary as the pro version and the subscription. You sign in and it downloads different presets and there’s one cloud feature that you have limited access to. I dunno if you’ve used it but you can type in text.

Yeah, when you posted that on twitter, I got really excited. I love spoken text in music.

I give like five [API calls] per day on the free version, but then pay and you get unlimited access for that. I pay for a text to speech service. Yeah, I feel like the free version has been successful. It’s gotten a lot of downloads. I get a lot more support requests, but they also help each other.

Does most of the help happen on discord? You have a forum as well, right?

I have a Discord and a Forum. I need to be more active there, but it’s hard because I’m such a person who likes putting my head down and working and putting on the blinders. So I’m just trying to focus. Responding to everybody and going back to work, it just sucks you out of the mode.

Can you appoint some mods?

Yeah, I did have some mods. I probably need to pay somebody to do community management. But then I’m a manager!

Right…

Someone who can self-manage, that’s like the ideal.

You pay someone for design, don’t you?

It’s on a contract basis, they’re not on payroll or anything.

I see, having a community manager would be more full time.

Right. When I release the next project, I might hire some people to help me with that and then keep them on. But that’s a ways down the road.

You open-sourced the original release of Vital. Was that also from a values/ideals intention of it being helpful for the world to see what it looks like?

I was thinking about myself. My younger self. When I was just out of college I was really interested in synthesizers. There was very little open source at the time. There was like, ZynAddSubFX, one of the more common ones on Linux, but it was just really hard to figure it out. So I had to teach myself how to create a synth. Then I worked at a company that also had synths. But they’re very very complicated and there weren’t a lot of open source examples of how to do it.

So it’s kind of a gift to my younger self, being like “This is how would you do it.” I also said I would do it to a lot of people, so it was like a commitment I made before it was released. And so I stuck to that.

That probably has given me more grief than anything else, business-wise, just because it’s hard to separate people who are interested in the code from the people who are interested in the synth. Those communities are very different. Having them in the same community was really bad.

I could see that…

It just added so much confusion like, people talking about code to people who are asking a user interface question.

“What’s an LFO?“

Yeah, or “How do I use this feature?” and then someone comes in and talks about the code. They’re not going to go read the code, they’re just a user. The user community should really be separate from the code community. I would get code bug reports or code features in the main channel. It was just adding a lot of confusion.

So it created some weird support burden, but it didn’t impact on your business otherwise? A lot of people are afraid that people will, you know —

Yeah, fork it. If you have a strong enough brand, it doesn’t matter. If you fork Vital, you can’t call it Vital, you have to call it something else.

And beyond that, anyone at that technical level of competence probably wants to do their own thing anyway.

Exactly.

What motivates you day to day? You’re working on these epic timescales as a solo synth dev. If you think back to before you released Vital, what kept you chewing on the next thing and not feeling like you’re pushing a boulder up the hill?

Oh gosh, you do feel like you’re pushing a boulder up a hill!

You find something you really like working on. And then you have like a little sprint and it’s done. And then you’re like “Oh, I have to work on this huge next piece.” And you just sit there looking at the boulder. Like, “Oh my gosh, it’s a big boulder.” I just sit there so long. I stare at the boulder. I walk around the boulder. I sit on top of the boulder.

[laughs]

I do anything but push the boulder. Before I start a new phase, I always have this phase where I’m just like, “Oh, god.” But as soon as the boulder starts rolling then I’m like, “Ok.” So, I guess the trick for me is keep the boulder rolling right into the next one. When there’s a break and then there’s a big new thing that has a lot of unknowns, I feel like I have to think about it a lot. And sometimes it’s good just to think about it before you work on it, and not do a lot of coding.

You just sit there looking at the boulder. Like, “Oh my gosh, it’s a big boulder.” I just sit there so long. I stare at the boulder. I walk around the boulder. I sit on top of the boulder. I do anything but push the boulder.

Especially with something that’s really complex, like making really clean oscillators. You have to think about it before you just dive in. It’s one of those things where you might want to do premature optimization. I hate that phrase because it helps a lot of times to design things to be optimized than to try and re-optimize it later.

It’s true. There’s this gray area with critical tasks where it can turn into over-design. You’re convinced something will be faster, you build it all out and then you have to build it again.

Yeah that’s true. You’re working on an additive synth. That probably requires a ton of optimization. You can’t just build it however you want. You can’t just have one oscillator by itself because you need to make it SIMD. You probably require a lot of design to make it. Can I ask you a question about your synth?

Sure!

How do you optimize those oscillators, do you have an architecture?

I thought I came up with a genius architecture. I got enamored with a particular engine idea. But it turned out to have limitations that didn’t outweigh the performance gains I was so excited about. Basically, my advice to my former self is to build whatever it is you can, then build the next one and then build the next one. I don’t know how you feel about this, but there are some things you only find out 80% of the way through.

That’s true.

I usually throw a tantrum or two at that point because I have to go back and get rid of what I thought was a beautiful idea or good solution.

That feeling sucks. When things are coming to a head and you’re going to finish something and you’re like “Wait, I need to take a step back here and redo something because something’s not quite right.” Sometimes you just have to be like “No, it’s not right and I’m just gonna go and finish it anyway”. But sometimes you have to make the hard decision and be like “Okay, I’m actually going to take another eight months to work on this.”

It’s hard to know when to do that. And you can get stuck in that loop where you keep doing that forever and then it’s done.

Do you get accused of being a perfectionist?

Well, I don’t currently work with anyone…

What about just in your daily life?

No, I don’t think I’m a perfectionist.

I want things to be really good. I do get into this perfectionist mode where “This has to be really good.” I leave things a lot. I leave a lot of things that are just like “Okay, that’s not perfect, but I’m going to leave it.”

It’s more like if I’m looking at something — if my eyes are on it — then it has to be really really good. But as soon as I look away, I just don’t notice it.

Why, is that something you are going through?

This is turning into therapy! I can only take a step or two at a time and then have to reassess, like you said, sit on top of the boulder, circle the boulder. And that’s the same on the UI side, not just DSP. I do have some legitimate perfectionist tendencies. I nerd out about performance.

A friend of mine is working an a project, he’s very secretive about it. He’s been working on it, almost 10 years now, full time, pounding it out.

That makes me feel… better.

I mean, I’ve been working on Vital for about — well, the backend for a long time — but then working on Vital for 3 years full time. But working on something for 10 years, you almost become a new person by the end of it!


Matt was interviewed by Sudara, who is building an additive synthesizer with JUCE.

Have comments on this interview? Ideas for who we should talk to next? Let us know on the JUCE forum.