Creating a "DAW" for a piece of hardware

I want to preface my post by saying I am new to the software aspect of music composition. I know that what I am requesting help with is well beyond the realm of my abilities presently, and will likely take years to figure out, unless there is a simpler solution that I don’t know about, because again, I’m new to this.

Alright, let’s try to get my thoughts in order. So what I’m looking to do is create a DAW, or at least a way to visually compose electronic music in a small box with simple hardware controls. I’m not looking for something super expansive, or even to make the next big thing, on the contrary. I think that most people would scoff at my idea, as it’s really not wholly necessary…

Basically, I have some 8-bit VSTs that I like, and they have some affects, and I’d like to be able to take them wherever I go, mess about with them on trips, or on my break at work, without busting out my laptop, keyboard, charger, mouse. I really only Need like 10 tracks at the most, effects per track, no live recording, but rather putting the blocks on the piano roll (for lack of a better way of phrasing it while on sleep deprived mind). Something simple to interact with a few buttons and knobs. I’m willing to learn whatever it takes, even design my own plugins to work with it. I’m also not picky on platform, I was thinking Linux so I could run it off of a Raspberry Pi or similar if that was possible.

Ehh, I know this all might not be too coherent. Feel free to ask me more clarifying questions, and I’ll try to give an adequate response. Just any help, or pointing me in the right direction, or please tell me if this is just a dumb idea. All of it is helpful.

P.S. I have experience with putting together electronics, boards, wiring, etc. but only a minimal amount of programming. I’m currently getting started learning C++, but all the rest of my family are programmers, and I was going to enlist them to help teach me or answer questions as I went along.

Thanks in advance!

Hi Draeygo,
I think what you are trying to achieve is actually not that difficult. I’m just putting my thoughts out there for you with a little bit more concrete on the software side, since this seems to be your week spot :wink:

Firstly the good news: most of the complicated stuff is all ready shipping with JUCE. It’s called the AudioPluginHost. You can use that software to wire up your VSTs and your Ins and Outs and the signal flow will work just like that. AudioPluginHost also takes care of a lot of peripheral problems you will run into. For example:

  • Storing the Audio MIDI Device Settings. If you are looking in a no KVM solution, you are heavily relying on this functionality. Also make sure you pick hardware that actually works. In the past I’ve had some audio cards that managed to crash this function (not only in JUCE but inside MacOS itself). But any decent hardware should do.

The next step is using a hardware controller to modify the AudioProcessorParameter inside the AudioProcessor. I suggest you use a Mackie compatible controller as hardware. It works via MIDI and is therefore easy to integrate into AudioPluginHost. You can use this software GitHub - tony-had/mackie-control-monitor: A desktop application that decodes incoming Mackie Control messages to get an understanding how and what your selected hardware is sending.
As a controller I suggest just buying a cheap one at first and check if you can achieve anything with it. If it doesn’t work, you won’t be down a hole lot of money on that part.

The “complicated” programming part would be to convert the MIDI input (from the DAW controller) and set them into the VST plugins. For you, I highly recommend hard-coding that. Find the correct entry point for the MIDI buffer inside AudioPluginHost, check midi channel, noteNr, ctrVal etc. and by that set a specific parameter of a specific processor to the value you’d like it to be.
You don’t have to worry about all the multi threading issues because audio parameters are designed to be accessed by any threads. You also “shouldn’t” have to worry about being in sync with any edits to the audio graph as long as you are not modifying that while pushing the MIDI control (which you don’t). Just write a comment there so you’ll remember in 10 years, when you look at the code again ;). Depending on your exact use case you also don’t have to worry about performance. If you get into a venue push the controls and don’t touch them at all during the performance, you will get away without worrying at all. But if you are not doing something completely crazy in your MIDI callback, you’ll be good anyway with the performance. This is of course all a bit “quick and dirty” but that’s totally ok for one that only starts with programming and not looking to design a commercial product. Focus on getting it to work first and that look over it and figure out what you can (or have to) optimise.
Your additional code will most likely relatively short, so you can ask in this forum again when you have a working example and figure out what the bottle necks will be. It’s very tricky to know this stuff as a beginner. But knowing about the problems is half the way – and having an awareness about what you just programmed.

I hope I was able to provide a good perspective what you’d have to do :slight_smile:

1 Like

I guess it’s a lot easier. There is a open source solution for this called lmn3.

Look at this. There is a github repository that contains building instructions for the hardware. And source code of the DAW which is written in juce with the tracktion engine.