OpenDAW Design Document
OpenDAW is a OpenSource Digital Workstation (DAW), licensed under GNU GPL license for non-profit usage. OpenDAW should be able to compete with commercial DAW's, such as Steinberg Cubase, Propellerhead Reason or FruityLoops.
Key Aspects:
- OpenSource. OpenSource gives everyone ability to use is in noncommercial purposes. But rather than reuse, benefits should be granted from contribution of open-source community. Is offers things, such as bug-tracking or fresh ideas, giving it "proper" support level and usage power.
- Non-Profit. Created with non-profit purposes, this project will be developed primarily based on ideas. And this is most powerful progress engine in the world. Usage of most advanced technologies and algorithms with sources opened to everyone will create a rock-solid base for further researches and advancement in this field of study.
- Cross-Platform. Software, working across platforms - in Windows, Linux, MacOS or whatever is it compiled to - allows end-user to make habitual, regular thinks while not thinking about OS and other low-significant junk. On the other side - C++ is not Java, and most tasks will work with higher speed, using less resources. This is graceful aspect. It's way a good software should be.
- Architecture-Independent. While offering x86 legace support, it will support x64. Due to low complexity and modular design of suite, it could be easily ported to other hardware platforms, such as ARM (If required).
- Multi-Threading. Multithreased software design and use of Intel TBB will offer significant boost, when run on multicore/multiprocessor systems.
- CUDA. Parralel algorithms could be calculated, with means of powerful modern videocards, providing incredible speed and offloading CPU. Why nobody hasn't offered such DAW feature before?
- User Interface. User-fiendly, intuitive, easy in use and most possible simpliest interface - is key aspect, that lacks most of the DAWs. Almost every DAW are using windows for displaying it's information. Web-browser practive has showed, that tabs are more convenient for user than windows. So, interface, built on tabs will be next word in world of DAWs.
- Lightweight. Small size, no extra code, optimization of algotighms allows this software to be ran even on low-power hardware with small memory amounts. More instruments can be played at realtime, more power can be used for precise calculations. No heavy frameworks!
Architecture design is modular. This allows simulanteous work of different parts.
It consists of - GUI, DSP, AIO, и Sequencer.
- GUI. Module provides 2D Graphical User Interface, which should be built on tabs. Also it allows user to configure and control work of other components and plugins.
- DSP. Цифровой процессор управляет цифровой обработкой и микшированием сигнала, поступающего от различных инструментов и направляет результат в IO.
- AIO (audio input/output). Module provides input and output of audio and midi signals.
- Sequencer. Controls DSP state, using automation tracks.
GUI Overview.
Existing flexible enough GUI frameworks are too heavy for use in project. So a new one have to be written and supported within project needs.
Its assumed, that framework will have only one window, normally sized to fullscreen. In top part there should be toolbar, with file management, transport management and tab management functions, also having settings button (bringing program settings tab) and it must be used also as window header. All space below will be used for tabs, containing all other GUI elements so that offer all DAW functionality. Also Multilingual support must have place in a manner "one module - many languages" (some sort of .lng translation files).
DSP Overview.
DSP must mix all inputs from VST instruments, audio and midi interface, controlling them as sequenser says, and after passing them to effects route to audio out and/or file. So one tab will contain all mixer control (like in Reason), another is device links and effects control, and one tab per every instrument, which must contain all instrunent-specific gui. Also basic mixer control per every device must be present on sequenser tab (like in Cubase). This will provide most flexible control, where user can choose way he prefer to do it.
32-bit float is enough while digitally processing 8 or 16-bit audio. But in case of 24-bit and 32-bit audio one will need use 64-bit double precision floating point engine not to preserve less-significant bits. Also 32bit FP may be used when such a precision does'n matter (when running on low-power devices). So both of modes and easy mode switching must be impemented.
IO.
Audio and Midi Input/Output from different audio drivers.
Each driver is implemented in form of dynamically-loaded library and is providing single interface standart.
Easy driver switching must be implemented during work.
Examples of "driver" technologies (Base API's)
- WinAPI (waveOut*** и waveIn***, windows-only)
- DirectSound (windows only)
- WASAPI (Windows Audio Session API, Windows-only)
- ALSA (advanced linux sound arch.)
- OpenAL
- ASIO
Also JACK support could be added, if required.
Sequencer
General sequensow, which is used in most DAWs. But it must support 2 types of tracks - MIDI(for VST control) and Audio. Also recording possibility should be added (when you are recording sound from live hardware, like guitar, not virtual instrument)