Nama - multitrack recorder and digital audio workstation
nama [options] [project-name]
A multitrack audio application for recording, effects processing, editing, mixing, mastering and live performance. It can also perform general-purpose audio processing, such as 5.1 to stereo conversion. Nama uses Ecasound as the audio processing engine.
Projects in Nama are audio networks of tracks and buses. Tracks may contain one or more RIFF (.wav) files, as well as effects, sends, inserts, marks, regions, fades, edits and sequences. Tracks can host LADSPA, LV2 and Ecasound plugins. Audio regions may be altered, duplicated, time-shifted or replaced.
Audio processing is performed in realtime when a track is played and may be cached (frozen) to a new audio file.
Project data is serialized as JSON. The complete history is tracked by the git version control system. As a result, projects can be managed using branches and tags, and provide undo/redo.
Nama supports some MIDI functionality via midish.
To facilitate reuse, a track's plugins and inserts can be stored as an effect chain. Effect profiles apply effect chains to groups of tracks. Project templates are for duplicating an entire project sans audio files.
Nama performs Audio IO via JACK or ALSA. Soundcard IO goes via JACK, if running, with transparent fallback to ALSA.
Nama supports Ladish Level 1 session handling.
Nama has fully featured terminal command prompt, a Tk GUI, and experimental OSC and remote-command modes.
The command prompt can run Nama commands, Ecasound interactive-mode commands, commands for the midish MIDI recorder/player, shell commands and perl code. Commands and filenames can be autocompleted using the TAB key. Command history is available to browse with up and down arrows.
The help system provides documentation and keyword search covering Nama commands and effects-processing plugins.
The hotkey mode provides a convenient way to select, view, and modify effect parameters.
Start Nama in GUI mode (default when Tk is available)
Start Nama in text mode
Specify configuration file (default: ~/.namarc)
Specify project root directory
Use current dir for all WAV and project files
Create project if it doesn't exist
Use Ecasound's Net-ECI interface
Use Ecasound's libecasoundc interface
Save/restore alsa state with project data
This help display
Regenerate the effects data cache
Debugging options:
Don't load project state
Don't load effects data
Don't load the effects data cache
Don't autosave, autoreconfigure or git snapshot
Simulate JACK environment
Simulate ALSA environment
Don't spawn Ecasound process
Supply a command to execute
Don't initialize terminal
No fades on transport start/stop
Log these (comma separated) categories
The Ecasound audio engine is configured through use of chain setups that define the signal processing network.
Nama serves as an intermediary, taking high-level user commands, generating chain setups for user tasks such as recording, playback, mixing, etc., and running the audio engine.
Configuration commands affect future runs of the audio engine. For example, rec, play, mon and off determine whether the current track will get its audio stream from an external (e.g. live) source, whether an existing audio file will be played back, and whether a new audio file will be recorded. Nama responds to these commands by reconfiguring the engine and displaying the updated track status. See 'man ::ChainSetup' for details on how the chain setup created.
Once a chain setup is loaded and the engine is launched, commands can be issued to control the realtime behavior of the audio processing engine. These commands include transport start and stop, playback head repositioning commands such forward, rewind and setpos. Effects may be added, modified or removed while the engine is running.
start
stop
forward
rewind
setpos
General configuration of sound devices and program options is performed by editing the .namarc file, which is formatted as YAML. On Nama's first run, a default version of .namarc is placed in the user's home directory.
Invoked by default if Tk is installed, this interface provides a subset of Nama's functionality on two windows:
The top section has buttons for creating, loading and saving projects, adding tracks, adding effects to tracks. In short, for setup.
Below are buttons for controlling the transport (start, stop and friends) and for setting marks.
The GUI project name bar and time display change color to indicate whether the upcoming operation will include live recording (red), mixdown (yellow) or playback (green).
The effects window provides sliders for each effect parameter of each track. Parameter range, defaults, and log/linear scaling hints are automatically detected. Text-entry widgets are used to enter parameters values for plugins without hinted ranges. Any parameter label can be clicked to add a parameter controller.
Provides a conventional view with waveform and playback head.
The command prompt is available the terminal window and provides access to all of Nama's functions.
Press the Enter key if necessary to get the command prompt, which will look something like this:
nama untitled sax ('h' for help)>
In this instance, 'sax' is the current track in the 'untitled' default project.
When using buses, the bus is indicated before the track:
nama untitled Strings/violin ('h' for help)>
At the prompt, you can enter Nama and Ecasound commands, Perl code preceded by eval or shell code preceded by !.
eval
!
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 (up to double semicolons ';;' if present) 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.
help
help command
command
help foo
foo
help-effect foo bar
Most commands have abbreviations, such as 'afx' for 'add-effect'. These are shown in the help listings.
Each track has a descriptive name (i.e. vocal) and an integer track-number assigned when the track is created. New user tracks initially belong to the Main bus.
Track output signals are usually mixed and pass through the Main track on the way to soundcard for monitoring.
The following sections describes track attributes and their effects.
Specifying 'mono' means the track has one input channel, which will be recorded as a mono WAV file. Mono track signals are automatically duplicated to stereo and a pan effect is provided.
Specifying 'stereo' for a track means that two channels of audio input will be recorded as an interleaved stereo WAV file. You can also use a 'stereo' declaration to avoid the automatic channel copy usually applied to single-channel sources.
Specifying N channels for a track ('set width N') means N successive input channels will be recorded as an N-channel interleaved WAV file.
Basic signal routing for each track is controlled by its setting to REC, MON, PLAY or OFF.
The MON setting prepares to connect the live track source.
The REC setting prepares to connect the live track source and record it to an audio file.
The PLAY setting enqueues an audio file for playback from disk as the track source.
The OFF setting tells Nama to remove the track from the audio network. OFF status may result for a track when no audio source is available. For example, a track with no recorded audio files will show OFF status when set to PLAY.
By default a track belongs to the Main bus and is routed to the Main track. This track provides a final fader before the signal goes via ALSA or JACK to the audio device.
Buses can force the status of their member tracks to OFF. Nama provides MON and OFF settings for buses. OFF (set by bus-off) removes all member tracks from the chain setup, MON (set by bus-mon restores them.
bus-off
bus-mon
The mixplay command sets the Mixdown track to PLAY and the Main bus to OFF.
Multiple audio files ("takes") can be recorded for each track. These are distinguished by a version number that increments with each recording run, i.e. sax_1.wav, sax_2.wav, etc. All audio files recorded in the same run have the same version number.
The version numbers for track playback can be selected at the bus or track level. By setting the bus version to 5, you can play back version 5 of several tracks at once. Version 5 could signify the fifth take of a song, or the fifth song of a live recording session.
The track version setting, if present, overrides the bus version setting. Setting the track version to zero restores control of the version number to the bus.
The Main bus version setting does not propagate to other buses.
Marks in Nama are similar to those in other audio editing software. One limitation is that mark positions are relative to the beginning of an Ecasound chain setup. If your project involves a single track, and you will be shortening the stream by setting a region to play, set any marks you need after defining the region.
The region command allows you to define endpoints for a portion of an audio file. You can then use the shift command to move the region to the desired time position.
region
shift
If you use named marks as endpoints, the region will change if the mark's position is adjusted.
Each track can have one region definition. To create multiple regions, the new-region command takes a pair of marks to create a read-only copy of the current track with the specified region definition.
new-region
You can control this region as you would any other other track, shifting the start time, applying effects, adjusting volume, etc.
The link-track clones a read-only track from another track, which may belong to a different project.
link-track
Each track gets volume and pan effects by default. New effects added using add-effect are applied before pan volume controls. You can position effects anywhere you choose using insert_effect or position-effect.
add-effect
insert_effect
position-effect
Fades can be placed on any track. They defined by mark position and duration. An additional volume operator, -eadb, is applied to each track to host the envelope controller that implements fades.
The send command can route a track's post-fader output to a soundcard channel or JACK client in addition to the normal mixer input. Nama currently allows one aux send per track.
send
The add-insert command configures a pre- or post-fader send-and-return to soundcard channels or JACK clients. Wet and dry signal paths are provided, with a default setting of 100% wet.
add-insert
Each track can have one pre-fader and one post-fader insert.
A bunch is just a list of track names. Using the for keyword with the name of a bunch will apply the commands that follow to all of the tracks in the bunch. A bunch can be created with the new-bunch command. A bus name can also be treated as a bunch.
for
new-bunch
Buses enable multiple tracks to be routed through a single mix track before feeding the Main mixer bus (or possibly, another bus.)
The following commands create a bus and assign three tracks to it. The mix track takes the name of the bus and is stereo by default.
# create a bus named Strings with a same-named mix track add-bus Strings # create tracks for the bus add-tracks violin cello bass # move the tracks from the Main bus (default) to the Strings bus for violin cello bass; move-to-bus Strings # use the mix track to control bus output volume Strings vol - 10
Submixes are a type of bus used to provide instrument monitors, or to send the outputs from multiple user tracks to an external program such as jconverter.
While Nama can address tracks by either name and track number, Ecasound chain setups use the track number exclusively.
The Main track (mixer output) is always chain 1, the Mixdown track is always chain 2.
Nama uses Ecasound loop devices where necessary to connect two tracks, or to allow one track to have multiple inputs or outputs. Each loop device adds one buffer, which increases latency.
Let's examine the signal flow from track 3, the first available user track. Assume track 3 is named "sax".
We will divide the signal flow into track and mixer sections. Parentheses show the chain id.
The stereo outputs of each user track terminate at Main_in, a loop device at the mixer input.
Sound device --+---(3)----> Main_in /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 special preview and doodle modes.
sax_1.wav ------(3)----> Main_in
In the second part of the flow graph, the mixed signal is delivered to an output device through the Main chain, which can host effects. Usually the Main track provides final control before audio output or mixdown.
Main_in --(1)--> Main_out --+--------> Sound device | +-->(2)--> Mixdown_1.wav
In mastering mode (invoked by master-on and released master-off) the following network receives the Main track signal as input and provides an output to the soundcard or WAV file.
master-on
master-off
+- Low -+ | | Main_in --- Eq --+- Mid -+--- Boost -> soundcard/wav_out | | +- 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 their default parameters are defined in the configuration file .namarc.
The mixdown command configures Nama for mixdown. The Mixdown track is set to REC (equivalent to Mixdown rec) and the audio monitoring output is turned off (equivalent to Main off).
mixdown
Mixdown rec
Main off
Mixdown proceeds after you start the transport.
As a convenience, Mixdown_nn.wav will be symlinked to <project-name_nn.wav> or <branch_name_nn.wav> in the project directory. The latter format is used branches other than the default master branch.) Corresponding encoded files are created if the mixdown_encodings option is set in .namarc. Acceptable values are a space-separated list. The default is "mixdown_encodings: ogg mp3".
These non-recording modes, invoked by preview and doodle commands tweak the routing rules for special purposes. Preview mode disables recording of WAV files to disk. Doodle mode disables PLAY inputs while excluding any tracks with the same source as a currently routed track. The arm command releases both preview and doodle modes.
preview
doodle
arm
The eager setting causes the engine to start immediately following a reconfiguration.
If git is available, projects are saved automatically after each command and it is not necessary to explicitly save your work.
When you type save, Settings related to the state of the project are saved in the file State.json in the project directory. State.json is tracked by git.
save
save updates several other data files as well:
Aux.json, also in the project directory, contains data that is part of the project (such as command history, track comments, and current operating modes) but with no direct effect on the project audio.
global_effect_chains.json, in the project root directory (usually ~/nama) contains system and user defined effect chains.
save somename.json will save project state to a file of that name. Similarly get somename.json will load the corresponding file. The .json suffix may be omitted if "use_git: 0" is set in .namarc.
save somename.json
get somename.json
If git is available, Nama uses it to store snapshots of every step in the history of your project.
When you type save initial-mix, the latest snapshot is tagged with the name "initial-mix", which you can recall later with the command get initial-mix.
save initial-mix
get initial-mix
You can include a comment with the snapshot:
save initial-mix "sounds good enough to send to the front office"
Nama lets you create new branches, starting at any snapshot.
To start a new branch called compressed-mix starting at a snapshot called initial-mix you would say:
new-branch compressed-mix initial-mix
If you want to go back to working on the master branch, use branch master.
branch master
You can also issue native git commands at the Nama prompt.
All projects begin on the "master" branch. Because this is the default branch, it is not displayed in the prompt. Otherwise "master" is not special in any way.
In the graphs below, the letters indicate named snapshots.
create test-project ... save a ... save b ... save c ---a---b---c (master) get a ... save d ... save e ... save f d---e---f (a-branch) / -----a----b---c (master)
Now, you want to go back to try something different at "c":
get c ... save g d---e---f (a-branch) / ----a----b---c (master) \ g (c-branch CURRENT HEAD)
You could also go back to master, and restart from there:
get master ... save h ... save i d---e---f (a-branch) / ----a----b---c---h---i (master CURRENT HEAD) \ g (c-branch)
Merging of branches is not supported.
When you type quit Nama will automatically save your work to State.json. If you don't want this behavior, use Ctrl-C to exit Nama.
quit
Use source filename.ports to ask Nama to connect multiple JACK ports listed in a file filename.ports to the input port(s) of that track.
If the track is stereo, ports from the list are alternately connected to left and right channels.
An edit consists of audio clips and data structures associated with a particular track and version. The edit replaces part of the original audio file, allowing you to fix wrong notes, or substitute one phrase for another. Behind the scenes, the host track becomes the mix track to a bus. Sources for the bus are the original audio track, and zero or more edits, each represented by a hidden track.
Each track can host multiple edits. Edits are non-destructive; they are achieved by using Ecasound's ability to crossfade and sequence.
Before creating the edit, select the track and version to be edited. You will now need to create three marks:
play start point =item * rec start point =item * rec end point
The edit will replace the audio between the rec start and rec end points.
There are two ways to set these points.
Position the playback head a few seconds before the edit. Enter the set-edit-points command. This will start the engine. Hit the P key three times to designate the playback start, punch-in and punch-out positions.
Position the playback head at the position you want playback for the edit to start. Enter the set-play-start-mark command.
Use the same procedure to set the rec start and rec end positions using the set-rec-start-mark and set-rec-end-mark commands.
Enter the new-edit command to create the necessary tracks and data structures.
Use preview-edit to confirm the edit positions. The engine will run and you will hear the host track with the target region removed. Playback will be restricted to the edit region. You may use preview_out to hear the clip to be removed.
Use list-marks to see the edit marks and modify-mark to nudge them into perfect position.
Once you are satisfied with the mark positions, you are ready to record your edit.
Enter start-edit. Playback will begin at first mark. The replacement clip will be recorded from the source specified in the original track.
Each start-edit command will record an additional version on the edit track. redo-edit will delete (destructively) the most recent audio clip and begin recording anew.
destroy-edit deletes (destructively) the current edit.
You may specify another range for editing and use the editing procedure again as many times as you like. Edits on one track may not overlap.
merge-edits will recursively merge all edits applied to the current track and version, creating a new version for the track. This will freeze your edits against an accidental change in mark, region or version settings.
list-edits will label the edits by index and time.
end-edit-mode will restore normal playback mode
You can send commands to Nama from a remote process, and retrieve the result. Understand that this code opens a remote execution hole.
In .namarc you need something like:
remote_control_port: 57000
Then Nama will set up a listener for remote commands.
The usual return value will be a single newline.
However, if you send an 'eval' command followed by perl code, the return value will be the result of the perl code executed with a newline appended. If the result is a list, the items will be joined by spaces into a single string.
For example, if you send this string:
eval $this_track->name
The return value will be the name of the current track.
If the result is an object or data structure, it will be returned in a serialized form.
help [ <integer:help_topic_index> | <string:help_topic_name> | <string:command_name> ]
help marks # display the help category marks and all commands containing marks help 6 # display help on the effects category help mfx # display help on modify-effect - shortcut mfx
help-effect <string:label> | <integer:unique_id>
help-effect 1970 # display help on Fons Adriaensen's parametric EQ (LADSPA) help-effect etd # prints a short message to consult Ecasound manpage, # where the etd chain operator is documented. hfx lv2-vocProc # display detailed help on the LV2 VocProc effect
find-effect <string:keyword1> [ <string:keyword2>... ]
find-effect compressor # List all effects containing "compressor" in their name or parameters fe feedback # List all effects matching "feedback" # (for example a delay with a feedback parameter)
exit
memoize
unmemoize
rec # prepare the curent track to be recorded. start # Start the engine/transport rolling (play now!) stop # Stop the engine, cleanup, prepare to review
getpos
start # Start the engine. gp # Get the current position of the playhead. Where am I?
setpos <float:position_seconds>
setpos 65.5
forward <float:increment_seconds>
fw 23.7
rewind <float:decrement_seconds>
rewind 6.5
jump-to-start
jump-to-end
ecasound-start
ecasound-stop
restart-ecasound
rec # Set the current track to record from its source. preview # Enter the preview mode. start # Playback begins. You can play live, adjust effects, # forward, rewind, etc. stop # Stop processing audio. arm # Restore to normal recording/playback mode.
doodle # Switch into doodle mode. start # start the audio engine. (fool around) stop # Stop processing audio. arm # Return to normal mode, allowing playback and record to disk
mixdown # Enter mixdown mode start # Start the transport. The mix will be recorded by the # Mixdown track. The engine will run until the # longest track ends. (After mixdown Nama places # a symlink to the WAV file and possibly ogg/mp3 # encoded versions in the project directory.) mixoff # Return to the normal mode.
mixplay
mixplay # Enter the Mixdown play mode. start # Play the Mixdown track. stop # Stop playback. mixoff # Return to normal mode.
mixoff
automix
mr # Turn on master mode. start # Start the playback. # Now you can adjust the Boost or global EQ. stop # Stop the engine.
add-track <string:name>
add-track clarinet # create a mono track called clarinet with input # from soundcard channel 1.
add-midi-track <string:name>
add-midi-track clarinet
add-tracks <string:name1> [ <string:name2>... ]
add-tracks violin viola contra_bass
link-track [<string:project-name>] <string:track_name> <string:link_name>
link my_song_part1 Mixdown part_1 # Create a read-only track "part_1" in the current project # using files from track "Mixdown" in project "my_song_part_1". # link-track compressed_piano piano # Create a read-only track "compressed_piano" using files from # track "piano". This is one way to provide wet and dry # (processed and unprocessed) versions of same source. # Another way would be to use inserts.
import-audio <string:full_path_to_file> [ <integer:frequency> ]
import /home/samples/bells.flac # import the file bells.flac to the current track import /home/music/song.mp3 44100 # import song.mp3, specifying the frequency
import-midi <string:full_path_to_file>
route-track <string:source_id> <string:send_id>
set-track <string:track_field> <value>
record
rec # Set the current track to record. start # A new version (take) will be written to disk, # creating a file such as sax_1.wav. Other tracks # may be recording or playing back as well. stop # Stop the recording/playback, automatically enter playback mode
play
mon
off
source <integer:soundcard_channel> | <string:jack_client_name> | <string:jack_port_name> <string:jack_ports_list> | | <string:track_name> | <string:loop_id> | 'jack' | 'null'
source 3 # Take input from soundcard channel 3 (3/4 if track is stereo) # source null # Track's input is silence. This is useful for when an effect such # as a metronome or signal generator provides a source. # source bus Strings # set the Strings bus as source # source track trumpet # set the track trumpet as source # source LinuxSampler # set the JACK client named LinuxSampler as source # source synth:output_3 # use the signal from the JACK client synth, using the # port output_3 (see the jackd and jack_lsp manpages # for more information). # source jack # This leaves the track input exposed as JACK ports # such as Nama:sax_in_1 for manual connection. # source kit.ports # The JACK ports listed in the file kit.ports (if it exists) # will be connected to the track input. # # Ports are listed pairwise in the .ports files for stereo tracks. # This is convenient for use with the Hydrogen drumkit, # whose outputs use one JACK port per voice.
send <integer:soundcard_channel> | <string:jack_client_name> | <string:loop_id>
send 3 # Send the track output to soundcard channel 3. send jconvolver # Send the track output to the jconvolver JACK client.
remove-send
stereo
mono
set-version <integer:version_number>
piano # Select the piano track. version 2 # Select the second recorded version sh # Display information about the current track
destroy-current-wav
list-versions
list-versions # May print something like: 1 2 5 7 9 # The other versions might have been deleted earlier by you.
vol [ [ + | - | / | * ] <float:volume> ]
vol * 1.5 # Multiply the current volume by 1.5 vol 75 # Set the current volume to 75 # Depending on your namarc configuration, this means # either 75% of full volume (-ea) or 75 dB (-eadb). vol - 5.7 # Decrease current volume by 5.7 (percent or dB) vol # Display the volume setting of the current track.
mute
unmute
unity
vol 55 # Set volume to 55 unity # Set volume to the unity value. vol # Display the current volume (should be 100 or 0, # depending on your settings in namarc.)
solo [ <strack_name_1> | <string:bunch_name_1> ] [ <string:track_name_2 | <string:bunch_name_2> ] ...
solo # Mute all tracks but the current track. nosolo # Unmute all tracks, restoring prior state. solo piano bass Drums # Mute everything but piano, bass and Drums.
nosolo
all
piano # Select track piano mute # Mute the piano track. sax # Select the track sax. solo # Mute other tracks nosolo # Unmute other tracks (piano is still muted) all # all tracks play
pan [ <float:pan_position_in_percent> ]
pan 75 # Pan the track to a position between centre and hard right p 50 # Move the current track to the centre. pan # Show the current position of the track in the stereo panorama.
pan-right
pan-left
pan-center
pan-back
show-tracks
show-tracks-all
show-bus [ <string:busname> ]
show-track
show-mode
show-track-latency
show-latency-all
set-region <string:start-mark-name|decimal:time> <string:end-mark-name|decimal:time>
sax # Select "sax" as the current track. set-region 2.5 120.5 # Play the audio from 2.5 to 120.5 seconds. **Must be decimal notation** # or you can use marks: setpos 2.5 # Move the playhead to 2.5 seconds. mark sax_start # Create a mark sp 120.5 # Move playhead to 120.5 seconds. mark sax_end # Create another mark set-region sax_start sax_end
add-region <string:start_mark_name> | <float:start_time> <string:end_mark_name> | <float:end_time> [ <string:region_name> ]
sax # Select "sax" as the current track. add-region 24.4 66.7 solo # Clone the "sax" track as "solo" # selecting the region from 24.4 to 66.7 seconds. # Decimals are required, integers are interpreted as mark indices add-region solo-start solo-end # Clone track, selecting the region defined from solo-start # mark to solo-end mark.
remove-region
shift-track <string:start_mark_name> | <integer:start_mark_index | <float:start_seconds>
piano # Select "piano" as current track. shift 6.7 # Move the start of track to 6.7 seconds.
unshift-track
modifiers [ Audio file sequencing parameters ]
modifiers select 5 15.2 # Apply Ecasound's select modifier to the current track. # The usual way to accomplish this is with a region definition.
nomodifiers
normalize
fixdc
autofix-tracks
remove-track
bus-version
bus-on
add-bunch <string:bunch_name> [ <string:track_name_1> | <integer:track_index_1> ] ...
add-bunch strings violin cello bass # Create a bunch "strings" with tracks violin, cello and bass. for strings; mute # Mute all tracks in the strings bunch. for strings; vol * 0.8 # Lower the volume of all tracks in bunch "strings" by a # a factor of 0.8.
list-bunches
remove-bunch <string:bunch_name> [ <string:bunch_name> ] ...
add-to-bunch <string:bunch_name> <string:track1> [ <string:track2> ] ...
add-to-bunch woodwind oboe sax flute
commit <string:message>
tag <string:tag_name> [<string:message>]
branch <string:branch_name>
list-branches
new-branch <string:new-branch_name> [<string:existing_branch_name>]
save-state [ <string:settings_target> [ <string:message> ] ]
get-state <string:settings_target>
list-projects
new-project <string:new-project-name>
create jam
load-project <string:existing_project-name>
load my_old_song
project-name
new-project-template <string:template_name> [ <string:template_description> ]
new-project_template my_band_setup "tracks and busses for bass, drums and me"
use-project-template <string:template_name>
apt my_band_setup # Will add all the tracks for your basic band setup.
list-project-templates
destroy-project-template <string:template_name1> [ <string:template_name2> ] ...
generate
arm-start
connect
disconnect
show-chain-setup
loop <string:start_mark_name> | <integer:start_mark_index> | <float:start_time_in_secs> <string:end_mark_name> | <integer:end_mark_index> | <float:end_time_in_secs>
loop 1.5 10.0 # Loop between 1.5 and 10.0 seconds. loop 1 5 # Loop between marks with indices 1 and 5, see list-marks. loop sax_start 12.6 # Loop between mark sax_start and 12.6 seconds.
noloop
add-controller [ <string:operator_id> ] <string:effect_code> [ <float:param1> <float:param2> ] ...
add-effect etd 100 2 2 50 50 # Add a stero delay of 100ms. # the delay will get the effect ID E . # Now we want to slowly change the delay to 200ms. acl E klg 1 100 200 2 0 100 15 200 # Change the delay time linearly (klg)
add-effect [ (before <fx_alias> | first | last ) ] <fx_alias> [ <float:param1> <float:param2>... ] "before", "first" and "last" can be abbreviated "b", "f" and "l", respectively.
We want to add the decimator effect (a LADSPA plugin). help-effect decimator # Print help about its paramters/controls. # We see two input controls: bitrate and samplerate afx decimator 12 22050 # prints "Added GO (Decimator)" # We have added the decimator with 12bits and a sample rate of 22050Hz. # GO is the effect ID, which you will need to modify it.
add-effect-last <fx_alias> [ <float:param1> <float:param2>... ]
add-effect-first <fx_alias> [ <float:param1> <float:param2>... ]
add-effect-before <fx_alias> <fx_alias> [ <float:param1> <float:param2>... ]
modify-effect [ <fx_alias> ] <integer:parameter> [ + | - | * | / ] <float:value> fx_alias can be: a position, effect ID, nickname or effect code
To change the roomsize of our reverb effect to 62 lfx # We see that reverb has unique effect ID AF and roomsize is the # first parameter. mfx AF 1 62 # mfx AF,BG 1 75 # Change the first parameter of both AF and BG to 75. # mfx CE 6,10 -3 # Change parameters 6 and 10 of effect CE to -3 # mfx D 4 + 10 # Increase the fourth parameter of effect D by 10. # mfx A,B,C 3,6 * 5 # Adjust parameters 3 and 6 of effect A, B and C by a factor of 5.
remove-effect <fx_alias1> [ <fx_alias2> ] ...
position-effect <string:id_to_move> <string:position_id>
position-effect G F # Move effect with unique ID G immediately before effect F
show-effect [ <string:effect_id1> ] [ <string:effect_id2> ] ...
sfx # Display name, unique ID and parameters/controls of the current effect. sfx H # Display info on effect with unique ID H. H becomes the current effect.
dump-effect
list-effects
hotkeys-param
hotkeys-jump
hotkeys-bump
hotkeys-off
hotkeys-on
toggle-hotkeys
hotkeys-list
add-insert External: ( pre | post ) <string:send_id> [ <string:return_id> ] Local wet/dry: local
add-insert pre jconvolver # Add a prefader insert. The current track signal is sent # to jconvolver and returned to the vol/pan controls. add-insert post jconvolver csound # Send the current track postfader signal (after vol/pan # controls) to jconvolver, getting the return from csound. guitar # Select the guitar track ain local # Create a local insert guitar-1-wet # Select the wet arm afx G2reverb 50 5.0 0.6 0.5 0 -16 -20 # add a reverb afx etc 6 100 45 2.5 # add a chorus effect on the reverbed signal guitar # Change back to the main guitar track wet 25 # Set the balance between wet/dry track to 25% wet, 75% dry.
set-insert-wetness [ pre | post ] <n_wetness>
wet pre 50 # Set the prefader insert to be balanced 50/50 wet/dry. wet 100 # Simpler if there's only one insert
remove-insert [ pre | post ]
rin # If there is only one insert on the current track, remove it. remove-insert post # Remove the postfader insert from the current track.
ctrl-register
preset-register
ladspa-register
list-marks
to-mark <string:mark_name> | <integer:mark_index>
to-mark sax_start # Jump to the position marked by sax_mark. tmk 2 # Move to the mark with the index 2.
add-mark [ <string:mark_id> ] [<string:attr>]...
mark start # create a mark named "start" at the current position.
remove-mark [ <string:mark_name> | <integer:mark_index> ]
remove-mark start # remove the mark named start rmk 16 # Remove the mark with the index 16. rmk # Remove the current mark
next-mark
previous-mark
name-mark <string:mark_name>
modify-mark [ + | - ] <float:seconds>
move-mark + 2.3 # Move the current mark 2.3 seconds forward from its mmk 16.8 # Move the current mark to 16.8 seconds, no matter, where it is now.
engine-status
dump-track
dump-group
dump-all
dump-io
list-history
add-submix-cooked <string:name> <destination>
add-submix-cooked front_of_house 7 # send a custom mix named "front_of_house" # to soundcard channels 7/8
add-submix-raw <string:name> <destination>
asbr Reverb jconv # Add a raw send bus called Reverb, with its output
add-bus <string:name> [ <string:track_name> | <string:jack_client> | <integer:soundcard_channel> ]
abs Brass # Add a bus, "Brass", routed to the Main bus (e.g. mixer) abs special csound # Add a bus, "special" routed to JACK client "csound"
update-submix <string:name>
update-submix Reverb
remove-bus <string:bus_name>
list-buses
set-bus <string:busname> <key> <value>
overwrite-effect-chain Same as for new-effect-chain
new-effect-chain <string:name> [ <effect_id_1> <effect_id_2>... ]
new-effect-chain my_piano # Create a new effect chain, "my_piano", storing all # effects and their settings from the current track # except the fader (vol/pan) settings. nec my_guitar A C F G H # Create a new effect chain, "my_guitar", # storing the effects with IDs A, C, F, G, H and # their respective settings.
delete-effect-chain <string:effect_chain_name>
find-effect-chains [ <string:key_1> <string:value_1> ] ...
fec # List all effect chains with their effects.
find-user-effect-chains [ <string:key_1> <string:value_1> ] ...
bypass-effects [ <string:effect_id_1> <string:effect_id_2>... | 'all' ]
bypass all # Bypass all effects on the current track, except vol and pan. bypass AF # Only bypass the effect with the unique ID AF.
bring-back-effects [ <string:effect_id_1> <string:effect_id_2> ... | 'all' ]
bbfx # Restore the current effect. restore_effect AF # Restore the effect with the unique ID AF. bring-back-effects all # Restore all effects.
new-effect-profile <string:bunch_name> [ <string:effect_profile_name> ]
add-bunch Drums snare toms kick # Create a buch called Drums. nep Drums my_drum_effects # Create an effect profile, call my_drum_effects
apply-effect-profile <string:effect_profile_name>
destroy-effect-profile <string:effect_profile_name>
list-effect-profiles
show-effect-profiles
full-effect-profiles
cache-track [ <float:additional_processing_time> ]
cache 10 # Cache the curent track and append 10 seconds extra time,
uncache-track
do-script <string:filename>
do prepare_my_drums # Execute the script prepare_my_drums.
scan
add-fade ( in | out ) marks/times (see examples)
fade in mark1 # Fade in,starting at mark1 and using the # default fade time of 0.5 seconds. fade out mark2 2 # Fade out over 2 seconds, starting at mark2 . fade out 2 mark2 # Fade out over 2 seconds, ending at mark2 . fade in mark1 mark2 # Fade in starting at mark1, ending at mark2 .
remove-fade <integer:fade_index_1> [ <integer:fade_index_2> ] ...
list-fade # Print a list of all fades and their tracks. rfd 2 # Remove the fade with the index (n) 2.
list-fade
add-comment <string:comment>
ac "Guitar, treble on 50%"
remove-comment
show-comment
show-comments
add-version-comment <string:comment>
avc "The good take with the clear 6/8"
remove-version-comment
show-version-comment
show-version-comments-all
add-system-version-comment <string:comment>
new-edit
set-edit-points
list-edits
select-edit <integer:edit_index>
end-edit-mode
destroy-edit [ <integer:edit_index> ]
preview-edit-in
preview-edit-out
play-edit
record-edit
edit-track
host-track-alias
host-track
version-mix-track
play-start-mark
rec-start-mark
rec-end-mark
set-play-start-mark
set-rec-start-mark
set-rec-end-mark
disable-edits
merge-edits
explode-track
move-to-bus <string:bus_name>
asub Drums # Create a new sub bus, called Drums. snare # Make snare the current track. mtb Drums # Move the snare track into the sub bus Drums.
promote-version-to-track <integer:version_number>
read-user-customizations
limit-run-time [ <float:additional_seconds> ]
limit-run-time-off
offset-run <string:mark_name>
offset-run-off
view-waveform
edit-waveform
rerecord
for piano guitar;rec # Set piano and guitar track to record. # do your recording and ilstening. # You want to record another version of both piano and guitar: rerec # Sets piano and guitar to record again.
analyze-level
for <string:track_name_1> [ <string:track_name_2>} ... ; <string:commands>
for piano guitar; vol - 3; pan 75 # reduce volume and pan right for snare kick toms cymbals; mtb Drums # move tracks to bus Drums
git <string:command_name> [arguments]
edit-rec-setup-hook
edit-rec-cleanup-hook
remove-fader-effect vol | pan | fader
rename-track <string:old_track> <string:new_track>
new-sequence <string:name> <track1, track2,...>
select-sequence
list-sequences
show-sequence
append-to-sequence [<string:name1>,...]
asq chorus # append chorus track to current sequence asq # append current track to current sequence
insert-in-sequence <string:name1> [<string:name2>,...] <integer:index>
remove-from-sequence <integer:index1> [<integer:index2>,...]
delete-sequence <string:sequence>
add-spacer <float:duration> [<integer:position>]
convert-to-sequence
merge-sequence
snip <mark_pair1> [<mark_pair2>...]
snip cut1-start cut1-end cut2-start cut2-end This removes cut1 and cut2 regions from the current track by creating a sequence.
retain
discard
gather
toggle-snip
compose <string:sequence_name> <string:trackname> <mark_pair1> [<mark_pair2>...]
compose speeches conference-audio speaker1-start speaker1-end speaker2-start speaker2-end This creates a "speeches" sequence with two clips for speaker1 and speaker2.
undo
redo
show-head-commit
eager on | off
new-engine <string:engine_name> <integer:port>
select-engine <string:engine_name>
set-track-engine-group <string:engine_name>
set-bus-engine-group <string:engine_name>
select-submix <string:submix_name>
trim-submix
# reduce vol of current track in in_ear_monitor by 3dB select-submix in_ear_monitor trim vol - 3
nickname-effect <lower_case_string:nickname>
add-track guitar afx Plate nick reverb # current effect gets name "reverb1" mfx reverb1 1 0.05 # modify first reverb effect on current track mfx reverb 1 2 # works, because current track has one effect named "reverb" afx reverb # add another Plate effect, gets name "reverb2" rfx reverb # Error, multiple reverb effects are present on this # track. Please use a numerical suffix. mfx reverb2 1 3 # modify second reverb effect rfx reverb1 # removes reverb1 ifx reverb2 reverb # insert another reverb effect (reverb3) before reverb2 rfx reverb3 # remove reverb3 rfx reverb # removes reverb2, as it is the sole remain reverb effect
delete-nickname-definition
afx Plate # add Plate effect nick reverb # name it "reverb", and create a nickname for Plate dnd reverb # removes nickname definition afx reverb # error
remove-nickname
afx Plate nick reverb mfx reverb 1 3 rnick mfx reverb 1 3 # Error: effect named "reverb" not found on current track
list-nickname-definitions
set-effect-name <string:name>
set-effect-surname <string:surname>
remove-effect-name
remove-effect-surname
select-track <string:track-name> | <integer:track-number>
edit-tempo-map
set-tempo <integer:tempo-setting>
set-sample-rate <integer:sample-rate>
set-playback-jump <float:seconds>
set-mark-bump <float:seconds>
set-mark-replay <float:seconds>
set-param-increment <float:time>
set-param-exp <integer:exponent>
Nama selects realtime or nonrealtime parameters based on the realtime_profile, ecasound_buffersize and ecasound_globals fields in .namarc. You can optionally specify the buffersizes as a multiple of the JACK period size. Note that for best realtime operation under JACK you will have to configure jackd appropriately as well.
The realtime and auto profiles are useful when using Nama/Ecasound for live fx processing or live monitoring.
The realtime profile sets a small buffersize and other low latency settings whenever a soundcard or JACK client is connected.
The nonrealtime profile uses a bigger buffer, providing extended margins for stable operation. It is suitable for post-processing, or for recording without live monitoring responsibilities.
The auto profile defaults to nonrealtime settings. It switches to realtime, low-latency settings when a track has a live input.
On any change in setup, the GUI display updates and show-tracks command is executed automatically showing what to expect the next time the engine is started.
You can use the chains command to verify the Ecasound chain setup. (The Ecasound command cs-save-as mysetup.ecs will additionally store all engine data, effects as well as routing.)
chains
cs-save-as mysetup.ecs
The dump command displays data for the current track. The dumpall command shows all state that would be saved.
dump
dumpall
This is the same output that is written to the State.yml file when you issue the save command.
No latency compensation across signal paths is provided at present. This feature is under development.
If you are using Nama with the NetECI interface (i.e. if Audio::Ecasound is not installed) you should block TCP port 2868 if your computer is exposed to the Internet.
The following commands, available on Unixlike systems with Perl installed, will pull in Nama and other Perl libraries required for text mode operation:
cpanm Audio::Nama -or- PERL_MM_USE_DEFAULT=1 cpan Audio::Nama
cpanm Audio::Nama
PERL_MM_USE_DEFAULT=1 cpan Audio::Nama
To use the GUI, you will need to install Tk:
cpanm Tk
You may want to install Audio::Ecasound if you prefer not to run Ecasound in server mode:
cpanm Audio::Ecasound
You can pull the source code as follows:
git clone git://github.com/bolangi/nama.git
Consult the BUILD file for build instructions.
The Nama mailing list is a suitable forum for questions regarding Nama installation, usage, bugs, feature requests, etc.
http://www.freelists.org/list/nama
For questions and discussion related to Ecasound
https://lists.sourceforge.net/lists/listinfo/ecasound-list
The modules that make up this application are the preprocessed output from several source files. Patches against these source files are preferred.
Joel Roth, <joelz@pobox.com>
Alex Stone Brett McCoy Dubphil F. Silvain ++ Joy Bausch Julien Claassen ++ Kevin Utter Lars Bjørndal Philippe Schelté Philipp Überbacher Raphaël Mouneyres ++ Rusty Perez S. Massy ++
Copyright (c) 2009-2017 by Joel Roth.
This is free software; you can redistribute it and/or modify it under the terms of the "Perl Artistic License".
To install Audio::Nama, copy and paste the appropriate command in to your terminal.
cpanm
CPAN shell
perl -MCPAN -e shell install Audio::Nama
For more information on module installation, please visit the detailed CPAN module installation guide.