Add documentation.

pull/3/head
Jonathan Moore Liles 2008-07-19 12:06:47 -05:00
parent 0100e482c5
commit c837a11812
22 changed files with 1735 additions and 13 deletions

View File

@ -35,18 +35,32 @@ config:
-include .config
export SYSTEM_PATH:=$(prefix)/share/non-daw/
export DOCUMENT_PATH:=$(prefix)/share/doc/non-daw/
export PIXMAP_PATH:=$(prefix)/share/pixmaps/non-daw/
# a bit of a hack to make sure this runs before any rules
ifneq ($(CALCULATING),yes)
TOTAL := $(shell $(MAKE) CALCULATING=yes -n 2>/dev/null | sed -n 's/^.*Compiling: \([^"]\+\)"/\1/p' > .files )
endif
ifeq ($(USE_DEBUG),yes)
CXXFLAGS := -pipe -ggdb -Wall -Wextra -Wnon-virtual-dtor -Wno-missing-field-initializers -O0 -fno-rtti -fno-exceptions
CFLAGS := -pipe -ggdb -Wall -Wextra -O0
CXXFLAGS := -Wnon-virtual-dtor -Wno-missing-field-initializers -fno-rtti -fno-exceptions
else
CXXFLAGS := -pipe -O2 -fno-rtti -fno-exceptions -DNDEBUG
CFLAGS := -pipe -O2 -DNDEBUG
CXXFLAGS := -fno-rtti -fno-exceptions
endif
CXXFLAGS += $(SNDFILE_CFLAGS) $(LASH_CFLAGS) $(FLTK_CFLAGS) -DINSTALL_PREFIX="\"$(prefix)\"" -DVERSION=\"$(VERSION)\"
CFLAGS+=-DVERSION=\"$(VERSION)\" \
-DINSTALL_PREFIX=\"$(prefix)\" \
-DSYSTEM_PATH=\"$(SYSTEM_PATH)\" \
-DDOCUMENT_PATH=\"$(DOCUMENT_PATH)\" \
-DPIXMAP_PATH=\"$(PIXMAP_PATH)\"
CXXFLAGS += $(SNDFILE_CFLAGS) $(LASH_CFLAGS) $(FLTK_CFLAGS)
CXXFLAGS := $(CFLAGS) $(CXXFLAGS)
INCLUDES := -I. -Iutil -IFL
include scripts/colors
@ -84,16 +98,15 @@ ifneq ($(CALCULATING),yes)
@ makedepend -f- -- $(CXXFLAGS) $(INCLUDES) -- $(SRCS) 2>/dev/null > .deps && echo $(DONE)
endif
install: all
@ echo -n "Installing..."
@ install Timeline/timeline $(prefix)/bin/non-daw
# @ install Mixer/mixer $(prefix)/bin/non-mixer
@ mkdir -p $(prefix)/share/non-daw
@ mkdir -p $(prefix)/share/pixmaps/non-daw
@ mkdir -p $(prefix)/doc/non-daw
@ cp pixmaps/*.png $(prefix)/share/pixmaps/non-daw
@ cp doc/*.html doc/*.png $(prefix)/doc/non-daw
@ cp COPYING $(prefix)/doc/non-daw
@ mkdir -p $(SYSTEM_PATH)
@ mkdir -p $(PIXMAP_PATH)
@ cp pixmaps/*.png $(PIXMAP_PATH)
@ $(MAKE) -s -C doc install
@ echo "$(DONE)"
ifneq ($(USE_DEBUG),yes)
@ echo -n "Stripping..."

View File

@ -45,13 +45,13 @@ decl {\#include "Audio_Region.H" // for options} {}
decl {\#include "Control_Sequence.H" // for options} {}
decl {\#include <FL/fl_ask.H>} {}
decl {\#include <FL/Fl_File_Chooser.H>} {}
decl {\#include <Fl/Fl_Shared_Image.H>} {}
decl {\#include <FL/Fl.H>} {}
decl {\#include <Fl/Fl_Shared_Image.H>} {}
decl {\#include <FL/fl_ask.H>} {}
decl {\#include "Engine/Engine.H"} {}
@ -556,6 +556,11 @@ Fl::scheme( Fl::scheme() );}
label {&Help} open
xywh {0 0 74 25}
} {
MenuItem {} {
label {&Manual}
callback {show_help_dialog( "MANUAL" );}
xywh {10 10 40 25} divider
}
MenuItem {} {
label {&About}
callback {About_Dialog ab;
@ -772,6 +777,14 @@ progress->redraw();
Fl::check();} {}
}
Function {show_help_dialog( const char *file )} {open private return_type {static void}
} {
code {char pat[256];
snprintf( pat, 256, "file://%s%s.html", DOCUMENT_PATH, file );
fl_open_uri( pat );} {}
}
}
class New_Project_Dialog {open

2
configure vendored
View File

@ -15,7 +15,7 @@ ask "Build for debugging" USE_DEBUG no
begin_tests
require_FLTK 1.1.7 images
require_FLTK 1.1.8 images
require_command FLUID fluid
require_package JACK 0.103.0 jack
require_package sndfile 1.0.17 sndfile

322
doc/MANUAL.html Normal file
View File

@ -0,0 +1,322 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<meta name="generator" content="Generated by MUP v3.5">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link type="text/css" rel="stylesheet" href="mup.css">
<title>Non DAW User Manual</title>
</head>
<body>
<div id=cover>
<h1>Non DAW User Manual</h1>
<h3></h3>
<address>
Jonathan Moore Liles <a href="mailto:male@tuxfamily.org">&lt;male@tuxfamily.org&gt;</a><br>
June 20, 2008<br>
</address><hr></div>
<div id=body>
<div id=toc>
<h1 id=toc>Table Of Contents</h1>
<ul>
<li><a href="#n:1.">1. User Manual</a>
<ul><li><a href="#n:1.1.">1.1. The Timeline Editor</a>
<ul><li><a href="#n:1.1.1.">1.1.1. Display Options</a>
<li><a href="#n:1.1.2.">1.1.2. Navigation</a>
<ul><li><a href="#n:1.1.2.1.">1.1.2.1. Sequences</a>
<li><a href="#n:1.1.2.2.">1.1.2.2. Playhead</a>
<ul><li><a href="#n:1.1.2.2.1.">1.1.2.2.1. Within A Sequence</a>
</ul><li><a href="#n:1.1.2.3.">1.1.2.3. Range</a>
</ul><li><a href="#n:1.1.3.">1.1.3. Projects</a>
<ul><li><a href="#n:1.1.3.1.">1.1.3.1. Settings</a>
</ul><li><a href="#n:1.1.4.">1.1.4. Transport</a>
<li><a href="#n:1.1.5.">1.1.5. Clocks</a>
<li><a href="#n:1.1.6.">1.1.6. Tempo Map</a>
<li><a href="#n:1.1.7.">1.1.7. Tracks</a>
<ul><li><a href="#n:1.1.7.1.">1.1.7.1. Recording</a>
</ul><li><a href="#n:1.1.8.">1.1.8. Sequences</a>
<li><a href="#n:1.1.9.">1.1.9. Regions</a>
<ul><li><a href="#n:1.1.9.1.">1.1.9.1. Editing</a>
<ul><li><a href="#n:1.1.9.1.1.">1.1.9.1.1. Split</a>
<li><a href="#n:1.1.9.1.2.">1.1.9.1.2. Duplicate</a>
<li><a href="#n:1.1.9.1.3.">1.1.9.1.3. Delete</a>
<li><a href="#n:1.1.9.1.4.">1.1.9.1.4. Trim</a>
<li><a href="#n:1.1.9.1.5.">1.1.9.1.5. Pan</a>
<li><a href="#n:1.1.9.1.6.">1.1.9.1.6. Normalize</a>
<li><a href="#n:1.1.9.1.7.">1.1.9.1.7. Fade</a>
<li><a href="#n:1.1.9.1.8.">1.1.9.1.8. Loop</a>
</ul></ul><li><a href="#n:1.1.10.">1.1.10. Annotation</a>
<li><a href="#n:1.1.11.">1.1.11. Automation</a>
</ul></ul></ul></ul><hr></div>
<h1 id="n:1.">1. User Manual</h1>
<h2 id="n:1.1.">1.1. The Timeline Editor</h2>
<center><div class="fig image"><table id="Fig.1.1" border=1>
<caption>
<strong>Fig. 1.1.</strong> Timeline Editor
</caption>
<tr><td><img src="tle.png" alt="fig. 1.1"></td></tr>
</table></div></center>
<p>
The Timeline Editor is what you first see when you start the Non-DAW. Here you will add tracks, make captures, and arrange regions.
</p>
<p>
Before you can add anything to the timeline, you must create a new project (menu item <tt>Project/New</tt>)
</p>
<center><div class="fig image"><table id="Fig.1.2" border=1>
<caption>
<strong>Fig. 1.2.</strong> New Project Dialog
</caption>
<tr><td><img src="new-project.png" alt="fig. 1.2"></td></tr>
</table></div></center>
<h3 id="n:1.1.1.">1.1.1. Display Options</h3>
<p>
The display options, found in the <tt>Options/Display</tt> submenu may be adjusted to suit your needs. Set the color scheme, widget style, and other graphic options to your liking. These options are global and affect all projects.
</p>
<h3 id="n:1.1.2.">1.1.2. Navigation</h3>
<h4 id="n:1.1.2.1.">1.1.2.1. Sequences</h4>
<p>
A sequence is focused when you click on it. Focus can be moved back and forth between sequences with <tt>Tab</tt> and <tt>Shift-Tab</tt>.
</p>
<h4 id="n:1.1.2.2.">1.1.2.2. Playhead</h4>
<p>
<tt>Shift+Left</tt> and <tt>Shift+Right</tt> move the playhead backward and forward one beat, while <tt>Ctrl+Shift+Left</tt> and <tt>Ctrl+Shift+Right</tt> move it by bars.
</p>
<h5 id="n:1.1.2.2.1.">1.1.2.2.1. Within A Sequence</h5>
<p>
The focused sequence accepts additional movement commands with specific relevance. <tt>Ctrl+Left</tt> moves the playhead to the beginning of the current or previous object in the sequence. <tt>Ctrl+Right</tt> moves it to the beginning of the next object in the sequence.
</p>
<h4 id="n:1.1.2.3.">1.1.2.3. Range</h4>
<center><div class="fig image"><table id="Fig.1.3" border=1>
<caption>
<strong>Fig. 1.3.</strong> Selecting a range
</caption>
<tr><td><img src="range.png" alt="fig. 1.3"></td></tr>
</table></div></center>
<p>
<tt>Ctrl+[</tt> moves the left range cursor (P1) to the position of the playhead. <tt>Ctrl+]</tt> moves the right range cursor (P2) to the position of the playhead.
</p>
<p>
The range cursors can be set individually with the mouse by positioning the pointer over the desired location and pressing <tt>[</tt> or <tt>]</tt>. Alternatively, both may be set at once by holding <tt>R</tt> and left-click+dragging the selection rectangle.
</p>
<h3 id="n:1.1.3.">1.1.3. Projects</h3>
<center><div class="fig image"><table id="Fig.1.4" border=1>
<caption>
<strong>Fig. 1.4.</strong> Project Info Dialog
</caption>
<tr><td><img src="project-info.png" alt="fig. 1.4"></td></tr>
</table></div></center>
<p>
A Non-DAW project is a directory where Non-DAW keeps the journal, project specific settings, notes, some meta-data, and, last but not least, your audio sources. A project is completely self-contained. You can rename a project as simply as:
</p>
<div class="fig example"><table width=100%><tr><td><pre>
$ mv Project-A Project-B
</pre></td></tr>
</table></div>
<p>
Non-DAW projects can refer to audio sources outside of the project directory--clips dropped onto the timeline from a file-manager, for instance. These are not copied into the project by default. This allows the efficient use of audio loop libraries, but introduces external dependencies. Beware that if you ever move, remove, or change one of these external sources, it will affect the Non-DAW projects referencing them.
</p>
<div class=admonition>
<table width=100%>
<tr><td><em>Note:</em></td>
<td>To import all the external sources for a project, making it suitable for
distribution or archiving, use the `import-external-sources` script included
with the program.
</td></table>
</div>
<h4 id="n:1.1.3.1.">1.1.3.1. Settings</h4>
<p>
Project specific settings are found in the Project/Settings submenu.
</p>
<h3 id="n:1.1.4.">1.1.4. Transport</h3>
<center><div class="fig image"><table id="Fig.1.5" border=1>
<caption>
<strong>Fig. 1.5.</strong> Transport Controls
</caption>
<tr><td><img src="transport.png" alt="fig. 1.5"></td></tr>
</table></div></center>
<p>
The transport controls allow you to control the JACK transport from the Timeline Editor. <tt>Home</tt> moves the playhead to 0 and <tt>End</tt> moves it to the end of the project. <tt>Space</tt> toggles playback.
</p>
<h3 id="n:1.1.5.">1.1.5. Clocks</h3>
<center><div class="fig image"><table id="Fig.1.6" border=1>
<caption>
<strong>Fig. 1.6.</strong> Clocks
</caption>
<tr><td><img src="clocks.png" alt="fig. 1.6"></td></tr>
</table></div></center>
<p>
The clocks tell you precisely where the playhead is. There are several clock types which can be cycled through by left-clicking. The following clock types are available:
</p>
<ol><li><span>Hours Minutes Seconds</span>
<li><span>Timecode</span>
<li><span>Sample</span>
<li><span>Bar Beat Tick</span>
</ol><h3 id="n:1.1.6.">1.1.6. Tempo Map</h3>
<center><div class="fig image"><table id="Fig.1.7" border=1>
<caption>
<strong>Fig. 1.7.</strong> The Tempo Map
</caption>
<tr><td><img src="tempomap.png" alt="fig. 1.7"></td></tr>
</table></div></center>
<p>
The tempo map serves a dual purpose. Firstly, it provides enough information about the musical structure of your project for Non-DAW to perform intelligent snapping and draw helpful measure lines. Secondly, the tempo map is communicated to other JACK clients at playback time via the JACK Timebase API, so that MIDI accompaniment can follow along to the tempo changes in your song.
</p>
<p>
Clicking on an empty part of the time or tempo sequences will prompt you for the parameters of a new time or tempo point to be inserted at that position. Hit <tt>Escape</tt> to cancel the insertion. Right-click on a time or tempo point to edit its value. Existing points can be dragged freely.
</p>
<h3 id="n:1.1.7.">1.1.7. Tracks</h3>
<center><div class="fig image"><table id="Fig.1.8" border=1>
<caption>
<strong>Fig. 1.8.</strong> A Track Header
</caption>
<tr><td><img src="track-header.png" alt="fig. 1.8"></td></tr>
</table></div></center>
<p>
Add a track to the timeline by pressing the <tt>A</tt> key. Right-clicking on the track header will bring up a context menu by which you can configure the number of channels used by this track. Click on the track name to change it. The <tt>T</tt>akes menu lists all the takes associated with a track. The circular record-enable button is used to arm a track for recording. Only armed tracks will be recorded onto when the master record-enable button on the transport is activated and the transport is started. The 'm' toggle button is mute, the 's' button is solo. Multiple tracks can be soloed at once. <tt>Shift+Mousewheel</tt> will adjust the track height. Remove a track by selecting 'Remove' from its context menu.
</p>
<h4 id="n:1.1.7.1.">1.1.7.1. Recording</h4>
<center><div class="fig image"><table id="Fig.1.9" border=1>
<caption>
<strong>Fig. 1.9.</strong> Recording onto a Track
</caption>
<tr><td><img src="recording.png" alt="fig. 1.9"></td></tr>
</table></div></center>
<p>
To initiate recording, first arm some tracks by toggling their record buttons, then toggle the global record-enable button on the transport. Recording will begin when you press play. During recording, the timeline darkens and refuses normal input. Regions being captured are colored bright red. The viewport will automatically follow the playhead as the recording progresses. Recording stops when you stop the transport or toggle the global record-button.
</p>
<h3 id="n:1.1.8.">1.1.8. Sequences</h3>
<p>
Sequence is the generic term used to describe all distinct sequences of objects on the timeline.
</p>
<h3 id="n:1.1.9.">1.1.9. Regions</h3>
<p>
Regions are the most common object on the timeline. Each region represents some portion of an audio source placed at some position in time. Since Non-DAW is non-destructive, regions only <b>represent</b> the source--altering a region does not affect the audio source in any way. Deleting a region does not delete the source--as other regions may still refer to it.
</p>
<div class=admonition>
<table width=100%>
<tr><td><em>Note:</em></td>
<td>If you decide, for whatever reason, that you no longer wish to retain unused
sources, run the `remove-unused-sources` script included with the program.
</td></table>
</div>
<p>
Try this one-liner to clean up many projects in parallel and reclaim disk space:
</p>
<div class="fig example"><table width=100%><tr><td><pre>
for i in ~/projects/*; do remove-unused-sources "$i" & done
</pre></td></tr>
</table></div>
<h4 id="n:1.1.9.1.">1.1.9.1. Editing</h4>
<h5 id="n:1.1.9.1.1.">1.1.9.1.1. Split</h5>
<p>
Position the mouse pointer where you would like the region split and perform <tt>Shift+Middle-click</tt>. This will divide the region at the mouse pointer.
</p>
<h5 id="n:1.1.9.1.2.">1.1.9.1.2. Duplicate</h5>
<p>
Drag a region (or selection) with the mousse while holding the <tt>Ctrl</tt> key to duplicate it.
</p>
<h5 id="n:1.1.9.1.3.">1.1.9.1.3. Delete</h5>
<p>
<tt>Ctrl+Right-click</tt> removes a region or selection from the timeline.
</p>
<h5 id="n:1.1.9.1.4.">1.1.9.1.4. Trim</h5>
<p>
Hold down <tt>Shift</tt> and click on part of a region with the left mouse button. This trims the region start to the position of the mouse pointer. Continue holding <tt>Shift</tt> and drag to continuously trim the region start point. Do the same with the right mouse button to trim the region end.
</p>
<h5 id="n:1.1.9.1.5.">1.1.9.1.5. Pan</h5>
<p>
Hold <tt>Ctrl+Shift</tt> and drag the region. Instead of moving on the timeline, the region will remain stationary as the audio source <i>behind</i> it is panned forward or back. This operation is particularly useful in conjunction wiht looped regions.
</p>
<h5 id="n:1.1.9.1.6.">1.1.9.1.6. Normalize</h5>
<p>
Hit <tt>N</tt> while a region is focused to normalize it (or <tt>Ctrl+Middle-click</tt>). Normalizing a region means automatically setting its gain as high as possible without exceeding the standard floating point audio dynamic range of +1 to -1 (corresponding to 0dBFS). Any peaks exceeding this range at this stage will appear in bright red.
</p>
<h5 id="n:1.1.9.1.7.">1.1.9.1.7. Fade</h5>
<center><div class="fig image"><table id="Fig.1.10" border=1>
<caption>
<strong>Fig. 1.10.</strong> A Region with Fades
</caption>
<tr><td><img src="fade-in-out.png" alt="fig. 1.10"></td></tr>
</table></div></center>
<p>
Each region has fade in and out curves. Position the mouse pointer over the desired fade-in end location and hit <tt>F3</tt> to set the fade-in duration. Position the mouse pointer over the desired fade-out start location and hit <tt>F4</tt> to set the fade-out duration. Right click on a region to bring up its context menu, then choose the type of curve for each fade. The following curves are available:
</p>
<ol><li><span>Linear</span>
<li><span>Sigmoid</span>
<li><span>Logarithmic</span>
<li><span>Parabolic</span>
</ol><h5 id="n:1.1.9.1.8.">1.1.9.1.8. Loop</h5>
<center><div class="fig image"><table id="Fig.1.11" border=1>
<caption>
<strong>Fig. 1.11.</strong> Looped region
</caption>
<tr><td><img src="looping.png" alt="fig. 1.11"></td></tr>
</table></div></center>
<p>
Instead of requiring you to duplicate a small region 100 times to achieve a looping effect, Non DAW supports looping directly. First, adjust the region duration to cover the amount of time you would like it to loop for. Then, position the mouse pointer over the first place the loop should repeat (i.e. the first bar line after the start of the region) and hit <tt>L</tt>. This will set the loop point for this region, which will be indicated by two white arrows. At playback, the portion of the region before the loop point will loop for the duration of the region.
</p>
<h3 id="n:1.1.10.">1.1.10. Annotation</h3>
<center><div class="fig image"><table id="Fig.1.12" border=1>
<caption>
<strong>Fig. 1.12.</strong> Annotations
</caption>
<tr><td><img src="annotations.png" alt="fig. 1.12"></td></tr>
</table></div></center>
<p>
Add an annotation sequence to a track by right-clicking on the track header to bring up the context menu, and choosing <i>Add annotation</i>. Any number of annotation sequences may be attached to each track. Click on an empty space in the sequence to add a new annotation point. Right click on the annotation point to rename it. Hold down shift and drag with the right mouse button to create a new annotation region of a given duration. Again, right click to edit the text. Only the first line of annotation region text will be displayed on the timeline. Annotation regions are useful for containing lyrics or other cues which have a definite duration. Annotation points are more appropriately used to denote points of interest or change.
</p>
<h3 id="n:1.1.11.">1.1.11. Automation</h3>
<center><div class="fig image"><table id="Fig.1.13" border=1>
<caption>
<strong>Fig. 1.13.</strong> Control Sequence
</caption>
<tr><td><img src="automation.png" alt="fig. 1.13"></td></tr>
</table></div></center>
<p>
Each track may have any number of control sequences attached to it. A control sequence comprises a series of points in time (X axis) and intensity (Y axis). Add a control sequence to a track by picking <i>Add control</i> from its context menu. A control sequence may be named by right clicking on it to bring up the context menu, then picking 'Rename'. The output of a control sequence is similar control voltages generated by analog equipment. A control sequence can be used to control anything that can accept CV style input. Useful targets include the Non Mixer, and SpiralSynthModular.
</p>
<p>
Click anywhere on the control sequence to add a new control point. Control points can be dragged around and selected just like other objects on the timeline. They can even be part of the same selection as regions, permitting you to move regions and control points together in lock-step.
</p>
</div>
</body>
</html>

286
doc/MANUAL.mu Normal file
View File

@ -0,0 +1,286 @@
! title Non DAW User Manual
! author Jonathan Moore Liles #(email,male@tuxfamily.org)
! date June 20, 2008
-- Table Of Contents
: User Manual
:: The Timeline Editor
/ Timeline Editor
< tle.png
The Timeline Editor is what you first see when you start the Non-DAW. Here
you will add tracks, make captures, and arrange regions.
Before you can add anything to the timeline, you must create a new project
(menu item `Project\/New`)
/ New Project Dialog
< new-project.png
::: Display Options
The display options, found in the `Options\/Display` submenu may be adjusted
to suit your needs. Set the color scheme, widget style, and other graphic
options to your liking. These options are global and affect all projects.
::: Navigation
:::: Sequences
A sequence is focused when you click on it. Focus can be moved back and forth
between sequences with `Tab` and `Shift-Tab`.
:::: Playhead
`Shift+Left` and `Shift+Right` move the playhead backward and forward one
beat, while `Ctrl+Shift+Left` and `Ctrl+Shift+Right` move it by bars.
::::: Within A Sequence
The focused sequence accepts additional movement commands with specific
relevance. `Ctrl+Left` moves the playhead to the beginning of the current or
previous object in the sequence. `Ctrl+Right` moves it to the beginning of
the next object in the sequence.
:::: Range
/ Selecting a range
< range.png
`Ctrl+[` moves the left range cursor (P1) to the position of the playhead.
`Ctrl+]` moves the right range cursor (P2) to the position of the playhead.
The range cursors can be set individually with the mouse by positioning the
pointer over the desired location and pressing `[` or `]`. Alternatively,
both may be set at once by holding `R` and left-click+dragging the selection
rectangle.
::: Projects
/ Project Info Dialog
< project-info.png
A Non-DAW project is a directory where Non-DAW keeps the journal, project
specific settings, notes, some meta-data, and, last but not least, your audio
sources. A project is completely self-contained. You can rename a project as
simply as:
> $ mv Project-A Project-B
Non-DAW projects can refer to audio sources outside of the project
directory--clips dropped onto the timeline from a file-manager, for instance.
These are not copied into the project by default. This allows the efficient
use of audio loop libraries, but introduces external dependencies. Beware
that if you ever move, remove, or change one of these external sources, it
will affect the Non-DAW projects referencing them.
/ Note:
{ To import all the external sources for a project, making it suitable for
{ distribution or archiving, use the `import-external-sources` script included
{ with the program.
:::: Settings
Project specific settings are found in the Project\/Settings submenu.
::: Transport
/ Transport Controls
< transport.png
The transport controls allow you to control the JACK transport from the
Timeline Editor. `Home` moves the playhead to 0 and `End` moves it to the
end of the project. `Space` toggles playback.
::: Clocks
/ Clocks
< clocks.png
The clocks tell you precisely where the playhead is. There are several clock
types which can be cycled through by left-clicking. The following clock types
are available:
+ Hours Minutes Seconds
+ Timecode
+ Sample
+ Bar Beat Tick
::: Tempo Map
/ The Tempo Map
< tempomap.png
The tempo map serves a dual purpose. Firstly, it provides enough information
about the musical structure of your project for Non-DAW to perform
intelligent snapping and draw helpful measure lines. Secondly, the tempo map
is communicated to other JACK clients at playback time via the JACK Timebase
API, so that MIDI accompaniment can follow along to the tempo changes in your
song.
Clicking on an empty part of the time or tempo sequences will prompt you for
the parameters of a new time or tempo point to be inserted at that position.
Hit `Escape` to cancel the insertion. Right-click on a time or tempo point to
edit its value. Existing points can be dragged freely.
::: Tracks
/ A Track Header
< track-header.png
Add a track to the timeline by pressing the `A` key. Right-clicking on the
track header will bring up a context menu by which you can configure the
number of channels used by this track. Click on the track name to change it.
The `T`akes menu lists all the takes associated with a track. The circular
record-enable button is used to arm a track for recording. Only armed tracks
will be recorded onto when the master record-enable button on the transport
is activated and the transport is started. The 'm' toggle button is mute, the
's' button is solo. Multiple tracks can be soloed at once. `Shift+Mousewheel`
will adjust the track height. Remove a track by selecting 'Remove' from its
context menu.
:::: Recording
/ Recording onto a Track
< recording.png
To initiate recording, first arm some tracks by toggling their record
buttons, then toggle the global record-enable button on the transport.
Recording will begin when you press play. During recording, the timeline
darkens and refuses normal input. Regions being captured are colored bright
red. The viewport will automatically follow the playhead as the recording
progresses. Recording stops when you stop the transport or toggle the global
record-button.
::: Sequences
Sequence is the generic term used to describe all distinct sequences of
objects on the timeline.
::: Regions
Regions are the most common object on the timeline. Each region represents
some portion of an audio source placed at some position in time. Since
Non-DAW is non-destructive, regions only *represent* the source--altering a
region does not affect the audio source in any way. Deleting a region does
not delete the source--as other regions may still refer to it.
/ Note:
{ If you decide, for whatever reason, that you no longer wish to retain unused
{ sources, run the `remove-unused-sources` script included with the program.
Try this one-liner to clean up many projects in parallel and reclaim disk space:
> for i in ~/projects/*; do remove-unused-sources "$i" & done
:::: Editing
::::: Split
Position the mouse pointer where you would like the region split and perform
`Shift+Middle-click`. This will divide the region at the mouse pointer.
::::: Duplicate
Drag a region (or selection) with the mousse while holding the `Ctrl` key to
duplicate it.
::::: Delete
`Ctrl+Right-click` removes a region or selection from the timeline.
::::: Trim
Hold down `Shift` and click on part of a region with the left mouse button.
This trims the region start to the position of the mouse pointer. Continue
holding `Shift` and drag to continuously trim the region start point. Do the
same with the right mouse button to trim the region end.
::::: Pan
Hold `Ctrl+Shift` and drag the region. Instead of moving on the timeline, the
region will remain stationary as the audio source /behind/ it is panned
forward or back. This operation is particularly useful in conjunction wiht
looped regions.
::::: Normalize
Hit `N` while a region is focused to normalize it (or `Ctrl+Middle-click`).
Normalizing a region means automatically setting its gain as high as possible
without exceeding the standard floating point audio dynamic range of +1 to -1
(corresponding to 0dBFS). Any peaks exceeding this range at this stage will
appear in bright red.
::::: Fade
/ A Region with Fades
< fade-in-out.png
Each region has fade in and out curves. Position the mouse pointer over the
desired fade-in end location and hit `F3` to set the fade-in duration.
Position the mouse pointer over the desired fade-out start location and hit
`F4` to set the fade-out duration. Right click on a region to bring up its
context menu, then choose the type of curve for each fade. The following
curves are available:
+ Linear
+ Sigmoid
+ Logarithmic
+ Parabolic
::::: Loop
/ Looped region
< looping.png
Instead of requiring you to duplicate a small region 100 times to achieve a
looping effect, Non DAW supports looping directly. First, adjust the region
duration to cover the amount of time you would like it to loop for. Then,
position the mouse pointer over the first place the loop should repeat (i.e.
the first bar line after the start of the region) and hit `L`. This will set
the loop point for this region, which will be indicated by two white arrows.
At playback, the portion of the region before the loop point will loop for
the duration of the region.
::: Annotation
/ Annotations
< annotations.png
Add an annotation sequence to a track by right-clicking on the track header
to bring up the context menu, and choosing /Add annotation/. Any number of
annotation sequences may be attached to each track. Click on an empty space
in the sequence to add a new annotation point. Right click on the annotation
point to rename it. Hold down shift and drag with the right mouse button to
create a new annotation region of a given duration. Again, right click to
edit the text. Only the first line of annotation region text will be
displayed on the timeline. Annotation regions are useful for containing
lyrics or other cues which have a definite duration. Annotation points are
more appropriately used to denote points of interest or change.
::: Automation
/ Control Sequence
< automation.png
Each track may have any number of control sequences attached to it. A control
sequence comprises a series of points in time (X axis) and intensity (Y
axis). Add a control sequence to a track by picking /Add control/ from its
context menu. A control sequence may be named by right clicking on it to
bring up the context menu, then picking 'Rename'. The output of a control
sequence is similar control voltages generated by analog equipment. A control
sequence can be used to control anything that can accept CV style input.
Useful targets include the Non Mixer, and SpiralSynthModular.
Click anywhere on the control sequence to add a new control point. Control
points can be dragged around and selected just like other objects on the
timeline. They can even be part of the same selection as regions, permitting
you to move regions and control points together in lock-step.
# :: The Mixer
# ::: Tracks
# ::: Panning

24
doc/Makefile Normal file
View File

@ -0,0 +1,24 @@
SRCS=$(wildcard *.mu)
OBJS=$(SRCS:.mu=.html)
%.html: %.mu
@ echo Mupping $<...
@ mup.wrapper html $<
.PHONY: all clean
all: $(OBJS)
upload: all
@ ln -sf OVERVIEW.html index.html
@ rsync -L mup.css MANUAL.html index.html *.png ssh.tuxfamily.org:/home/non/non-daw.tuxfamily.org-web/htdocs
@ rm -f index.html
install:
@ mkdir -p $(DOCUMENT_PATH)
@ cp $(OBJS) *.png mup.css ../COPYING $(DOCUMENT_PATH)
@ ln -sf $(PIXMAP_PATH)/logo.png $(DOCUMENT_PATH)
clean:
rm -f $(OBJS)

231
doc/OVERVIEW.html Normal file
View File

@ -0,0 +1,231 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<meta name="generator" content="Generated by MUP v3.5">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link type="text/css" rel="stylesheet" href="mup.css">
<title>The Non DAW</title>
</head>
<body>
<div id=cover>
<h1>The Non DAW</h1>
<h3></h3>
<address>
Jonathan Moore Liles <a href="mailto:male@tuxfamily.org">&lt;male@tuxfamily.org&gt;</a><br>
March 1, 2008<br>
</address><img src="logo.png" alt="logo"><hr></div>
<div id=body>
<div id=toc>
<h1 id=toc>Table Of Contents</h1>
<ul>
<li><a href="#n:1.">1. Overview</a>
<ul><li><a href="#n:1.1.">1.1. Description</a>
<li><a href="#n:1.2.">1.2. What it is not</a>
<li><a href="#n:1.3.">1.3. What is a DAW?</a>
<li><a href="#n:1.4.">1.4. Why write another one?</a>
<li><a href="#n:1.5.">1.5. Features</a>
<ul><li><a href="#n:1.5.1.">1.5.1. Journaled Projects</a>
<li><a href="#n:1.5.2.">1.5.2. Non-destructive editing</a>
<li><a href="#n:1.5.3.">1.5.3. Unlimited tracks</a>
<li><a href="#n:1.5.4.">1.5.4. Unlimited takes</a>
<li><a href="#n:1.5.5.">1.5.5. Cross-fades</a>
<li><a href="#n:1.5.6.">1.5.6. Automation</a>
<li><a href="#n:1.5.7.">1.5.7. Time/tempo mapping</a>
</ul><li><a href="#n:1.6.">1.6. Components</a>
<ul><li><a href="#n:1.6.1.">1.6.1. Timeline</a>
</ul></ul><li><a href="#u:1.">What does freedom have to do with this software?</a>
<li><a href="#u:2.">Donations</a>
<li><a href="#u:3.">Distribution</a>
<li><a href="#u:4.">Requirements</a>
<li><a href="#u:5.">Community</a>
</ul></ul><hr></div>
<h1 id="n:1.">1. Overview</h1>
<h2 id="n:1.1.">1.1. Description</h2>
<p>
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.
</p>
<p>
Please see the <a class=ext href="MANUAL.html">manual</a> for more information.
</p>
<h2 id="n:1.2.">1.2. What it is not</h2>
<p>
Non-DAW is <b>not</b> a wave editor. It is not a beat slicer. It is not a granular synthesis engine. It is <b>not</b> a clone of some proprietary DAW. It is not an <i>insert name of proprietary audio thing here</i> killer. It is <b>not</b> limiting and restricting. It is <b>not</b> a monolithic DAW with internal mixing or EQ DSP. Non-DAW is intended to be one tool among many in your Linux audio toolbox.
</p>
<h2 id="n:1.3.">1.3. What is a DAW?</h2>
<p>
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.
</p>
<p>
In this author's opinion, a DAW comprises the following functionality:
</p>
<ul><li><span>Non-linear, non-destructive arrangement of portions of audio clips.</span>
<li><span>Tempo and time signature mapping, with editing operations being closely aligned to this map.</span>
</ul><p>
Since Non uses JACK for IO, some things traditionally considered to be within the scope of a monolithic DAW can be pared out:
</p>
<ul><li><span>Signal routing</span>
<li><span>Audio mixing</span>
<li><span>Hosting of plugins</span>
</ul><h2 id="n:1.4.">1.4. Why write another one?</h2>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<h2 id="n:1.5.">1.5. Features</h2>
<p>
Non-DAW shares many features in common with other, similar projects. However, Non-DAW's unique architecture permits suprising new functionality.
</p>
<h3 id="n:1.5.1.">1.5.1. Journaled Projects</h3>
<p>
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.
</p>
<p>
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.)
</p>
<p>
This has a number of highly desirable consequences. Among them:
</p>
<ol><li><span>Zero time spent 'saving' projects.</span>
<li><span>No need to 'save' projects manualy.</span>
<li><span>No need for CPU and RAM wasting 'autosave' function.</span>
<li><span>In the (unlikely) event of a crash, at most *one* transaction (user action) may be lost, and the project will *not* be invalidated.</span>
<li><span>Unlimited undo--potentially going back to the very moment the project was created (state of the template it was based on).</span>
<li><span>Undo history requires no additional RAM.</span>
<li><span>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).</span>
</ol><p>
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'.
</p>
<h3 id="n:1.5.2.">1.5.2. Non-destructive editing</h3>
<p>
Sound sources (audio files) are represented by <i>regions</i>. 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).
</p>
<h3 id="n:1.5.3.">1.5.3. Unlimited tracks</h3>
<p>
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 may also have any number of annotation and control sequences associated with it.
</p>
<h3 id="n:1.5.4.">1.5.4. Unlimited takes</h3>
<p>
A <i>take</i> is a sequence of regions. Each track has <i>current take</i>, 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).
</p>
<h3 id="n:1.5.5.">1.5.5. Cross-fades</h3>
<p>
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.
</p>
<h3 id="n:1.5.6.">1.5.6. Automation</h3>
<p>
Each track can have associated with it any number of <i>control sequences</i>, a subset of which may be visible at any one time. Each control sequence comprises a series of <i>control points</i>, 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.
</p>
<h3 id="n:1.5.7.">1.5.7. Time/tempo mapping</h3>
<p>
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.
</p>
<h2 id="n:1.6.">1.6. Components</h2>
<p>
The Mixer and the Timeline are separate programs, connected through JACK.
</p>
<h3 id="n:1.6.1.">1.6.1. Timeline</h3>
<p>
All operations on the timeline are journaled, and therefore reversible.
</p>
<p>
The following data belong to the timeline:
</p>
<dl>
<dt><em>Tracks and Takes</em></dt>
<dd>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 <i>Takes</i>. 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 Seqeunces attached to it, in which case all control seqeunces generate control output unless disconnected. The height of a track may be adjusted and a track can be muted, soloed, or record-enabled.</dd>
<dt><em>Regions</em></dt>
<dd>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.</dd>
<dt><em>Control Points</em></dt>
<dd>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).</dd>
<dt><em>Time and Tempo Points</em></dt>
<dd>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.</dd>
<dt><em>Annotation Points</em></dt>
<dd>Cue points are textual markers on the timeline. Common names for cue points include "Verse 1", "Bridge", etc.</dd>
<dt><em>Annotation Regions</em></dt>
<dd>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.</dd>
</dl>
<h1 id="u:1.">What does freedom have to do with this software?</h1>
<p>
Non is <i>free software</i>. This means, briefly, that you are free use it as <b>you</b> 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 <i>copyleft</i>, which means that you are free from the threat of some other entity taking over and denying you the above freedoms. The <i>free</i> part of <i>free software</i> doesn't refer to price any more than the <i>free</i> in <i>free speech</i> does.
</p>
<p>
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:
</p>
<p>
<a class=ext href="http://www.fsf.org/licensing/essays/free-sw.html">What is Free Software?</a> <a class=ext href="http://www.fsf.org/licensing/essays/copyleft.html">What is Copyleft?</a>
</p>
<h1 id="u:2.">Donations</h1>
<p>
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!"
</p>
<p>
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.
</p>
<p>
<a class=ext href="http://non.tuxfamily.org/donation.html">Make a donation</a>
</p>
<h1 id="u:3.">Distribution</h1>
<p>
Development of the Non-DAW can be followed with Git:
</p>
<div class="fig example"><table width=100%><tr><td><pre>
git clone git://git.tuxfamily.org/gitroot/non/daw.git
</pre></td></tr>
</table></div>
<p>
There are no pre-compiled binaries available.
</p>
<h1 id="u:4.">Requirements</h1>
<p>
The following libraries are required to build Non-DAW
</p>
<ul><li><span>FLTK >= 1.1.8 (with `fluid`)</span>
<li><span>JACK >= 0.103.0</span>
<li><span>libsndfile >= 0.18.0</span>
</ul><p>
The following are optional:
</p>
<ul><li><span>LASH >= 0.5.4</span>
</ul><h1 id="u:5.">Community</h1>
<p>
Feel free to drop by the <tt>#non</tt> channel on irc.freenode.net.
</p>
<p>
There is a mailing list <tt>non-daw@lists.tuxfamily.org</tt>.
</p>
<p>
To subscribe, send a message with the subject 'subscribe' to <a href="mailto:non-daw-request@lists.tuxfamily.org">&lt;non-daw-request@lists.tuxfamily.org&gt;</a>.
</p>
<p>
You can also browse the <a class=ext href="http://listengine.tuxfamily.org/lists.tuxfamily.org/non-daw/">archive</a>.
</p>
</div>
</body>
</html>

384
doc/OVERVIEW.mu Normal file
View File

@ -0,0 +1,384 @@
! 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,MANUAL.html,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:
* 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 suprising 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
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.
#::: External control
#
# MIDI and OSC control allows mixer and automation to be controlled by eg. a
# BCF2000.
:: 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 Seqeunces attached to it,
= in which case all control seqeunces 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
#
# Mix data is stored separately from timeline data and is not journaled. This
# makes it possible to do multiple mixes of a single project and switch
# between them at will.
#
# 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 following data belong to the mixer:
#
#* track configuration (number of input channels, number of mix channels)
#* track gain\/panning (controllable via automation)
#* plugins (controllable via automation)
#
#:::: Panning
#
# The panning system in Non is different from other DAWs. In other DAWs, like
# Ardour, each track has a number of inputs and a (larger) number of outputs
# and (stereo only) panning is performed by the traditional, but inferior,
# intensity method.
#
# In Non, each track has a panner, yes, but this does not actually affect the
# track's output. The actual 'panning' (more properly, spatialization) is
# performed for all tracks at the master output stage. Outputs from all tracks
# are encoded into something similar to Ambisonic B-Format, using the spacial
# locations from each track panner. This signal is then (optionally) decoded
# to a specific speaker layout form the master output signals. Rendering can
# be done either to the universal .amb format or any fixed configuration of
# speakers (Quad, 5.1, 7.1, 10.1). A .amb file contains a complete soundfield
# and can later be reduced to any fixed layout format, or even other types of
# Ambisonic encodings.
#
# What this means is that, even for stereo mixes, the soundfield produced by
# the output will be more stable, wider, and more realistic than anything
# intensity panning can produce. It also means that moving a stereo mix to
# surround is quite straight forward, and that surround mixes produced with
# Non will be future-proof and far superior to anything achievable with 2D
# intensity panning. This single feature clearly sets Non-DAW apart from
# other (even proprietary) offerings.
#
#::: Router
#
# The router is simply an interface to the JACK port routing. It's a slightly
# more practical than what you get from QJackCtl or Patchage.
#
#* jack port routing.
#
#::: Plugin Host
#
# Plugins are handled differently in Non-DAW versus other DAWs. The author has
# enough first hand experience with LADSPA to know that plugins cannot be
# trusted in a sensitive process. They fail, they crash, they stop responding.
# For a DAW like Ardour, which uses plugins as, well, plugins, this means that
# a single malfunctioning plugin can bring your entire project to its
# knees--this is clearly an unacceptable interruption of the creative process.
#
# Aside from these stability issues, plugins present a conceptual problem.
# They require each 'host' to implement a routing and control system similar,
# but inferior to, what JACK already provides to fully fledged clients.
# Likewise, fully fledged clients may display any GUI they like--a long
# standing gripe in the LAD community being the lack of any provision for
# wood-grain pixmaps, fan-sliders, and antialiased knobs in the LADSPA
# standard.
#
# Until such time as LAD sees the light on this and other issues requiring the
# application of thought and reason (don't hold your breath), Non will
# continue to employ the following compromise:
#
# Plugins are hosted externally, in a dedicated host process, and routing
# between them is accomplished via the JACK connection graph. In this
# dedicated plugin host, we enforce some saner forms of interoperability than
# the hoards of LAD could ever conceive. We give each plugin the appropriate
# input and output ports, and define OSC control points for each plugin
# parameter. We save and restore settings (without resorting to the patron
# saint of idiots; XML).
#
# Using plugins in this way has the following advantage/disadvantage:
#
# Non-DAW may create more JACK ports than something like Ardour. *But*, Non
# eliminates the need for stupid, buggy, irrational in-host routing such as
# the rats-nest of connections one gets with sends/inserts in something like
# Ardour.
#
# Truthfully, it is absurd for a JACK based DAW to re-implement nearly all of
# JACK routing in-process simply for the sake of LADSPA.
#-----
#
#: Notes
#
#* Why not use SpiralSynthModular (SSM) as our plugin host?
# . In order for this to work SSM would need to be modified to
# . support the following: LASH, OSC control of plugins, and just
# . generally work with Jack. The OSS driver could be removed
# . entirely. And the GUI optimized in order to make running
# . multiple instances less taxing. Alternatively, the GUI could
# . be restructured to allow a single SSM to host the plugins for
# . all tracks.
; 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
* FLTK >= 1.1.8 (with `fluid`)
* JACK >= 0.103.0
* libsndfile >= 0.18.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).

BIN
doc/annotations.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
doc/automation.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
doc/clocks.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

BIN
doc/fade-in-out.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
doc/looping.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

449
doc/mup.css Normal file
View File

@ -0,0 +1,449 @@
/* Example CSS Style for MUP */
a:link {
color: yellow;
}
a:visited {
color: olive;
}
a:active {
color: white;
}
a:link:hover {
text-decoration: underline;
}
/* #(url) */
a.ext:link {
color: red;
text-decoration: none;
border-bottom: dashed silver 1;
}
a.ext:visited {
color: darkred;
border-bottom: dashed silver 1;
text-decoration: none;
}
/* #(ref) */
a.int:link {
border-bottom: dashed silver 0.15em;
}
a.int:link:hover {
text-decoration: none;
color: white;
}
/*
a[href^="#"]:link {
border-bottom: dashed silver 0.15em;
}
a[href^="#"]:link:hover {
text-decoration: none;
color: white;
}
*/
p:contains("Warning:") {
background: #d00;
color: white;
border: dotted gray 0.5em;
display: block;
}
/* First letter of first paragraph of every chapter */
/*
h1 + p:first-letter {
text-transform: uppercase;
float: left;
line-height: 0.8em;
font-size: 350%;
font-family: Serif;
letter-spacing: 0;
margin-right: 0.1em;
margin-top: 0.1em;
border: solid gray 1px;
padding: 1px;
color: #d00;
text-shadow: #666 3px 3px 3px;
}
*/
/* First paragraph of every chapter */
/*
h1 + p {
text-indent: 0;
}
*/
/* cover */
#cover * {
background: transparent;
}
#cover {
position: relative;
background: #da0;
color: black;
text-align: center;
margin: 0;
padding: 0.5em;
}
#cover h1, #cover h3 {
text-shadow: #444 0.2em 0.2em 0.2em;
color: white;
border: none;
letter-spacing: 0.2em;
line-height: 0.8em;
margin-left: 2em;
margin-right: 2em;
}
#cover h1:before, #cover h1:after {
content: "::";
font-size: 300%;
color: black;
}
#cover h1:before {
position: absolute;
top: 0.2em;
left: 0.1em;
}
#cover h1:after {
position: absolute;
top: 0.2em;
right: 0.1em;
}
#cover hr {
display: none;
}
hr:first-child {
display: none;
}
hr {
height: 0.2em;
background: #555;
color: #555;
margin-left: 0.5em;
}
#cover a:visited {
color: black;
}
/* endnote */
#endnote {
color: black;
}
/* TOC */
#toc {
position: relative;
}
#toc hr {
}
#toc h1 {
}
#toc ul {
font-size: 125%;
font-weight: bold;
margin-bottom: 1em;
}
#toc ul ul {
font-size: 90%;
font-weight: normal;
margin-bottom: 0;
}
#toc li {
list-style: none;
}
#toc a:link {
border-bottom: 0;
}
body {
margin: 0;
background: #222;
color: white;
font-family: Arial, sans-serif;
}
/* */
#body {
position: relative;
margin: 0.5em;
padding: 0.5em;
}
/* ;, : */
h1 {
color: #ff0;
border-bottom: solid #444 0.1em;
}
/* ::, :::, ::::, :::::, :::::: */
h2, h3, h4, h5, h6 {
color: #dd0;
}
/* tables, figures */
.fig caption {
color: gray;
text-align: center;
/* Required for Mozilla */
margin: auto;
}
.fig table {
border: none;
margin: auto;
/* border-collapse: collapse; */
}
/* / */
.fig.table th {
border: none;
background: gray;
color: black;
}
/* [ */
.fig.table td {
border: none;
background: silver;
color: black;
padding-left: 1em;
padding-right: 1em;
padding-top: 0.2em;
padding-bottom: 0.2em;
}
/* < */
.fig.image table {
border: dashed silver 0.2em;
background: transparent;
/* Every browser should support border radii */
-moz-border-radius: 0.5em;
border-radius: 0.5em;
}
.fig.image tr, .fig.image td {
border: none;
background: transparent;
padding: 0;
}
/* */
p {
margin-right: 2%;
text-align: justify;
text-indent: 1em;
}
/* > */
.example *
{
background: transparent;
}
.example table
{
margin: 0;
padding: 0;
table-layout: fixed;
width: 100%;
caption-side: top;
overflow: auto;
}
.example caption
{
caption-side: top;
}
.example {
}
.example p {
display: inline;
margin: 0;
padding: 0;
text-align: center;
}
.example pre {
margin-top: 0;
font-family: Monospace;
padding: 1em;
border: dashed 0.3em gray;
background: #111;
color: white;
display: block;
overflow: auto;
/* Every browser should support border radii */
-moz-border-radius: 0.5em;
border-radius: 0.5em;
}
/* " */
/*
.quote:before {
float: left;
font-size: 500%;
content: "\201C";
}
*/
/*
blockquote:after {
content: "\201D";
}*/
.quote blockquote {
padding: 0.5em;
margin-left: 0.5em;
font-family: Serif;
border-left: solid 0.4em gray;
/* background: #333; */
color: white;
}
/* ^ */
small {
/*
color: silver;
font-size: 50%;
*/
}
.footnote p {
color: silver;
margin: 0;
}
/* Popup footnotes */
.footnote p {
display: none;
}
.footnote p:target {
display: block;
overflow: auto;
position: fixed;
left: auto;
bottom: 0;
right: 0;
max-width: 50%;
border: solid 0.3em white;
-moz-border-radius: 0.5em;
background: black;
padding: 0.2em;
}
/* { */
.admonition * {
background: transparent;
color: white;
}
.admonition dl
{
display: table;
margin: 0;
padding: 0;
background: #333;
border: dotted black 0.3em;
width: 90%
margin-top: 0.5em;
margin-bottom: 0.5em;
}
.admonition dt
{
display: table-cell;
vertical-align: center;
border-right: solid silver 0.4em;
font-weight: bold;
font-size: 115%;
font-family: Serif;
background: gray;
width: 0;
text-shadow: black 0.15em 0.15em 0.15em;
}
.admonition dd
{
padding-left: 0.4em;
display: table-cell;
width: 100%;
text-align: justify;
}
.admonition table
{
margin: 0;
padding: 0;
background: #333;
border: dotted black 0.3em;
width: 90%
margin-top: 0.5em;
margin-bottom: 0.5em;
}
.admonition td {
width: 100%;
text-align: justify;
}
.admonition td:first-child:contains("Warning:") {
background: #900;
}
.admonition td:first-child:contains("Caution:") {
background: #960;
}
.admonition td:first-child:contains("Note:") {
background: #690;
}
.admonition td:first-child {
border-right: solid silver 0.4em;
font-weight: bold;
font-size: 115%;
font-family: Serif;
background: gray;
width: 0;
text-shadow: black 0.15em 0.15em 0.15em;
}
/* #(b) */
/* b { color: olive; } */
/* #(c) */
tt {
color: #7f0;
}
/* ! keywords ... */
p em {
color: gray;
font-style: normal;
font-weight: bold;
}
/* *, + */
/* Bullet, numbe */
li {
color: #f0f;
}
/* Text */
li span, li p {
color: white;
}
li p {
color: red;
display: block;
}
ul {
list-style-type: square;
}
dl {
margin-left: 2%;
margin-top: 1em;
}
/* = */
dt {
background: #181818;
padding: 0.2em;
font-variant: small-caps;
font-weight: bold;
color: #f0f;
}
dd {
color: white;
text-align: justify;
margin-right: 5%;
}
dt a:link, dt a:visited {
color: #f0f;
}
dt a:link:hover {
color: silver;
text-decoration: underline;
}

BIN
doc/new-project.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

BIN
doc/project-info.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

BIN
doc/range.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
doc/recording.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
doc/tempomap.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
doc/tle.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

BIN
doc/track-header.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
doc/transport.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB