NAME

Audio::Ecasound::Multitrack - Perl extensions for multitrack audio processing

Nama - Lightweight recorder, mixer and mastering system

SYNOPSIS

nama [options] [project_name]

DESCRIPTION

Nama is a lightweight recorder/mixer application using Ecasound in the back end to provide effects processing, cut-and-paste, mastering, and other functions typically found in digital audio workstations.

By default, Nama starts up a GUI interface with a command line interface running in the terminal window. The -t option provides a text-only interface for console users.

OPTIONS

-d project_root

Use project_root as Nama's top-level directory.

-f config_file

Use config_file instead of default .namarc

-g

GUI/text mode (default)

-t

Text-only mode

-c

Create the named project

-a

Save and reload ALSA mixer state using alsactl

-m

Don't load saved state

CONTROLLING ECASOUND

Ecasound is configured through use of chain setups. Chain setups are central to controlling Ecasound. Nama generates appropriate chain setups for recording, playback, and mixing covering a large portion of Ecasound's functionality.

Commands for audio processing with Nama/Ecasound fall into two categories: static commands that influence the chain setup and dynamic commands that influence the realtime behavior of the audio processing engine.

STATIC COMMANDS

The rec, mon and B <off> commands are examples of static commands. They influence whether the current track will get its audio stream from a live source (soundcard or JACK client) and store its as a WAV file, for whether an existing file will be played back. Other static commands include loop_enable and the stereo/mono commands which specify the width of a track's signal source. Like a spreadsheet recalculating, Nama automatically detects when static commands require that Ecasound be reconfigured with a new chain setup.

DYNAMIC COMMANDS

Once a chain setup is loaded and the engine launched, another subset of commands controls the audio processing engine. Commonly used dynamic commands include start and stop; forward, rewind and setpos commands for repositioning the playback head; and vol and pan for adjusting effect parameters. Effect parameters may be adjusted at any time. Effects may be added during audio processing.

DIAGNOSTICS

The current chain setup may be inspected with the chains command. The showio command displays the data structure used to generate the chain setup. dump displays data for the current track. dumpall shows the state of most program objects and variables (identical to the State.yml file created by the save command.)

Tk GRAPHICAL UI

Invoked by default, the Tk interface provides all functionality on two panels, one for general control, the second for effects.

Many plugins include hinting data, which is used to set parameter range and to provide logarithmic sliders for such parameters as frequency.

The GUI provides text-entry widgets to specify parameters for plugins without hinting.

The GUI project name bar and time display change color to indicate whether the upcoming operation will include live recording (red), mixdown only (yellow) or playback only (green). Live recording and mixdown can take place simultaneously.

The text command prompt appears in the terminal window during GUI operation, and text commands may be issued at any time.

TEXT UI

Press the Enter key if necessary to get the following command prompt.

    nama ('h' for help)>

You can enter Nama and Ecasound commands directly, Perl code preceded by eval or shell code preceded by !.

Multiple commands on a single line are allowed if delimited by semicolons. Usually the lines are split on semicolons and the parts are executed sequentially, however if the line begins with eval or ! the entire line will be given to the corresponding interpreter.

You can access command history using up-arrow/down-arrow.

Type help for general help, help command for help with command, help foo for help with commands containing the string foo. help_effect foo bar lists all plugins/presets/controller containing both foo and bar. Tab-completion is provided for Nama commands, Ecasound-iam commands, plugin/preset/controller names, and project names.

TRACKS

Ecasound deals with audio processing at the level of devices, files, and signal-processing chains. Nama implements tracks to provide a level of control and convenience comparable to many digital audio workstations.

Each track has a descriptive name (i.e. vocal) and an integer track-number assigned when the track is created.

VERSION NUMBER

Multiple WAV files can be recorded for each track. These are identified by a version number that increments with each recording run, i.e. sax_1.wav, sax_2.wav, etc. All files recorded at the same time have the same version numbers.

Version numbers for playback can be selected at the group or track level. By setting the group version number to 5, you can play back the fifth take of a song, or perhaps the fifth song of a live recording session.

The track's version setting, if present, overrides the group setting. Setting the track version to zero restores control of the version number to the default group setting.

REC/MON/OFF

REC/MON/OFF status is used to generate the chain setup for an audio processing run.

Each track, including Master and Mixdown, has its own REC/MON/OFF setting and displays its own REC/MON/OFF status. The Tracker group, which includes all user tracks, also has REC, MON and OFF settings. These provides a convenient way to control the behavior of all user tracks.

As the name suggests, REC status indicates that a track is ready to record a WAV file. You need to set both track and group to REC to source an audio stream from JACK or the soundcard.

MON status indicates an audio stream available from disk. It requires a MON setting for the track or group as well as the presence of file with the selected version number. A track set to REC with no audio stream available with default to MON status.

OFF status means that no audio is available for the track from any source. A track with no recorded WAV files will show OFF status, even if set to MON.

An OFF setting for the track or group always results in OFF status. A track with OFF status will be excluded from the chain setup. (This setting is distinct from the action of the mute command, which sets the volume of the track to zero.)

All user tracks belong to the Tracker group, which has a group REC/MON/OFF setting and a default version setting for the entire group.

Setting the group to MON (group_monitor or gmon) forces user tracks with a REC setting to MON status if a WAV file is available to play, or OFF status if no audio stream is available.

The group MON mode triggers automatically after a recording has created new WAV files.

The group OFF setting (text command group_off) excludes all user tracks from the chain setup, and is typically used when playing back mixdown tracks. The mixplay command sets the Mixdown track to MON and the Tracker group to OFF.

The Master bus has only MON/OFF status. Setting REC status for the Mixdown bus has the same effect as issuing the mixdown command. (A start command must be issued for mixdown to commence.)

REGIONS

The region command allows you to define endpoints for a portion of an audio file. Use the shift command to specify a delay for starting playback.

Only one region may be specified per track. Use the link_track command to clone a track in order to make use of multiple regions or versions of a single track.

link_track can clone tracks from other projects. Thus you could create the sections of a song in separate projects, then assemble them using link_track to pull the Mixdown tracks into a single project for mastering.

ROUTING

Nama identifies tracks by both a name and a number. The track number is used to identify corresponding Ecasound signal-processing chains.

Raw, cooked and mixed signals

Nama's signal flow is organized at three levels: raw, cooked and mixed.

"Raw" signals are the inputs to user tracks. Raw signals can come from the soundcard, a WAV file, or a JACK client.

"Cooked" signals are the output of user tracks after volume, pan and effects processing.

The "mixed" signal is the combined outputs of all user tracks. It is delivered to the Master fader, and to the Mixdown WAV file during mixdown.

Loop devices

Nama uses Ecasound loop devices to be able to deliver each of these signals classes to multiple "customers", i.e. to other chains using that signal as input.

An optimizing pass eliminates loop devices that have only one customer for the signal they provide.

Flow diagrams

Let's examine the signal flow from track 3, the first available user track. Assume track 3 is named "sax". All effects for track 3 are applied to chain 3.

We will divide the signal flow into track and mixer sections. Parentheses indicate chain identifiers or the corresponding track name.

All "cooked" signals (i.e. the outputs of each user track) terminate at loop,111.

Track, REC status

Sound device   --+---(3)----> loop,3 ---(J3)----> loop,111
  /JACK client   |
                 +---(R3)---> sax_1.wav

REC status indicates that the source of the signal is the soundcard or JACK client. The input signal will be written directly to a file except in the preview and doodle modes.

Track, MON status

sax_1.wav ------(3)----> loop,3 ----(J3)----> loop,111

Mixer, with mixdown enabled

In the second part of the flow graph, the mixed signal is delivered to an output device through the Master chain, which can host additional effects. The Mixdown track can also host effects, however these should be used during playback only.

loop,111 --(MixLink)---> loop,222 --(1/Master)---> Sound device
                             |
                             +------(2/Mixdown)--> Mixdown_1.wav

Mastering Mode

In mastering mode (invoked by master_on and released master_off) the MixLink chain is replaced by several tracks with mastering-related effects.

                             +---(Low)---+ 
                             |           |
loop,111 --(Eq)--> loop,120 -+---(Mid)---+ loop,130 --(Boost)--> loop,222
                             |           |
                             +---(High)--+ 

The Eq track hosts an equalizer.

The Low, Mid and High tracks each apply a bandpass filter, a compressor and a spatialiser.

The Boost track applies gain and a limiter.

These effects (and optional default parameters) are defined in the configuration file .namarc.

Preview and Doodle Modes

These non-recording modes, invoked by preview and doodle commands tweak the routing rules for special purposes. Preview mode simply disables recording of WAV files to disk. Doodle mode disables MON inputs while enabling only one REC track per signal source. The arm command releases both preview and doodle modes.

TEXT COMMANDS

Help commands

help (h) - Display help

    help [ <i_help_topic_index> | <s_help_topic_name> | <s_command_name> ]

help_effect (hfx he) - Display analyseplugin output if available or one-line help

    help_effect <s_label> | <i_unique_id>

find_effect (ffx fe) - Display one-line help for effects matching search strings

    find_effect <s_keyword1> [ <s_keyword2>... ]

General commands

exit (quit q) - Exit program, saving settings

    exit

memoize - Enable WAV dir cache

    memoize

unmemoize - Disable WAV dir cache

    unmemoize

Transport commands

stop (s) - Stop transport

    stop

start (t) - Start transport

    start

getpos (gp) - Get current playhead position (seconds)

    getpos

setpos (sp) - Set current playhead position

    setpos <f_position_seconds>

    setpos 65 (set play position to 65 seconds from start)

forward (fw) - Move playback position forward

    forward <f_increment_seconds>

rewind (rw) - Move transport position backward

    rewind <f_increment_seconds>

to_start (beg) - Set playback head to start

    to_start

to_end (end) - Set playback head to end minus 10 seconds

    to_end

ecasound_start (T) - Ecasound-only start

    ecasound_start

ecasound_stop (S) - Ecasound-only stop

    ecasound_stop

preview - Start engine with rec_file disabled (for mic test, etc.)

    preview

doodle - Start engine while monitoring REC-enabled inputs

    doodle

Mix commands

mixdown (mxd) - Enable mixdown for subsequent engine runs

    mixdown

mixplay (mxp) - Enable mixdown file playback, setting user tracks to OFF

    mixplay

mixoff (mxo) - Set Mixdown track to OFF, user tracks to MON

    mixoff

automix - Normalize track vol levels, then mixdown

    automix

master_on (mr) - Enter mastering mode. Add tracks Eq, Low, Mid, High and Boost if necessary

    master_on

master_off (mro) - Leave mastering mode

    master_off

Track commands

add_track (add new) - Create one or more new tracks

    add_track <s_name1> [ <s_name2>... ]

    add_track sax violin tuba

    link_track <s_name> <s_target> [ <s_project> ]

    link_track intro Mixdown song_intro creates a track 'intro' using all .WAV versions from the Mixdown track of 'song_intro' project

import_audio (import) - Import a WAV file, resampling if necessary

    import_audio <s_wav_file> [i_frequency]

set_track (set) - Directly set current track parameters (use with care!)

    set_track <s_track_field> value

rec - REC-enable current track

    rec

mon - Set current track to MON

    mon

off (z) - Set current track to OFF (exclude from chain setup)

    off

source (src r) - Set track source

    source <s_jack_client_name> | <i_soundcard_channel>

send (out aux m) - Set auxilary track destination

    send <s_jack_client_name> | <i_soundcard_channel> (3 or above)

stereo - Record two channels for current track

    stereo

mono - Record one channel for current track

    mono

set_version (version n ver) - Set track version number for monitoring (overrides group version setting)

    set_version <i_version_number>

    sax; version 5; sh

    destroy_current_wav

list_versions (lver lv) - List version numbers of current track

    list_versions

vol (v) - Set, modify or show current track volume

    vol [ [ + | - | * | / ] <f_value> ]

    vol * 1.5 (multiply current volume setting by 1.5)

mute (c cut) - Mute current track volume

    mute

unmute (C uncut) - Restore previous volume level

    unmute

unity - Set current track volume to unity

    unity

solo - Mute all but current track

    solo

all (nosolo) - Unmute tracks after solo

    all

pan (p) - Get/set current track pan position

    pan [ <f_value> ]

pan_right (pr) - Pan current track fully right

    pan_right

pan_left (pl) - Pan current track fully left

    pan_left

pan_center (pc) - Set pan center

    pan_center

pan_back (pb) - Restore current track pan setting prior to pan_left, pan_right or pan_center

    pan_back

show_tracks (show tracks) - Show status of all tracks

    show_tracks

show_track (sh) - Show current track status

    show_track

region - Specify a track region for playback using marks. Nama allows one region per track.

    region <s_start_mark_name> <s_end_mark_name>

remove_region (rmr) - Remove region definition. Entire track plays back.

    remove_region

shift_track (shift) - Set playback delay for track/region

    shift_track <s_start_mark_name> | <i_start_mark_index | <f_start_seconds>

unshift_track (unshift) - Remove playback delay for track/region

    unshift_track

modifiers (mods mod) - Set/show modifiers for current track (man ecasound for details)

    modifiers [ Audio file sequencing parameters ]

    modifiers select 5 15.2

nomodifiers (nomods nomod) - Remove modifiers from current track

    nomodifiers

normalize (norm ecanormalize) - Apply ecanormalize to current track version

    normalize

fixdc (ecafixdc) - Apply ecafixdc to current track version

    fixdc

autofix_track (autofix) - Fixdc and normalize selected versions of all MON tracks

    autofix_track

remove_track (rmt) - Remove effects, parameters and GUI for current track

    remove_track

Group commands

group_rec (grec R) - Rec-enable user tracks

    group_rec

group_mon (gmon M) - Rec-disable user tracks

    group_mon

group_version (gn gver gv) - Set group version for monitoring (overridden by track-version settings)

    group_version

group_off (goff Z) - Group OFF mode, exclude all user tracks from chain setup

    group_off

bunch (bn) - Define/list groups of tracks

    bunch [ <s_group_name> [track1] [track2...] ]

list_bunches (lb) - List groups of tracks (bunches)

    list_bunches

remove_bunches (rb) - Remove alias for group(s) of tracks (bunches)

    remove_bunches <s_bunch_name> [<s_bunch_name>...]

Project commands

save_state (keep save) - Save project settings to disk

    save_state [ <s_settings_file> ]

get_state (recall restore retrieve) - Retrieve project settings

    get_state [ <s_settings_file> ]

list_projects (lp) - List projects

    list_projects

create_project (create) - Create a new project

    create_project <s_new_project_name>

load_project (load) - Load an existing project using last saved state

    load_project <s_project_name>

project_name (project name) - Show current project name

    project_name

Setup commands

generate (gen) - Generate chain setup for audio processing

    generate

arm - Generate and connect chain setup

    arm

connect (con) - Connect chain setup

    connect

disconnect (dcon) - Disconnect chain setup

    disconnect

show_chain_setup (chains) - Show current Ecasound chain setup

    show_chain_setup

loop_enable (loop) - Loop playback between two points

    loop_enable <start> <end> (start, end: mark names, mark indices, decimal seconds)

    loop_enable 1.5 10.0 (loop between 1.5 and 10.0 seconds)

    loop_enable 1 5 (loop between mark indices 1 and 5)

    loop_enable start end (loop between mark ids 'start' and 'end')

loop_disable (noloop nl) - Disable automatic looping

    loop_disable

Effect commands

add_ctrl (acl cla) - Add a controller to an operator

    add_ctrl <s_parent_id> <s_effect_code> [ <f_param1> <f_param2>...]

add_effect (fxa afx) - Add effect to current track (placed before volume control)

    add_effect <s_effect_code> [ <f_param1> <f_param2>... ]

    add_effect amp 6 (LADSPA Simple amp 6dB gain)

    add_effect var_dali (preset var_dali) Note: no el: or pn: prefix is required

append_effect - Add effect to the end of current track (mainly legacy use)

    append_effect <s_effect_code> [ <f_param1> <f_param2>... ]

insert_effect (ifx fxi) - Place effect before specified effect (engine stopped, prior to arm only)

    insert_effect <s_insert_point_id> <s_effect_code> [ <f_param1> <f_param2>... ]

modify_effect (fxm mfx) - Modify an effect parameter

    modify_effect <s_effect_id> <i_parameter> [ + | - | * | / ] <f_value>

    modify_effect V 1 1000 (set effect_id V, parameter 1 to 1000)

    modify_effect V 1 - 10 (reduce effect_id V, parameter 1 by 10)

remove_effect (fxr rfx) - Remove effects from selected track

    remove_effect <s_effect_id1> [ <s_effect_id2>...]

ctrl_register (crg) - List Ecasound controllers

    ctrl_register

preset_register (prg) - List Ecasound presets

    preset_register

ladspa_register (lrg) - List LADSPA plugins

    ladspa_register

Mark commands

list_marks (lm) - List all marks

    list_marks

to_mark (tom) - Move playhead to named mark or mark index

    to_mark <s_mark_id> | <i_mark_index>

    to_mark start (go to mark named 'start')

mark (k) - Drop mark at current playback position

    mark [ <s_mark_id> ]

remove_mark (rmm) - Remove mark, default to current mark

    remove_mark [ <s_mark_id> | <i_mark_index> ]

    remove_mark start (remove mark named 'start')

next_mark (nm) - Move playback head to next mark

    next_mark

previous_mark (pm) - Move playback head to previous mark

    previous_mark

name_mark (nmk nom) - Give a name to the current mark

    name_mark <s_mark_id>

    name_mark start

modify_mark (move_mark mm) - Change the time setting of current mark

    modify_mark [ + | - ] <f_seconds>

Diagnostics commands

engine_status (egs) - Display Ecasound audio processing engine status

    engine_status

dump_track (dumpt dump) - Dump current track data

    dump_track

dump_group (dumpgroup dumpg) - Dump group settings for user tracks

    dump_group

dump_all (dumpall dumpa) - Dump most internal state

    dump_all

show_io (showio) - Show chain inputs and outputs

    show_io

BUGS AND LIMITATIONS

Text commands are required to invoke preview and mastering modes, and to define and shift track regions.

Compensation for LADSPA plugin latencies and ADC and buffering delays during multitrack recording is not fully implemented.

The default GUI colors aren't great.

No waveform display.

PATCHES

The main module, Multitrack.pm is a concatenation of several source files. Patches should be made against the source files (see below.)

EXPORT

None by default.

AVAILABILITY

CPAN, for the distribution.

cpan Audio::Ecasound::Multitrack

You will need to install Tk to use the GUI.

cpan Tk

You can pull the source code as follows:

git clone git://github.com/bolangi/nama.git

Build instructions are contained in the README file.

AUTHOR

Joel Roth, <joelz@pobox.com>