313 lines
14 KiB
Plaintext
313 lines
14 KiB
Plaintext
|
|
! title The Non DAW
|
|
! author Jonathan Moore Liles #(email,male@tuxfamily.org)
|
|
! date March 1, 2008
|
|
! extra #(image,logo,logo.png)
|
|
|
|
-- Table Of Contents
|
|
|
|
: Overview
|
|
|
|
:: Description
|
|
|
|
The Non DAW is a powerful, reliable and fast modular Digital Audio
|
|
Workstation system, released under the GNU General Public License
|
|
(GPL). It utilizes the JACK Audio Connection Kit for
|
|
inter-application audio I\/O and the FLTK GUI toolkit for a fast and
|
|
lightweight user interface.
|
|
|
|
Please see the #(url,non-daw%(slash)MANUAL.html,Non DAW Manual) and
|
|
#(url,non-mixer%(slash)MANUAL.html,Non Mixer Manual) for more information.
|
|
|
|
:: What it is not
|
|
|
|
Non-DAW is *not* a wave editor. It is not a beat slicer. It is not a
|
|
granular synthesis engine. It is *not* a clone of some proprietary DAW. It
|
|
is not an /insert name of proprietary audio thing here/ killer. It is *not*
|
|
limiting and restricting. It is *not* a monolithic DAW with internal mixing
|
|
or EQ DSP. Non-DAW is intended to be one tool among many in your Linux audio
|
|
toolbox.
|
|
|
|
:: What is a DAW?
|
|
|
|
The acronym DAW stands for Digital Audio Workstation. Of course, Non is
|
|
software, so when we say DAW we imply a purely software based system. A DAW
|
|
is used by modern studio engineers to record and arrange multitrack sessions
|
|
of different musicians into a single song. Perhaps a more noble use of a
|
|
DAW, and the one for which Non-DAW was specifically written, is to provide
|
|
the mutli-instrumentalist individual with all the software necessary to
|
|
quickly and conveniently record and arrange his compositions and produce a
|
|
professional quality result.
|
|
|
|
In this author's opinion, a DAW comprises the following functionality:
|
|
|
|
* Non-linear, non-destructive arrangement of portions of audio clips.
|
|
* Tempo and time signature mapping, with editing operations being closely aligned to this map.
|
|
|
|
Since Non uses JACK for IO, some things traditionally considered to be within
|
|
the scope of a monolithic DAW can be pared out into JACK and Non Mixer:
|
|
|
|
* Signal routing
|
|
* Audio mixing
|
|
* Hosting of plugins
|
|
|
|
:: Why write another one?
|
|
|
|
First and foremost, we can disregard all non-free DAWs because we do not
|
|
waste our precious time and spirit on non-free and\/or proprietary software.
|
|
This excludes virtually every other DAW in existence. Secondly, we require a
|
|
DAW that runs on the GNU\/Linux operating system in conjunction with other
|
|
free software, such as the JACK Audio Connection Kit, in a modular and
|
|
cooperative and manner. Finally, we require a program that is powerful,
|
|
fast, and reliable. No other software meets these requirements.
|
|
|
|
The design of the Non DAW differs substantially from others. This is a good
|
|
thing; for a clone of a bad design is doomed from the start.
|
|
|
|
There is only one other DAW that is capable and free software, and its name
|
|
is Ardour. Suffice it to say that the architecture of Ardour is incompatible
|
|
with the requirements of speed and reliability. Other DAW-like free software
|
|
programs, including Traverso and QTractor, are similarly limited (being of
|
|
similar design), but suffer the additional burden of cumbersome legacy ALSA
|
|
support and very a limited feature set.
|
|
|
|
Given these options, we had no choice but to start from scratch, this time on
|
|
a solid foundation, rather than attempting (in vain) to shoehorn good design
|
|
into an existing code base.
|
|
|
|
:: Features
|
|
|
|
Non-DAW shares many features in common with other, similar projects. However,
|
|
Non-DAW's unique architecture permits surprising new functionality.
|
|
|
|
::: Journaled Projects
|
|
|
|
Unlike legacy DAWs, which keep project state in huge, memory wasting, hard
|
|
to manage XML (or binary equivalent) trees, Non-DAW has the unique ability
|
|
to store project state in a compact continuous journal of bidirectional
|
|
delta messages--similar to the journal part of journaling filesystems--in
|
|
plain ASCII.
|
|
|
|
The Non-DAW disk format takes the form of a journal of delta messages. Each
|
|
project file contains the complete history of that project since the last
|
|
(optional) compaction operation. These journals are so terse that it is
|
|
practical to keep the complete history of a project from the time it was
|
|
first opened. No XML or other bloated, buggy, resource hungry format is
|
|
employed. (Anyone suggesting the use of XML for anything related to this
|
|
project will be shot on sight with incendiary rounds.)
|
|
|
|
This has a number of highly desirable consequences. Among them:
|
|
|
|
+ Zero time spent 'saving' projects.
|
|
+ No need to 'save' projects manualy.
|
|
+ No need for CPU and RAM wasting 'autosave' function.
|
|
+ In the (unlikely) event of a crash, at most *one* transaction (user action) may be lost, and the project will *not* be invalidated.
|
|
+ Unlimited undo--potentially going back to the very moment the project was created (state of the template it was based on).
|
|
+ Undo history requires no additional RAM.
|
|
+ Project format is insanely simple and easy to manipulate with sed or awk scripts, should the need arise (see the included `remove-unused-sources` script for an example).
|
|
|
|
Non-DAW's journalling capability can drastically change your workflow. No
|
|
longer will you fear a system failure. No longer will your pinky finger
|
|
become sore from hitting Control-S after every important change. No longer
|
|
will you have to attempt, in vain, to manually edit a completely
|
|
incomprehensible XML 'document', because Ardour has corrupted its memory and
|
|
therefore the project you 'saved'.
|
|
|
|
::: Non-destructive editing
|
|
|
|
Sound sources (audio files) are represented by /regions/. Any number of
|
|
regions may represent different parts of the same source. All editing is
|
|
performed on these region structures--the sound sources themselves are
|
|
considered read-only (except for captures in-progress).
|
|
|
|
::: Unlimited tracks
|
|
|
|
Tracks in a DAW are unlike tracks on tape in that a single track can
|
|
contain more than one channel of audio. Each audio track has its own
|
|
record, mute, solo, and gain, as well an active take and any number
|
|
of inactive takes. A track may also have any number of annotation
|
|
and control sequences associated with it.
|
|
|
|
::: Unlimited takes
|
|
|
|
A /take/ is a sequence of regions. Each track has /current take/, implied by
|
|
'the track', as well as any number of other, inactive takes. A track may be
|
|
set to display all takes simultaneously, to ease the process of reviewing
|
|
past takes or stitching together a new take from parts of previous takes.
|
|
Old takes may be deleted, either one by one or all at once, when they are no
|
|
longer required. Takes may not be transferred between tracks (there's no
|
|
technical reason why they can't, but allowing this would be bad design).
|
|
|
|
::: Cross-fades
|
|
|
|
Where regions overlap, a cross-fade exists. This means that the transition
|
|
from region A to region B will be gradual rather than abrupt. The shape of
|
|
the gain curve may be selected separately for region A and B of the
|
|
cross-fade. Available curves include: Linear, Sigmoid, Logarithmic, and
|
|
Parabolic.
|
|
|
|
::: Automation
|
|
|
|
Each track can have associated with it any number of /control sequences/, a
|
|
subset of which may be visible at any one time. Each control sequence
|
|
comprises a series of /control points/, which collectively represent a graph
|
|
of changes to a single controllable value over time. Anything may be
|
|
controlled by a control track, including external software supporting OSC or
|
|
MIDI control, although the most common application is mixer gain automation,
|
|
where the value controlled is the fader level in the mixer.
|
|
|
|
::: Time/tempo mapping
|
|
|
|
The time and tempo maps (rulers) affect where and how many bar\/beat lines
|
|
are drawn. During playback they affect the time\/tempo of the JACK transport
|
|
so that other programs, like the Non-Sequencer, can follow along in sync.
|
|
|
|
:: Components
|
|
|
|
The Mixer and the Timeline are separate programs, connected through JACK.
|
|
|
|
::: Timeline
|
|
|
|
All operations on the timeline are journaled, and therefore reversible.
|
|
|
|
The following data belong to the timeline:
|
|
|
|
= Tracks and Takes
|
|
= Each Track has a number of input and output ports, a name, and
|
|
= any number of attached sequences. All sequences but the current
|
|
= (topmost) are inactive and do not generate sound or accept
|
|
= captures. These sequences are referred to as /Takes/. Previous
|
|
= takes may be swapped with the current sequence and all takes
|
|
= may be shown on screen at once for easy splicing. Each track
|
|
= can also have any number of Control Sequences attached to it,
|
|
= in which case all control sequences generate control output
|
|
= unless disconnected. The height of a track may be adjusted
|
|
= and a track can be muted, soloed, or record-enabled.
|
|
= Regions
|
|
= Regions are the most common object on the timeline. Each region
|
|
= represents a segment of some particular audio file. Waveforms
|
|
= of all regions belonging to the same source are displayed in
|
|
= the same hue. Each region has a normalization value and regions
|
|
= can be selected individually or operated on in groups. Each
|
|
= region has a fade-in and fade-out curve, and when two regions
|
|
= overlap, this constitutes a cross-fade.
|
|
= Control Points
|
|
= Control points are arbitrarily placed points on a curve (or
|
|
= line) from which continuous control values are interpolated
|
|
= and sent out a JACK port (like a control voltage).
|
|
= Time and Tempo Points
|
|
= Time and Tempo points control the tempo and meter throughout
|
|
= time. This information is used for drawing the measure lines
|
|
= and snapping to the grid, as well as informing other JACK
|
|
= clients of tempo changes throughout a song.
|
|
= Annotation Points
|
|
= Cue points are textual markers on the timeline. Common names
|
|
= for cue points include "Verse 1", "Bridge", etc.
|
|
= Annotation Regions
|
|
= Annotation Regions are annotations with a definite duration.
|
|
= These are useful for representing lyrics or other notes of a
|
|
= timely nature. Each track may have any number of annotation
|
|
= sequences associated with it, and these sequences can contain
|
|
= a free mix of annotation points and annotation regions.
|
|
|
|
::: Mixer
|
|
|
|
The Non Mixer is a stand-alone application. It is a complement to Non
|
|
DAW, but neither program requires the other in order to function.
|
|
|
|
Implementing the mixer functionality in a separate program, connected
|
|
to Non-DAW via JACK presents a number of advantages:
|
|
|
|
* Eliminates the need for an internal connection management interface
|
|
* Improves overall system stability
|
|
* Increases parallelism (utilizes multiple cores)
|
|
* Adds flexibility
|
|
* Eliminates the need for cumbersome concepts and interfaces such as 'sends', 'groups', 'inserts' and 'busses'.
|
|
|
|
Multiple instances of the mixer can be run together in order to
|
|
organize groups of channels and manage them with your preferred
|
|
window manager.
|
|
|
|
Each mixer strip runs as a separate JACK client. In JACK2, this can
|
|
translates into the DSP workload being spread across multiple CPU
|
|
cores.
|
|
|
|
Since the Mixer is an entirely separate unit, you may use any JACK
|
|
capable mixer client you want instead of, or in myriad combination
|
|
with, the Non-DAW Mixer. The one called LiveMix works well, but
|
|
lacks many features of Non's mixer. All operations on the mixer
|
|
affect the current mix set state only and are not journaled.
|
|
|
|
The mixer's design is modular, with all DSP occurring in discrete
|
|
modules. One module hosts LADSPA plugins and the mixer is capable of
|
|
receiving control (automation) data for any module parameter from
|
|
Non-DAW (or another program) via JACK.
|
|
|
|
Control data is expressed as Control Voltage (CV).
|
|
|
|
; What does freedom have to do with this software?
|
|
|
|
Non is /free software/. This means, briefly, that you are free use it as
|
|
*you* wish, free to examine and adapt the source code, free to share it with
|
|
your friends, and free to publish your changes to the source code.
|
|
Furthermore, Non is /copyleft/, which means that you are free from the
|
|
threat of some other entity taking over and denying you the above freedoms.
|
|
The /free/ part of /free software/ doesn't refer to price any more than the
|
|
/free/ in /free speech/ does.
|
|
|
|
To learn why free software is so important to us (and why it should be
|
|
important to you), please see the Free Software Foundation's website:
|
|
|
|
#(url,http:\/\/www.fsf.org\/licensing\/essays\/free-sw.html,What is Free Software?)
|
|
#(url,http:\/\/www.fsf.org\/licensing\/essays\/copyleft.html,What is Copyleft?)
|
|
|
|
; Donations
|
|
|
|
Donations can take many forms. You can donate your time in code, either by
|
|
sending it to me for review or cloning the git repository and publishing one
|
|
containing your changes. You can donate your time in testing, documentation,
|
|
artwork, indexing, etc. Or, if you don't feel that you possess the time or
|
|
skills required for the above forms of donation, you can donate money
|
|
instead. Money donated will help to ensure that I have the free time, good
|
|
nutrition and enthusiasm required to implement new features. It can also be
|
|
a more palpable way of saying "Thanks for caring." or "Job well done!"
|
|
|
|
If you don't love this software, don't feel guilty about not contributing.
|
|
If you do love it, then please help me improve it--in whatever manner you
|
|
think is appropriate.
|
|
|
|
#(url,http:\/\/non.tuxfamily.org\/donation.html,Make a donation)
|
|
|
|
|
|
; Distribution
|
|
|
|
Development of the Non-DAW can be followed with Git:
|
|
|
|
> git clone git://git.tuxfamily.org/gitroot/non/daw.git
|
|
|
|
There are no pre-compiled binaries available.
|
|
|
|
; Requirements
|
|
|
|
The following libraries are required to build Non DAW and Non Mixer
|
|
|
|
* FLTK >= 1.1.7 (with `fluid`)
|
|
* JACK >= 0.103.0
|
|
* libsndfile >= 0.18.0
|
|
* liblrdf >= 0.1.0
|
|
|
|
The following are optional:
|
|
|
|
* LASH >= 0.5.4
|
|
|
|
; Community
|
|
|
|
Feel free to drop by the `#non` channel on irc.freenode.net.
|
|
|
|
There is a mailing list `non-daw@lists.tuxfamily.org`.
|
|
|
|
To subscribe, send a message with the subject 'subscribe' to
|
|
#(email,non-daw-request@lists.tuxfamily.org).
|
|
|
|
You can also browse the #(url,http:\/\/listengine.tuxfamily.org\/lists.tuxfamily.org\/non-daw\/,archive).
|