I’m making an open-source DAW!
I want to document every step of making this project so I started writing a couple of small updates along the way since start of last month (July 2020.) I compiled them all in this post and after this, I’ll write new posts regularly as the software progresses!
Why do I want to make an open-source DAW:
- It’s fun to make and work on for me and the product will help other people too (hopefully!) I think it’s a nice thing to leave for others after you die.
- There are a couple of features that other DAWs don’t have (even the proprietary ones) but they can benefit the music producers and creative people A LOT!
- Because we need a good open-source DAW. We already have Blender in the graphics world, Linux in the OS world, and Godot in the gamedev world. It’s time to have a good one in the music and sound world.
So here are a couple of things that I’ve been dealing with since the beginning of this project:
So first of all I had to figure out the licensing of the product and the tools that’ll get used to make it. I knew I wanted it to be open-source and not licensed under MIT from the beginning but I didn’t know the exact license name.
After searching and reading, I decided to make the software available under GPLv2. One of the reasons being the fact that some proprietary companies (such as Steinberg) have their tools available under GPL too!
For external tools, I originally decided to use Qt (under GPL) as the UI framework. But that changed along the way. I wrote about it in section #6.
2. Other DAWs?
I knew that there are 3 open-source DAWs out there. I worked with/saw videos about them and also other famous DAWs to see their workflow, their UI/UX and tried to gather information about the technology that they use. Most of them, like Ableton, use the stack that they’ve used since their first version and don’t use newer technologies.
3. Audacity ❤
Right after the first time I the thought of making a new DAW, I thought I was not good and knowledgeable enough.
To be honest, to some extent I was right. So I searched for other similar open-source projects to see how they work and I found Audacity.
I decided to read its code base to gain some information about what I’m going to do. Also their code is licensed under GPL, so I could use some of their code instead of re-writing everything and that saves me some time!
Audacity has been in development for many many years and like most other software, they mostly use the things that they’ve been using since the day one. Their code base is HUGE.
I panicked when I started getting into their code :) At some point I was thinking about cancelling the whole project since it seemed too hard to make it work. I was stuck in this mindset for a week. But eventually I found ways to keep going!
4. The project is too big!
The code base that I was studying was too big and the number of tasks in the project’s Trello board was beyond what I thought when I decided to start the project! But I couldn’t let myself cancel this project. I loved this too much to let it go!
SO, after a week of thinking how to deal with this problem, I broke the project into smaller milestones and broke the milestones into tasks. I decided to only think about the current milestone of the project. This helped me A LOT and reduced my stress!
So the first milestone (which I’m currently working on) is to only load and play multiple tracks (plus muting tracks and playing+pausing the playback)
The software and the flow of music making must be intuitive and easy to use but at the same time it has to be somehow unique compared to other DAWs to stand out.
I designed on a couple of UI concepts but tbh, I only like the latest one just a little bit. I lost count of how many concepts I made and erased. This is still an unsolved problem which I have to figure out a way to fix during this milestone.
Qt is dual-licensed, it’s both available under GPL license and proprietary licenses. If you want to use Qt under GPL, you’ll have to clone and build Qt by yourself. I had some errors that nobody has had on the internet. After spending 6 hours, I couldn’t build it successfully.
It got so exhausting that I started looking into alternative solutions. There were a couple of other UI frameworks which looked outdated so I didn’t want to use them.
Then I found out about OpenGL.
OpenGL is not a framework and not an abstraction either, it’s basically an interface and a set of rules that makes you enable to talk to the API of your GPU whether it’s AMD, NVIDIA, whatever.
I’ve started reading and studying about OpenGL for about two weeks now. I think it can be a good choice. But I definitely need to first implement some abstractions to make it easy to work with. I also will use some tools and frameworks like ImGui on top of OpenGL.
(Also Qt, if you’re reading this, please fix the error of makefile generations when you have the “#” character and space in the folder names.)
All proprietary DAWs support VSTs. VST is an interface which allows you to create software synths and effects and have them interact with a DAW or to be used as a standalone application. Usually the VSTs are made with frameworks such as JUCE that provide UI elements as well as some sound and MIDI features.
VST is developed by Steinberg (the company that owns Cubase) and originally it had a proprietary license, but they later released VST3 (a newer version of VST) dual-licensed, with the second option being GPL.
So in my DAW, I will add the support for VST3. But that’s not in priority at the moment. I’m looking forward to develop original toolbox for it more.
I’ve been working with Docker in another project for a few months and I think it’ll be amazing to dockerize this project too. It makes the process of development extremely easier for other people who might be interested in helping out the project :) (Unlike for example Qt which just wasted my time with its errors.)
I’ve thought about many many names but I don’t know which one to choose yet! Meanwhile, if you have any suggestions, I’ll be happy to hear them! Naming is HARD.