EQuality Released

Actually nearly three weeks ago!

#Anyway this cake is great, it’s so delicious and moist#

It’s been an intense period, hence no blogging. The dust has basically settled now (but if you do have an outstanding issue, don’t for a second imagine I’ve forgotten about you; my bugtracking is brimming over with great ideas for new features that people have suggested, and the occasional bug).

The only bugs left are ones that only a small number of people (none of whom are in the betagroup) can reproduce; I’ve been having a good run of finding them and fixing them, and it’s inevitable that when you scale up from a ten man beta group up to 500 users (for that’s how many of you with a demo that there are so far, before there’s been any advertising or mainstream publicity. If you’ve already got the beta, you can consider yourself amongst that tiny technical illuminati 😉 )

Everyone has been wonderfully supportive through what has, honestly, been one of the toughest periods of my life, ever. In the past I’ve always been part of a team at launch, and my responsibilities have been nothing more than making the installers and fielding the odd deeply technical question. Doing it single-handed was real tough, and my admiration and respect for other indie devs has deepened considerably. It’s been quite a ride.

I made a design decision to use VSTGUI 3.6 (the very latest) as the basis for the GUI code, and if Steinberg hadn’t already started on VSTGUI 4.0, I’d have a handful of patches to submit that would probably be helpful to a fair few people. That said, most people are still on VSTGUI 3.0; 3.6 is a big change. Anyway, the launch has been an opportunity to seriously debug VSTGUI.

I’ve been surprised at how easy the VST3 and 64bit porting turned out to be. There are a few issues yet to remedy with the ever-changing auval (Logic’s validation utility), but Apple have been terrific in helping work things out so far! Likewise, Digidesign are a blessing, the RTAS version came out on time thanks to some quick help from them.

Consensus seems to be very strong that EQuality/Digital outshines other eqs in sound quality. That was the real objective of the exercise; to bring ‘perfect’ EQ to every channel of the mix, with instant workflow. I’ve felt for some time that using plugin EQ across a mix wasn’t necessarily better than mixing on a great analogue desk with a great EQ. Now I no longer feel that way. 😉

Something, presumably the large graph and unswerving focus on pro functionality, has drawn a huge amount of attention from mastering engineers. Over the last three weeks, I’ve had so many fantastic suggestions for functionality that it’s become clear that there’s a space for a super-high-end mastering EQ that puts the control that you guys want into your hands. Rather than try and clumsily bash the functionality into EQuality, I’m drawing up designs for a new product, focussed directly at giving mastering engineers their dream tool; an EQ that is for mastering engineers what EQuality is for mix engineers. So, if you need twenty bands with complete flexibility to spread across 8 channels with m/s en-/decoders, grouping, routing, FFT window selection/calibration, fully spec-compliant (colouring and all) K-metering, that’ll be for you… 😉

I’d like to build a compressor first though. They say go with what you know, and mixing is what I know; mastering guys are VERY clever and VERY specific in what they need, so I’m going to have to take my time with the mastering stuff. In the interim, having worked on TBK3, Sonalksis SV315mk2, Focusrite Forte compressor, Focusrite Saffire compressor, and having helped with Focusrite’s Liquid compression, I have some ideas I’m very eager to try out.

Computer Music are reviewing EQuality… and I’m very much hoping that they like it! That’ll be the first mainstream press coverage to my knowledge.

I’m hoping to get all the remaining issues tidied away in the next week or so, and then get the neat new features in. I’ll keep you posted!

Big love!

Hard work.

Phuuu. It’s been another long day, but the end is very much in sight now.

I spent today fixing the last few dumb bugs; optimised the filter generation, updated the VU to support K-metering/rates, got the Setup component working… and actually got all the preferences wired in.

Getting banks of presets and A/B (we have 8 A/B bands… A->H) to integrate nicely and recall all the extraneous UI settings (is it pre/post? Analyser on?) etc was fun. That was hard work. That’s done now.

Undo/redo was done a while ago. That was actually relatively easy.

I think the control grouping mechanism that’s currently in is probably going to get overhauled, but it’s a LOT of fun as it is right now.

I think I’ve fixed every bug and added every feature request submitted by the beta crew. I’ve thrown in a few extra features as options that I think will prove fun (you can set numeric display to be simple or precise, for quick readouts or accurate work, that kinda stuff).

All the graph<->band<->textbox interaction is behaving beautifully, and it’s really quite a pleasure to use! 🙂

So, DSP still no issues emerged; general consensus is that it sounds superb, which makes my day. UI has just been overhauled, so there’ll probably be a few glitches I’ve missed, but realistically, release by the end of the month certainly doesn’t seem impossible any more.

I’ve just sent the latest candidate off to the UI guy for his approval. Probably we’ll reconvene early next week, and if I get the all-clear, it’ll go back to beta… which at this stage will hopefully be a case of getting everyone’s opinions on things rather than a brainstorming phase like the last one 😉

Steinberg and Cakewalk have VERY kindly given me Cubase and Sonar to test with, so I’m going to have a go at 64bit and VST3 – I can’t promise that’ll be tested and ready before release, but I know a lot of you care about it, and it’s very much on my radar. Likewise I’ve been doing a bit of research into 64bit AUs. Unsurprisingly I have to focus on getting the core code rock-solid first (although I reckon that’s very close now) before I can start investigating ports, but these formats will not be forgotten. 😉

So, that’s where we’re at now.

Oh, pricing looks like it’s going to turn out to be significantly cheaper than any other EQ at this grade of functionality/workflow (“pro”).

More soon. 😉

Antialiasing… updated graph

I’d never pretend that graphic design is something that I’m good at. Good thing I have a graphic designer!
Still, I take ages to answer even his simpler questions… so, we’ve been working really hard on the new UI for the last few weeks.

Part of the UI update includes revamping the graph. As you can see, the new graph is neatly antialiased, and looks a lot smoother than the last.
You might notice that the yellow band has a different opacity (and larger handle) to the others; that’s because I had the pointer over it (to adjust it) while taking the screenshot.. 😉

STRANDED!

In the worst of the crazy UK weather in decades, I got stranded on the Isle of Wight for a week and a half. That was fun.
Internet was shakey, but I’m back in the saddle now, and there’s a sexy UI design being worked on.

TL;DR: Sorry for the disappearance; back now 🙂

Another busy day!

Hi,

Today I’ve been busy fixing things.

It’s not particularly usual for people to publish details of what gets fixed in beta (it’s like dirty linen), but what the hell, it’s been a great day!

v0.01 was the first beta candidate.

Here’s the changelog:
v0.01->v0.02
fixed bypass
fixed latency reporting
fixed GUI controls synch
fixed memory leaks / uninitialised memory issues
added version number to UI

All the dumb bugs got fixed first 🙂 v0.02 is like 0.01, except it works 😀

That was the morning… then the afternoon…

v0.02->v0.03
don’t break with notches!
improve adaptive transform routine
optimise the crap out of it, part 1 [SIGNIFICANT speed improvements]
optimise the crap out of it, part 2 [SIGNIFICANT speed improvements in non-Digital mode]
improve all prototype estimation pre-optimiser [SIGNIFICANT speed+accuracy improvements]
redo the shelf handling (implement adaptive xform pre-optimiser)
fixed optimiser stability
increased band ranges upto 22k
improved filters to be analogue
tuned filters so that Analogue sounds good for sweeps!

So, eQuality got a LOT faster, much less CPU to use.
The shelves sound better, the filters are analogue style now, and the notches work correctly.
It feels stable (to me) now, and CPU usage went right down 🙂

Hopefully the rest of beta can be about adding neat features now :D:D

Time for me to sleep.

Dave.

How to build eQuality (technical angle)

Some of you might find it interesting to know what goes into making a product.
What I mean by that is, I think it’s interesting, so I’m going to tell you. 🙂

Starting at the bottom, working up:
1) Steinberg’s VST SDK.
Can’t really make a VST without this one…
2) My own VST->AU wrapper layer.
Since it’s compiled-in code, (and due to some other detail) this makes building an AU really fast and efficient.
The first version of this was built for the original TBK… a looong time ago! 🙂
Since then it’s grown, so that it handles most things automatically. AU ports of my own code take about 5 minutes.
3) Plugin Baseclass
Most plugins have the same essential functionality – things like handling presets, automating things, synchronising
with the UI, converting parameter values to display text/values and back again. I have a base class that does all the legwork for this.
4) cJSON + PluginJSON baseclass
This is pretty geeky, but I’m very proud of it. Most plugins I’ve worked on have needed to gain a parameter here or there through their life.
Generally this means problems with sessions, but a while ago, as a programming exercise, I built a JSON library in plain C, called cJSON. JSON is a simple, stable format for storing data; it’s been described as “fat-free XML”. Some things make sense stored in XML, but most things do really well as JSON. JSON is almost the X in AJAX. Now, I have a class that saves presets and preset banks as JSON, which means that as I add features, there’s no breakage of old sessions!
5) VSTGUI, ezXML and my automatic UI system.
A lot of developers have strongly criticized VSTGUI; my friend Angus (FXpansion) is particularly vocal on it.
VSTGUI is not without its flaws, but I’ve concluded that VSTGUI is the right way forwards for two reasons:
– The flaws can be overcome
and
– EVERY SINGLE HOST is tested to support VSTGUI.
That last point is really the killer. With some work, you can get VSTGUI under control, and I think I’ve done this.
The sourcecode for the eQuality UI is 3 pages long. To put that in context, SV517mk2 had about 9 pages, and SV517mk1 had 60.
eQuality UI is more feature rich than 517mk2, which is more feature rich than 517mk1 (which was not my code).
This is thanks to the UI system I’ve built, that allows me to describe the UI using XML, using one line of text per control, formatted to reflect the onscreen hierarchy of the controls. It’s very similar to the mechanism I used in StudioDevil AMP, which has an extraordinary amount of UI functionality. To parse the XML I use a library called ezXML, which compiles very very small, and does a great job!
6) UI controls
The stock VSTGUI controls are great, but it’s usual to need to extend the functionality a little. I have a library with a raytracer built in, that re-raytraces the knobs as you turn them… fast! Admittedly that probably won’t make it into the finished product (to save CPU while you use it), but we’ll see! 🙂
You also need a chunk of code to build an EQ graph that’s draggable, shows the EQ curves, draws the spectrum analyser, etc.
7) FFTs, Convolvers and Spectral processors
I use the Ooura FFT. One day I’ll have enough money (it’s VERY expensive) to get the Intel Performance libraries. When I do, you’ll all get a CPU saving! 😀
There’s a library that converts responses to minimum phase (joint effort with Marc / StudioDevil),
an impulse windowing library, and a fast FFT-based zero-latency convolver (Marc discusses these extensively in his PhD thesis! He helped me out a lot!).
8) EQ code
This is the real meat of the DSP.
I have a library that has all the analogue prototypes (used for linear/minimum/analogue phase modes, and for designing the digital EQs),
and, because I collect these things, implementations of all the common digital prototypes that people use (RBJ, Orfanidis, etc). Nice to have them at least 😉 Don’t worry… anything unused gets stripped out at link time. 🙂
This also handles the “music” (gain-q) stuff, and drives the FFT/Spectral stuff.
It also drives the new digital design mechanism, that I’m going to post about in the coming weeks, which makes eQuality sound so smooth and sweet! 🙂
9) The special EQ design stuff.
… more to come…
10) The plugin code itself!
Finally, with all the hard stuff handled by a bunch of libraries its built on, 6 pages of code declare all the parameters, handle the special stuff, like Range and Shift, control all the EQ code, and trigger the DSP, handling the logging of samples for the spec-analyser, the VUs, the M/S pre/post-processing.

And that’s how it’s made! Easy as 3.14159265358979323846 😉

Dave.

In the last 48hrs I have…

… been working on eQuality… 😉

– Fixed the filters
– Implemented an autolisten facility
– Built some rudimentary VUs
– Improved mouse handling on the graph
– Built a hella sexy system so that when I add new parameters, it shouldn’t break old sessions (this is gonna need some testing… 😉 )
– Ensured that inactive bands don’t use cpu
– Built an autoscale mechanism for the graph
– Started building the Setup page
– Fixed redraw on Windows
– Redone (and properly checked) the “music” (gain/q) mechanism. It sounds/feels right now 🙂

– Built the beta candidate
– Setup the beta mailinglist
– Invited my testers to beta!

Woohoo!

It’s been hectic. 😉