N-Chains Userguide
for nchains-0.0.1-pre-004

 
 

0.1.  COPYRIGHT

Copyright (c) 2009 Nils Doormann. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled “GNU-Free-Documentation” on page §.

Contents

 0.1  COPYRIGHT
 0.2  Introduction
 0.3  About N-Chains
  0.3.1  Implementation Concept
   0.3.1.1  The Difference between Tracks and Chains
  0.3.2  About this Book
  0.3.3  Obtaining Documetation
 0.4  Download and Installation
  0.4.1  Getting N-Chains
  0.4.2  Requirements
  0.4.3  Installation
  0.4.4  Problems during installation
 0.5  Invoking N-Chains
  0.5.1  Ways to Start Up
  0.5.2  Startup Options
 0.6  The User Interface - An Overview
  0.6.1  The Header
  0.6.2  The Chain List
  0.6.3  The Info Area
  0.6.4  The Footer
 0.7  Using N-Chains
  0.7.1  Adding Audio Input to a Chain
  0.7.2  Setting the Chain Name
  0.7.3  Playat, Select, Length
 0.8  Shortcuts
 0.9  How N-Chains talks to Ecasound
 0.10  Release Version Cycle
  0.10.1  Release Versions
  0.10.2  Version Numbering
 0.11  GNU Free Documentation License

0.2.  Introduction

Welcome to the N-Chains User Guide.

Back in the days of 1995, when I moved from my student appartment to a factory floor in Cologne, I found myself sitting in front of my old 386 trying to get something done with an old Samplitude. Just like Vienna, the sound font editor, Samplitude was an add-on included with the SoundBlaster AWE 32 card package. Although I didn’t really have a clue of all the features of Samplitude much less of the workflows of sound editing in general, I felt the wish to be able to have influence on some features within the sound editing environment on my machine. To make it short, during the years I tried almost all kind of music editing programs on different systems, but what I was really looking for was an extendable environment. Because of several circumstances I came across Linux and the GNU build system, which gave me an idea of how to unfold. However, years passed by and I discovered Ecasound. I still wonder why I haven’t found it earlier, but anyway, it turned out to be the thing that I had always had been looking for! Nowadays, I basically use Ecasound from command line embedded in a shell script, which works perfectly for me. The fact, that there is no real time control of effect parameters doesn’t really hurt, in fact, it forces me to think twice about the meaning of a parameter change and instead concentrate on listening to the mixing sound. Anyway, there are still use cases left like, for instance, solo-ing a chain - which basically means to mute all other chains - that need little workaround or make some real-time control helpful: From within my shell script environment, setting a chain to solo means to comment out all the other lines that represent a chain. Not really a big deal, but it starts annoying you when doing this several times while working on a project with more than, say 4 chains. Well, there are other use cases as well, like recalculating snippet offsets or the like. I started thinking about a handy tool to compensate all these use cases, so this is why I decided to start developing N-Chains. Its featureset is totally driven by personal motivation and by no means perfect or even complete. I really came off with something like: oh, lets have this and that and oh... yes, we could do this...and so on and let’s see what it is going to be. I chose the curses environment, because I like it and I like the thought of using the machine for audio data processing when audio processing instead of image data processing when doing audio processing. You might agree or not.

This book is intended to make you familiar with N-Chains for using it as a sound processing environment. If you like Ecasound or Linux or the terminal look-and-feel, this might be something for you. If you are a developer and interested in extending the functionality of N-Chains, please have a look at the README file that comes with the software package or go to http://nchains.sourceforge.net or contact me via e-mail or subscribe to the N-Chains mailing list to discuss your suggestion.

This book is still under contruction and is far from being perfect. If you would like to contribute, please go to http://nchains.sourceforge.net and read the infos within the documentation section.

Cologne 06.06.2009, Nils Doormann

0.3.  About N-Chains

N-Chains is a console-based frontend to Kai Vehmanen’s wonderful audio processing environment Ecasound1 . The development of N-Chains is intended to offer you some real-time and intuitive easy-to-use capabilities while following the concepts of Ecasound. It aims to be a slim application that can be controlled by simple keyboard shortcuts without the overhead of graphical representation.

To get an idea of what this means in practice, have a look at the following example. While a chain set up on command line would basically look like this:

-a:mychain -i:input.wav -o:alsa

the commands to change the input and output of a chain in N-Chains would be typing in “i”, for specifying a new audio input for the current selected chain and “o” for a new audio output device respectively. To alter the chain name, one would type “a”, because “-a” is the parameter specifier for the chain name in ecasound and so on.

Another idea behind N-Chains is purity. It is nothing more than it aims to be. Just type in “l” at your favourite position and it will be added to the locator list. Just say “P” for playat and type in your offset, “C” for select and “D” for the duration of your snippet and the typed in positions of the chain will be updated.

0.3.1.  Implementation Concept

0.3.1.1 The Difference between Tracks and Chains

There exist no “tracks”, because this isn’t Cubase or Logic, but an Ecasound frontend, so what we deal with is “chains”. This is important, because the main difference within an audio sequencing program like Cubase or similar is, that you can have more than one virtual audio input (or snippet) per track. This concept isn’t true for Ecasound, because you always have one audio input and one audio output connected to a chain. Now, when implementing an ecasound client, you have to decide wether to

To me, all of the above seems doesn’t seem very effective, so I decided to purly adopt the concept of dealing with chains Ecasound for N-Chains.

0.3.2.  About this Book

This book is intended to make you familiar with the every-day usage of N-Chains in its current version. This document refers to release version 0.0.1-pre-004 of N-Chains, future releases of N-Chains will have improved functionality, so if you have another program version than the one this book refers to, you are strongly advised to get yourself an appropriate documentation release.

0.3.3.  Obtaining Documetation

This book is part of the official N-Chains release, so you might find the appropriate documentation within the doc subdirectory of your downloaded nchains release package. If not, take a look at http://nchains.sourceforge.net for the correct version.

0.4.  Download and Installation

0.4.1.  Getting N-Chains

You can get the latest release from http://sourceforge.net/projects/nchains which is the N-Chains project homepage. Older releases might be available ther as well.

If you are interested in getting a current development snapshot of N-Chains you should download via anonymous CVS:

cvs -z3 -d:pserver:anonymous@nchains.cvs.sourceforge.net:/cvsroot/nchains \ 
checkout -P nchains

0.4.2.  Requirements

You need a working build system on your machine (like gcc and friends). You also need the ncurses installed. Audio libraries or similar features that can be enabled during compilation of ecasound such as alsa, oss, jack or whatever relate either to the Ecasound compilation process or usage of Ecasound and are not necessary to compile N-Chains.2

To run N-Chains as an Ecasound client, you will need Ecasound >= 2.6.0. You can type ecasound --version in order to determine which version of ecasound you have.

0.4.3.  Installation

In order to install N-Chains from source, download the latest package available from http://nchains.sourceforge.net. See section Getting N-Chains on the current page for details.

Unpack the downloaded package to a location of your choice as follows the usual way:

gunzip < nchains-0.0.1-pre-004.tar.gz |tar -xf -

Then, change into the nchains directory:

cd nchains-0.0.1-pre-004

Follow the instructions from the INSTALL file. The typical installation procedure would be:

./configure 
make 
su (to root) 
make install

That should be it.

0.4.4.  Problems during installation

If you encounter problems during the installation process, depending on the process state, either the console output or config.log file might give you information on what went wrong. FIXME: INSTALL file?

0.5.  Invoking N-Chains

Ecasound offers the capability to run as a tcp server. N-Chains, on the other hand, acts as a client application to a running server instance of Ecasound. This implies that there must be an Ecasound server running that N-Chains can connect to, which can be achieved in serveral ways as described in the following paragraphs.

0.5.1.  Ways to Start Up

You can either start an Ecasound server instance by hand on commandline and then let N-Chains connect to, or you can initialize a server startup during N-Chains startup. The latter is preferred while working on a local machine. However, we will show both startup methods. Since N-Chains version 0.0.1-pre-002, the initialization of Ecasound as a server through N-Chains is possible. In earlier versions you’ll have to start the Ecasound server by hand.

To start an Ecasound server instance during N-Chains startup use the -s option of N-Chains:

nchains -s

To start Ecasound as a server by hand, type:

ecasound --server -K

Ecasound will now listen to connections on its default tcp port 2868. You can watch the server instance running with the command “netstat -tuneap”. It should output a line like this:










Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program Name









tcp 0 0 0.0.0.0:2868 0.0.0.0:* LISTEN 1000 15447 4659/ecasound









As you can see, the Ecasound server uses the TCP protocol, it is in state LISTEN, which means, it waits for connections on port 2868 (Local Address column).

Now, we can start N-Chains without any parameters, because the default is to connect on port 2868 on localhost, the host and port our Ecasound server instance is currently running on. To start N-Chains, open another terminal window and type:

/usr/local/bin/nchains

which will start nchains with a default of 8 chains already set

PIC

0.5.2.  Startup Options

To get a list of all startup options avaliable, type

/usr/local/bin/nchains -h

This will output a list of all commandline options available for N-Chains:

-c <csname>
 
Work on chain setup name csname. [nchains]

-d
 
Turn debugging on. [no]
-h
 
Display a short help message and exit.
-H <host>
 
The host name where the ecasound server runs on and nchains should connect to. This option is ignored when -s is specified. [localhost]
-n <num>
 
Set the number of chains for the new project.
-p <port>
 
The port where nchains should connect to. [2868]
-s
 
Try starting ecasound server on local machine. [no]

0.6.  The User Interface - An Overview

The user interface is devided into four main areas of information each of which is described in detail below:

  1. The Header
  2. The Chain List
  3. The Info
  4. The Footer

0.6.1.  The Header

PIC

The red-marked area on the picture above is called the Header. Its main purpose is representing some sort of column headline. The meaning of each column field is described below, information about their specific usage can be found in the next subsection.

Chain Name
The name of the chain in the chain field below (FIDDLE, GUITAR etc..)
i
 
The audio input. If a chain has an audio input attached to it, a yellow “I” will appear, similarly to the field right ahead, “o”, which stands for audio output.
o
 
The audio output. In the example above the green “O” indicates that there is an audio aoutput attached to each chain.
M
 
The chain muting state. A white “M” on red background (as above) indicates that the chain is muted indirectly, because of the Solo-State of the first chain (FIDDLE). If a chain is muted directly the field would show up a red M only.
S
 
The chain solo state.
c
 
Channel copy. If on (default, indicated by a blue “X”), the chain operator chcopy:1,2 is activatd on the specific chain.
v
 
Volume setting, equals to -ea chain operator of Ecasound.
p
 
Panning. This value influences the Normal pan chain operator
Playat
 
This is the play-at-time value of the playat feature of an audio input3 . Use this parameter for moving audio inputs on the timeline. See section Playat, Select, Length on page § for details on how these values are recalculated on manual changes.
Select
 
This is the start-time value of the select feature of an audio input4 . See section Playat, Select, Length on page § for details on how these values are recalculated on manual changes.
Length
 
This is the duration value from the above said. See section Playat, Select, Length on page § for details on how these values are recalculated on manual changes.

0.6.2.  The Chain List

PIC

The marked area on the picure above shows the chain list. We have three chains in our project, named FIDDLE, GUITAR and BODHRAN. The FIDDLE chain is set to solo, which is indicated by the yellowish “S” in the S-column, thus the other chains being muted.

0.6.3.  The Info Area

The Info area follows the the chain list as you can see in the following picture:

PIC

It displays various information on the current selected chain (chain FIDDLE, in this case) such as the chain name (FIDDLE), the attached audio input (null), the attached audio output (alsa) as well as its internal index (000). Also in this area, the current chain setup position and overall length in seconds is displayed.

0.6.4.  The Footer

The last area of the view is called the Footer, which is sort of a status and message bar. It gives the user some feedback on his/her interaction. In our example the user has just pressed “S”, which is the shortcut for setting a chain to solo mode. If you look at the “F” of the word FIDDLE in the first chain, you see the cursor right on it, so the first chain (FIDDLE, internal named “chain_0”) is set to solo, and this is exactly, what the footer says:

PIC

0.7.  Using N-Chains

If you haven’t started Ecasound in server mode somewhere and if you don’t know how to start nchains, yet, read section Invoking N-Chains on page § first. Unless mentioned otherwise, we assume an Ecasound server running on localhost listening on the default port and N-Chains started with the -s option only.

When starting N-Chains, it creates a new chain setup called “nchains-YYYYMMDD-HHMMSS”. Think of this chain setup as your work bench in within Ecasound. You can specify a different chain setup name on command line using the “-c” command line switch. By convention, N-Chains works on a single ecasound chain setup a time.

So, what can we do now?

Let’s assume we want to do some mixing. Let’s further assume that we have already recorded some input wave files, fiddle.wav, guitar.wav and bodhran.wav for that. Now, what we should first come up with is to add these files to our N-Chains project.

0.7.1.  Adding Audio Input to a Chain

To add an audio input to a chain, use the curor keys to move the cursor somewhere over the desired chain and type “i” (for input):

The Footer will prompt you for the input name within the Info field, which can be any of the input names that Ecasound’s command ai-add understands5 . You can now directly type the audio input, for example fiddle.wav:

PIC

After pressing the return key, N-Chains tries to add the audio input. If everything worked, the N-Chains interface with the newly added audio input would look like this:

PIC

As you can see, the audio input fiddle.wav has been added tho the first chain of the chain list, Chain 0. Chain 0 has an audio input attached to it, which is indicated by the yellowish “I” in the i column of the Header. The Info field also shows the audio input name fiddle.wav.

But something else has happened: If you look at the Length column, you see that N-Chains automatically recalculated Chain 0’s duration to 337.340. Also, the current values of Playat (0.000) and Select (0.000) are displayed.

Further more, the transport information (the blue line right above the Footer) has been updated. It shows now the current postion 0.000 and the new chain setup length, which is 337.340, being equivalent to Chain 0’s duration because of our single audio input.

Now that the audio input is beeing added, it sure would be nice to see a descriptive name for the chain instead of Chain 0. This leads us to the next use case of

0.7.2.  Setting the Chain Name

In Ecasound, setting the name of a chain is done with the “-a” option. So a good choice would be to just type “a” to change a chain’s name from within N-Chains. Well folks, this is exactly the way it is done:

PIC

After having pressed the “a”-key, you will be prompted for the new chain name as indicated by the red arrow. Write down the new name and press <Return>:

PIC

A chain name can be up to 20 characters in N-Chains.

0.7.3.  Playat, Select, Length

Playat, Select, Length and their usage and description of recalculation

0.8.  Shortcuts

Shortcuts of the main interface




Action

Key

Comment







Set visual chain name

a




Add or set the audio input for the current chain

i




Add or set the audio output for the current chain

o




Toggle muting state for the current chain

m




Toggle solo state for the current chain

s




Toggle channel copy mode for the current chain

c




Set chain volume

v

Corresponds to ecasound chain operator ea. Keys: up/down, 1..0, <ENTER> to commit




Set chain panning

p

Corresponds to ecasound chain operator epp. Keys: left/right, l, r, c, 1..0, <ENTER> to commit




Set playat position

P

Numerical value, in sec.ms ex: 35.574, ESC to abort




Set select offset

C

Numerical value, in sec.ms ex: 35.574, ESC to abort




Set input length

L

Numerical value, in sec.ms ex: 35.574, ESC to abort




Quit N-Chains

q

At present, quits without any question




N-Chains Internals

0.9.  How N-Chains talks to Ecasound

This chapter is a pure list of too technical issues that are interesting but not necessary for the user guide chapter.

Note, that the chain names used by N-Chains are virtual chain names which do not correspond to the chain names used by ecasound. Internally, the chains used within the ecasound session are named chain_0, chain_1 .. chain_N.

Around N-Chains

0.10.  Release Version Cycle

0.10.1.  Release Versions

The naming of N-Chains release versions follow certain conventions which are described in this chapter. The several fields of a release package give you information of the state of the software package distributed with the current release. The following release versions exist within the cycle:

  1. Optional Pre-Unstable Rreleases

    1. nchains-A.B.C-pre-NNN, with C != 0 and N >= 1 ascending.
  2. Unstable

    1. nchains-A.B.C, with C != 0
  3. Optional Release Candidates

    1. nchains-A.B.C-rc-NNN, with C == 0 and N >= 1 ascending
  4. Stable

    1. nchains-A.B.C-stable with C == 0

0.10.2.  Version Numbering

The version numbers A, B and C as well as NNN of the distribution packages are incremented as follows:

A
Major release number, incremented upon basic changes within
B
The minor release number is incremented, when it is time for a stable release and a reasonable number of bugs have been fixed and features have been implemented.
C
is the revision release number, which is incremented on every unstable release.
NNN
If any of the optional releases occur, either pre-releases for the next unstable release or rc-releases for the next stable release, they will be appended a revision release incrementor.

0.11.  GNU Free Documentation License

GNU Free Documentation License Version 1.3, 3 November 2008

Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. <http://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

0. PREAMBLE

The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

1. APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.

A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document’s overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.

The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.

A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque".

Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LATEX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.

The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work’s title, preceding the beginning of the body of the text.

The "publisher" means any person or entity that distributes copies of the Document to the public.

A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.

The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.

2. VERBATIM COPYING

You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

You may also lend copies, under the same conditions stated above, and you may publicly display copies.

3. COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document’s license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

4. MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document’s license notice. H. Include an unaltered copy of this License. I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version. N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section. O. Preserve any Warranty Disclaimers.

If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version’s license notice. These titles must be distinct from any other section titles.

You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties–for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

5. COMBINING DOCUMENTS

You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.

The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements".

6. COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

7. AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation’s users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.

If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document’s Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.

8. TRANSLATION

Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.

If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.

9. TERMINATION

You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License.

However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.

Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.

Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it.

10. FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.

Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy’s public statement of acceptance of a version permanently authorizes you to choose that version for the Document.

11. RELICENSING

"Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site.

"CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization.

"Incorporate" means to publish or republish a Document, in whole or in part, as part of another Document.

An MMC is "eligible for relicensing" if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008.

The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing.

ADDENDUM: How to use this License for your documents

To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:

Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".

If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this:

with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.

If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.

If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.