NAMA(1p)

๐Ÿ’– NAMA(1p) โ€” the manual page, but make it cute

NAMA(1p) ยท User Contributed Perl Documentation ยท NAMA(1p)


โœจ NAME โœจ

Nama โ€” it's a multitrack recorder and a digital audio workstation, bestie. That's the whole vibe. ๐ŸŽง


๐ŸŒธ SYNOPSIS ๐ŸŒธ

nama [options] [project-name]

๐Ÿฆ‹ DESCRIPTION ๐Ÿฆ‹

Okay so Nama is a multitrack audio application for recording, effects processing, editing, mixing, mastering and live performance. And not just that, it can also do general-purpose audio processing, like 5.1 to stereo conversion. ๐Ÿ’… Nama uses Ecasound as the audio processing engine, which is lowkey the whole motor of the operation.

๐ŸŽ€ Audio projects

Projects in Nama are audio networks of tracks and buses. Tracks may contain one or more RIFF (.wav) files, plus effects, sends, inserts, marks, regions, fades, edits and sequences. Like, tracks are the main character and they contain multitudes. โœจ

Tracks can host LADSPA, LV2 and Ecasound plugins. Audio regions may be altered, duplicated, time-shifted or replaced โ€” glow up, region bestie. ๐Ÿฆ‹

Audio processing happens in realtime when a track is played, and it 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. So yeah, projects can be managed using branches and tags, and they provide undo/redo. Periodt. ๐Ÿ’…

Nama supports some MIDI functionality via midish. ๐Ÿ™ˆ

๐ŸŒˆ Presets and templates

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. Reuse is the moment, no cap. ๐Ÿซถ

๐Ÿงš Audio device

Nama performs Audio IO via JACK or ALSA. Soundcard IO goes via JACK, if running, with transparent fallback to ALSA. It's giving "I got you either way". ๐Ÿ’–

Nama supports Ladish Level 1 session handling.

๐Ÿ‘‘ User interfaces

Nama has a 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. It's the friend who actually read the syllabus. ๐Ÿ“šโœจ


๐Ÿ’… OPTIONS ๐Ÿ’…

  • --gui, -g โ€” Start Nama in GUI mode (default when Tk is available)
  • --text, -t โ€” Start Nama in text mode
  • --config, -f โ€” Specify configuration file (default: ~/.namarc)
  • --project-root, -d โ€” Specify project root directory
  • --use-pwd, -p โ€” Use current dir for all WAV and project files
  • --create-project, -c โ€” Create project if it doesn't exist
  • --net-eci, -n โ€” Use Ecasound's Net-ECI interface
  • --libecasoundc, -l โ€” Use Ecasound's libecasoundc interface
  • --save-alsa, -a โ€” Save/restore alsa state with project data
  • --help, -h โ€” This help display
  • --regenerate-effects-cache, -r โ€” Regenerate the effects data cache

๐Ÿ› Debugging options ๐Ÿ›

  • --no-state, -M โ€” Don't load project state
  • --no-static-effects-data, -S โ€” Don't load effects data
  • --no-static-effects-cache, -C โ€” Don't load the effects data cache
  • --no-reconfigure-engine, -R โ€” Don't autosave, autoreconfigure or git snapshot
  • --fake-jack, -J โ€” Simulate JACK environment
  • --fake-alsa, -A โ€” Simulate ALSA environment
  • --no-ecasound, -E โ€” Don't spawn Ecasound process
  • --execute-command, -X โ€” Supply a command to execute
  • --no-terminal, -T โ€” Don't initialize terminal
  • --no-fades, -F โ€” No fades on transport start/stop
  • --log, -L โ€” Log these (comma separated) categories

๐Ÿ”ฅ CONTROLLING NAMA/ECASOUND ๐Ÿ”ฅ

The Ecasound audio engine is configured through use of chain setups that define the signal processing network. Think of it like the friend group chat but for audio signals. ๐Ÿซถ

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. She's the middleman AND the moment. ๐Ÿ’…

โœจ Configuration Commands โœจ

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.

โญ Realtime Commands โญ

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. Live tweaking, we love to see it. ๐ŸŽ›๏ธโœจ

๐ŸŒธ Configuration ๐ŸŒธ

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. She sets herself up, iconic behavior honestly. ๐Ÿ’…


๐ŸŽ€ Tk GRAPHICAL UI ๐ŸŽ€

Invoked by default if Tk is installed, this interface provides a subset of Nama's functionality on two windows:

๐Ÿ’– Main Window

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). Bestie is literally color-coding your life for you. ๐ŸŒˆ

๐Ÿ’œ Effects Window

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. Clicking things to make things happen = main character energy. โœจ

๐ŸŒŠ Waveform Window

Provides a conventional view with waveform and playback head. Classic. Iconic. No notes. ๐Ÿ‘‘

๐Ÿ–ฅ๏ธ Terminal Window

The command prompt is available the terminal window and provides access to all of Nama's functions. All of them. The full menu. ๐Ÿ’…


๐Ÿฆ‹ TEXT USER INTERFACE ๐Ÿฆ‹

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 "!".

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. Yeah it's a whole thing, but it slaps. โœจ

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. ๐ŸŽ€

Most commands have abbreviations, such as 'afx' for 'add-effect'. These are shown in the help listings. ๐Ÿ’…


๐Ÿ’– TRACKS ๐Ÿ’–

okay so every single track in Nama has two things going on: a cute descriptive name (like vocal, bestie) and an integer track-number that gets assigned the moment the track is born. New user tracks? They start out hanging with the Main bus, no cap. ๐ŸŒธ

Track output signals are usually mixed and then they pass through the Main track on their way to the soundcard for monitoring. It's giving main character energy, fr fr.

The following sections describe track attributes and their effects. Let's get into it. โœจ

โœจ Width โœจ

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. So you still get that stereo spread, periodt. ๐Ÿ’…

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. Iconic.

Specifying N channels for a track ('set width N') means N successive input channels will be recorded as an N-channel interleaved WAV file. That's the tea. ๐Ÿ“

๐ŸŽ›๏ธ REC/PLAY/MON/OFF ๐ŸŽ›๏ธ

Basic signal routing for each track is controlled by its setting to REC, MON, PLAY or OFF. Lowkey the whole vibe check right here.

  • 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. Not me getting ghosted by my own audio files ๐Ÿ˜ญ

๐ŸŽš๏ธ Track output ๐ŸŽš๏ธ

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. So it's the last stop before the sound leaves the building. ๐Ÿ”ฅ

๐ŸšŒ Bus setting ๐ŸšŒ

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. It's giving strict parent energy, but make it audio. ๐Ÿ‘‘

The mixplay command sets the Mixdown track to PLAY and the Main bus to OFF. Periodt.

๐Ÿ”ข Version Numbers ๐Ÿ”ข

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. So they're all matching, like a little squad. ๐Ÿ’–

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. Choose your own adventure, bestie. ๐ŸŒˆ

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. So zero is like, "I don't wanna decide, you pick." ๐Ÿ™ˆ

The Main bus version setting does not propagate to other buses. Sorry, no hand-me-downs. ๐Ÿ’€

๐Ÿ“ Marks ๐Ÿ“

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. Like, do the region first, then drop your marks. Order matters, iykyk. ๐ŸŽ€

โœ‚๏ธ Regions โœ‚๏ธ

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. Slay.

If you use named marks as endpoints, the region will change if the mark's position is adjusted. So it's lowkey reactive. ๐Ÿ‘€

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. Cloning yourself? Iconic behavior. ๐Ÿงš

You can control this region as you would any other other track, shifting the start time, applying effects, adjusting volume, etc. It's a whole track, just read-only. ๐Ÿ’œ

๐Ÿฆ‹ Using Tracks from Other Projects ๐Ÿฆ‹

The "link-track" clones a read-only track from another track, which may belong to a different project. It's giving cross-project collaboration, no cap. ๐Ÿซถ

โœจ Effects โœจ

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". So you're the director of this whole signal chain, bestie. ๐ŸŽฌ

๐ŸŒธ Fades ๐ŸŒธ

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. Fancy, right? ๐Ÿ’…

๐Ÿ’ซ Sends and Inserts ๐Ÿ’ซ

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. One is enough, don't be greedy. ๐Ÿ™ˆ

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. So it's fully drenched by default, periodt. ๐Ÿ’ฆ

Each track can have one pre-fader and one post-fader insert. Two slots, use them wisely. ๐Ÿ‘‘

๐ŸŽ€ Bunches ๐ŸŽ€

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. So like, a group chat but for tracks. ๐Ÿ’ฌ

๐ŸšŒ Buses ๐ŸšŒ

Buses enable multiple tracks to be routed through a single mix track before feeding the Main mixer bus (or possibly, another bus.) It's giving organizational queen energy. ๐Ÿ‘‘

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 ๐ŸŒˆ

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. So they're like little side quests for your audio. ๐Ÿ—บ๏ธ

๐Ÿ’– General Notes ๐Ÿ’–

Okay so, real talk bestie, here's the ground rules of routing:

  • Nama can call out to a track by its name or its track number, but Ecasound chain setups? Those only ever use the track number. No names, no exceptions. ๐Ÿ’…
  • The Main track (that's the mixer output btw) is always chain 1. The Mixdown track is always chain 2. Those numbers are not up for debate. ๐Ÿ‘‘
  • Whenever Nama needs to hook two tracks together, or let one track have multiple inputs or multiple outputs, it uses Ecasound loop devices. Heads up though: every single loop device adds one buffer, and one buffer = more latency. So they stack. ๐Ÿซ 

๐ŸŒˆ Flow Diagrams ๐ŸŒˆ

Let's actually look at the signal flow, starting from track 3, the first available user track. Pretend track 3 is named sax. ๐ŸŽท

We're splitting the flow into a track section and a mixer section. The numbers in parentheses are the chain id, iykyk.

The stereo outputs of every user track all end up at Main_in, which is a loop device sitting at the mixer input.

โœจ Track, REC status โœจ

Sound device   --+---(3)----> Main_in
  /JACK client   |
                 +---(R3)---> sax_1.wav

REC status means the source of the signal is the soundcard or the JACK client. That input signal gets written directly to a file โ€” except in the special preview and doodle modes, which we'll get to. ๐Ÿ™ˆ

โœจ Track, PLAY status โœจ

sax_1.wav ------(3)----> Main_in

๐ŸŽ€ Mixer, with mixdown enabled ๐ŸŽ€

In this second half of the flow graph, the mixed signal gets delivered to an output device through the Main chain, which is allowed to host effects. Usually the Main track is your final say before audio output or mixdown. Main character energy fr fr. ๐Ÿ‘‘

Main_in --(1)--> Main_out --+--------> Sound device
                            |
                            +-->(2)--> Mixdown_1.wav

๐Ÿ’œ Mastering Mode ๐Ÿ’œ

In mastering mode โ€” which you get into with master-on and out of with master-off โ€” the following network receives the Main track signal as its input and hands an output to the soundcard or a WAV file:

                 +- 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 all their default parameters are defined in the config file .namarc. ๐ŸŒธ

๐Ÿ’… Mixdown ๐Ÿ’…

The "mixdown" command configures Nama for mixdown. What it actually does: sets the Mixdown track to REC (same as "Mixdown rec") and turns the audio monitoring output off (same as "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 for branches other than the default master branch.) Corresponding encoded files get created if the mixdown_encodings option is set in .namarc. Acceptable values are a space-separated list. The default is "mixdown_encodings: ogg mp3". ๐ŸŽง

๐Ÿฆ‹ Preview, Doodle and Eager Modes ๐Ÿฆ‹

These non-recording modes, invoked by the "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. ๐Ÿซถ
  • The eager setting causes the engine to start immediately following a reconfiguration. โšก

โœจ Saving Projects โœจ

If git is available, your projects are saved automatically after each command, and it is not necessary to explicitly save your work. Iconic behavior honestly. ๐Ÿ’–

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" 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 without Git ๐ŸŽ€

"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 with Git ๐ŸŒธ

If git is available, Nama uses it to store snapshots of every step in the history of your project. Every single one. Timeline girlies stay winning.

When you type "save initial-mix", the latest snapshot gets tagged with the name "initial-mix", which you can recall later with the command "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".

You can also issue native git commands at the Nama prompt. Ngl that's a vibe. ๐Ÿ˜Ž

๐Ÿ’œ Git history example ๐Ÿ’œ

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. ๐Ÿ’€ Like, at all. Don't try it.

๐Ÿ™ˆ Exiting ๐Ÿ™ˆ

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. Rude but valid.

๐Ÿ“ Jack ports list file ๐Ÿ“

Use source filename 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. Left, right, left, right โ€” she's alternating, she's cunty. ๐Ÿ’…

๐Ÿงš Track edits ๐Ÿงš

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, so you can fix wrong notes, or swap one phrase out for another. ๐ŸŽต

Behind the scenes, the host track becomes the mix track to a bus. Sources for the bus are the original audio track, plus zero or more edits, each one represented by a hidden track. Sneaky. ๐Ÿ™ˆ

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
  • rec start point
  • 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. ๐Ÿ‘‡

๐Ÿ’– set-edit-points command ๐Ÿ’–

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.

๐Ÿ’– Specify points individually ๐Ÿ’–

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.

๐ŸŒŸ Create the edit ๐ŸŒŸ

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. ๐Ÿšซ

๐ŸŒˆ Merging edits ๐ŸŒˆ

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.


๐Ÿ”ฅ REMOTE CONTROL ๐Ÿ”ฅ

You can send commands to Nama from a remote process, and retrieve the result.

โš ๏ธ Understand that this code opens a remote execution hole. Fr fr. Be careful who you tell about this one, bestie. ๐Ÿšจ

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.


๐Ÿ’œ TEXT COMMANDS ๐Ÿ’œ

๐ŸŽ€ Help commands ๐ŸŽ€

help (h) โ€” Display help on Nama commands.

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 (hfx, he) โ€” Display detailed help on LADSPA or LV2 effects.

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 (ffx, fe) โ€” Display one-line help for effects matching the search string(s). Like, it's giving quick-lookup energy. ๐Ÿ”

Usage:

find-effect <string:keyword1> [ <string:keyword2>... ]

Examples:

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)

General commands ๐Ÿ’–

  • exit (quit, q) โ€” Exit Nama, saving settings (the current project). Bye bestie, your project is safe. ๐Ÿ‘‹
exit
  • memoize โ€” Cache WAV directory contents (default). It's the default vibe. โœจ
memoize
  • unmemoize โ€” Disable WAV directory caching. No cache, no problem. ๐Ÿšซ
unmemoize

Transport commands ๐Ÿš‚

  • stop (s) โ€” Stop transport. Stop the engine, when recording or playing back. Hit the brakes. ๐Ÿ›‘
stop
  • start (t) โ€” Start the transport rolling. Let's gooo! ๐Ÿš€
start

Example:

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 (gp) โ€” Get the current playhead position (in seconds). Where am I? ๐Ÿ“
getpos

Example:

start # Start the engine.  gp    # Get the current position of
the playhead. Where am I?
  • setpos (sp) โ€” Set current playhead position (in seconds). Teleport the playhead. โœจ
setpos <float:position_seconds>
setpos 65.5
  • forward (fw) โ€” Move playback position forwards (in seconds). Scoot forward. โฉ
forward <float:increment_seconds>
fw 23.7
  • rewind (rw) โ€” Move playback position backwards (in seconds). Rewind time. โช
rewind <float:decrement_seconds>
rewind 6.5
  • jump-to-start (beg) โ€” Set the playback head to the start. A synonym for setpos 0. Back to the beginning. ๐Ÿ”„
jump-to-start
  • jump-to-end (end) โ€” Set the playback head to end minus 10 seconds. Almost the end, but not quite. ๐Ÿ
jump-to-end
  • ecasound-start โ€” Ecasound-only start. Nama will not monitor the transport. For diagnostic use. Nerd mode: on. ๐Ÿงช
ecasound-start
  • ecasound-stop โ€” Ecasound-only stop. Nama will not monitor the transport. For diagnostic use. Nerd mode: off. ๐Ÿงช
ecasound-stop
  • restart-ecasound โ€” Restart the Ecasound process. May help if Ecasound has crashed or is behaving oddly. Have you tried turning it off and on again? ๐Ÿ”Œ
restart-ecasound
  • preview (song) โ€” Enter the preview mode. Configure Nama for playback and passthru of live inputs without recording (for mic test, rehearsal, etc.) Test the mic, rehearse, vibe. ๐ŸŽค
preview

Example:

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 (live) โ€” Enter doodle mode. Passthru of live inputs without recording. No playback. Intended for rehearsing and adjusting effects. Just doodle around. ๐ŸŽจ
doodle

Example:

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

Mix commands ๐ŸŽ›๏ธ

  • mixdown (mxd) โ€” Enter mixdown mode for subsequent engine runs. You will record a new mix each time you use the start command until you leave the mixdown mode using "mixoff". Mix it, record it, love it. ๐Ÿ’ฟ
mixdown

Example:

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 (mxp) โ€” Enter Mixdown play mode, setting user tracks to OFF and only playing the Mixdown track. Use "mixoff" to leave this mode. Only the mix, nothing else. ๐ŸŽง
mixplay

Example:

mixplay # Enter the Mixdown play mode.  start   # Play the
Mixdown track.  stop    # Stop playback.  mixoff  # Return to
normal mode.
  • mixoff (mxo) โ€” Leave the mixdown or mixplay mode. Sets Mixdown track to OFF, user tracks to MON. Back to normal. ๐Ÿ”„
mixoff
  • automix โ€” Normalize track volume levels and fix DC-offsets, then mixdown. Auto-magic mix. โœจ
automix
  • master-on (mr) โ€” Turn on the mastering mode, adding tracks Eq, Low, Mid, High and Boost, if necessary. The mastering setup allows for one EQ and a three-band multiband compression and a final boosting stage. Using "master-off" to leave the mastering mode. Master mode: activated. ๐Ÿ‘‘
master-on

Example:

mr    # Turn on master mode.  start # Start the playback.
      # Now you can adjust the Boost or global EQ.  stop  # Stop
the engine.
  • master-off (mro) โ€” Leave mastering mode. The mastering network is disabled. Master mode: off. ๐Ÿ›‘
master-off

Track commands ๐ŸŽต

  • add-track (add, new) โ€” Create a new audio track. New track, who dis? ๐ŸŽถ
add-track <string:name>
add-track clarinet # create a mono track called clarinet with
input # from soundcard channel 1.
  • add-midi-track (amt) โ€” Create a new midi track. MIDI time. ๐ŸŽน
add-midi-track <string:name>
add-midi-track clarinet
  • add-tracks โ€” Create one or more new tracks in one go. Bulk track energy. ๐Ÿ“ฆ
add-tracks <string:name1> [ <string:name2>... ]
add-tracks violin viola contra_bass
  • link-track (link) โ€” Create a read-only track, that uses audio files from another track. Link it up. ๐Ÿ”—
link-track [<string:project-name>] <string:track_name>
<string:link_name>

Example:

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 (import) โ€” Import a sound file (wav, ogg, mp3, etc.) to the current track, resampling it if necessary. The imported file is set as current version. Bring in the audio. ๐Ÿ“ฅ
import-audio <string:full_path_to_file> [ <integer:frequency> ]

Example:

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

Midi commands ๐ŸŽน

  • import-midi (im) โ€” Import a MIDI song file (MIDI tracks only) MIDI files only, bestie. ๐ŸŽผ
import-midi <string:full_path_to_file>

Track commands ๐ŸŽต

  • route-track (route, rt) โ€” Set source and send for a track (see 'source' and 'send' commands) Route it. ๐Ÿ›ฃ๏ธ
route-track <string:source_id> <string:send_id>
  • set-track โ€” Directly set current track parameters (use with care!). Careful, bestie. โš ๏ธ
set-track <string:track_field> <value>
  • record (rec) โ€” Set the current track to record its source. Creates the monitoring route if necessary. Recording to disk will begin on the next engine start. Use the "mon" or "off" commands to disable recording. Record time. ๐Ÿ”ด
record

Example:

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 โ€” Set the current track to playback the currently selected version. Creates the monitoring route if necessary. The selected audio file will play the next time the engine starts. Play it. โ–ถ๏ธ
play
  • mon โ€” Create a monitoring route for the current track at the next opportunity. Monitor vibes. ๐ŸŽง
mon
  • off โ€” Remove the monitoring route for the current track and all track I/O at the next opportunity. You can re-include it using "mon", "play" or "rec" commands. Turn it off. ๐Ÿ”‡
off
  • source (src, r) โ€” Set the current track's input (source), for example to a soundcard channel, or JACK client name Where's the input coming from? ๐ŸŽค
source <integer:soundcard_channel> | <string:jack_client_name> |
<string:jack_port_name> <string:jack_ports_list> | |
<string:track_name> | <string:loop_id> | 'jack' | 'null'

Example:

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 (aux) โ€” Set an aux send for the current track. Remove sends with remove-send . Send it. ๐Ÿ“ค
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 (nosend, noaux) โ€” Remove aux send from the current track. No send, no problem. ๐Ÿšซ
remove-send
  • stereo โ€” Configure the current track to record two channels of audio Stereo vibes. ๐ŸŽง
stereo
  • mono โ€” Configure the current track to record one channel of audio Mono vibes. ๐ŸŽ™๏ธ
mono
  • set-version (version, ver) โ€” Select a WAV file, by version number, for current track playback (Overrides a bus-level version setting) Pick a version. ๐Ÿ”ข
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 โ€” Remove the currently selected recording version from the current track after confirming user intent. This DESTRUCTIVE command removes the underlying audio file from your disk. Use with caution. ๐Ÿšจ DESTRUCTIVE! Like, it literally deletes the audio file from your disk. Use with caution, bestie. ๐Ÿ’€
destroy-current-wav
  • list-versions (lver) โ€” List WAV versions of the current track. This will print the numbers. Show me the versions. ๐Ÿ“‹
list-versions

list-versions ๐Ÿฆ‹

okay so this one just spits out your version numbers, like:

list-versions # May print something like: 1 2 5 7 9
              # The other versions might have been deleted earlier by you.

vol (v)

Changing or showing the current track's volume, bestie ๐Ÿ’– literally the one you'll type the most.

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 (c, cut)

Mutes the current track by lowering the volume parameter. Want it back? That's unmute's whole job ๐ŸŽ€

mute

unmute (nomute, C, uncut)

Restores the previous volume level. Works after mute or after solo, no cap.

unmute

unity

Sets the current track's volume to unity โ€” aka the default value (100% or 0 dB) ๐Ÿ’…

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 (sl)

Mutes everything except the current track (or whatever tracks/bunches you name). Reverse it with nosolo, periodt.

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 (nsl)

Unmutes all tracks that got muted by a solo. And listen: tracks that were already muted before the solo stay muted. That's the rule ๐Ÿซถ

nosolo

all

Unmutes every track that's currently muted. yes, all of them ๐Ÿ’€

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 (p)

Changes or shows the current panning position of the current track. Panning = sliding the audio across the stereo panorama between right and left, and the position is given in percent: 0 is hard left, 100 is hard right, and 50% is dead centre โœจ

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 (pr)

Pans the current track hard right โ€” it's a synonym for pan 100. Undo it with pan-back ๐Ÿฆ‹

pan-right

pan-left (pl)

Pans the current track hard left โ€” synonym for pan 0. Also reversible with pan-back.

pan-left

pan-center (pc)

Pans the current track to the centre โ€” synonym for pan 50. Yep, pan-back reverses this one too ๐Ÿ’–

pan-center

pan-back (pb)

Restores the current track's pan position from before the pan-left, pan-right or pan-center you just did. time travel but for panning โญ

pan-back

show-tracks (lt, show)

Shows you the whole squad: every track with its index number, volume, pan position, recording status and source ๐Ÿ‘‘

show-tracks

show-tracks-all (sha, showa)

Same as show-tracks but it drags the hidden tracks out too. Super useful for debugging ๐Ÿ™ˆ

show-tracks-all

๐ŸšŒ BUS COMMANDS ๐ŸšŒ

show-bus (shb)

Lists the tracks in the current bus, or in whichever bus you name.

show-bus [ <string:busname> ]

๐ŸŽง TRACK COMMANDS ๐ŸŽง

show-track (sh, -fart)

Full info dump on the current track: index, recording status, effects and controllers, inserts, the selected WAV version, and signal width (that's the channel count) ๐ŸŒˆ

show-track

โš™๏ธ SETUP COMMANDS โš™๏ธ

show-mode (shm)

Shows the current record/playback mode. It'll tell you the mode (doodle, preview, etc.) plus the possible record/playback settings ๐Ÿ’…

show-mode

๐ŸŽง TRACK COMMANDS ๐ŸŽง

show-track-latency (shl)

Shows the latency info for the current track. diagnostics girlies rise ๐Ÿซถ

show-track-latency

๐Ÿฉบ DIAGNOSTICS COMMANDS ๐Ÿฉบ

show-latency-all (shla)

Dumps all the latency data. every last crumb of it ๐Ÿ’€

show-latency-all

๐ŸŽง TRACK COMMANDS ๐ŸŽง

set-region (srg)

Picks a playback region for the current track using marks. Reverse it with remove-region โœจ

set-region <string:start_mark_name> <string:end_mark_name>
sax            # Select "sax" as the current track.
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 # Play only the audio from 2.5 to 120.5 seconds.

add-region

Makes a copy of the current track using the region definition you hand it. The original track? Untouched, untouched, untouched ๐Ÿ’–

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 sax_start 66.7 trimmed_sax # Create "trimmed_sax", a copy of "sax" with a region defined
                                      # from mark "sax_start" to 66.7 seconds.

remove-region (rrg)

Removes the region definition from the current track. And heads up โ€” if the current track is an auxiliary track, this removes the track itself ๐Ÿ˜ณ

remove-region

shift-track (shift, playat, pat)

Picks an initial delay before a track or region starts playing. unshift-track puts it back.

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 (unshift)

Restores the playback start time of a track or region back to 0 ๐ŸŒธ

unshift-track

modifiers (mods, mod)

Adds/shows modifiers for the current track (peep man ecasound for the deets). It's direct control over Ecasound track modifiers โ€” and ngl, you do not need it for normal work ๐Ÿ™ˆ

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 (nomods, nomod)

Removes modifiers from the current track. bye felicia ๐Ÿ‘‹

nomodifiers

normalize (ecanormalize)

Applies ecanormalize to the current track version โ€” it raises the gain/volume as far as possible without clipping and stores it that way on disk.

โš ๏ธ Note: this will permanently change the file. Not a vibe you can undo, bestie ๐Ÿ˜ญ
normalize

fixdc (ecafixdc)

Fixes the DC-offset of the current track using ecafixdc.

โš ๏ธ Note: this will permanently change the file. fr fr, be sure.
fixdc

autofix-tracks (autofix)

Applies ecafixdc and ecanormalize to all current versions of all tracks, set to playback (MON). one command, whole project glow-up โœจ

autofix-tracks

remove-track

Removes the current track along with its effects, inserts, etc. Your audio files are unchanged, promise ๐Ÿซถ

remove-track

๐Ÿ‘ฏ GROUP COMMANDS ๐Ÿ‘ฏ

bus-version (bver, gver)

Sets the default monitoring version for tracks in the current bus ๐Ÿ‘‘

bus-version

bus-on

Restores the tracks belonging to a bus after a bus-off.

bus-on

bus-off

Turns off the tracks belonging to the current bus.

bus-off

add-bunch (abn)

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 (lbn)

Shows a list of all the bunches and which tracks live in them ๐ŸŒธ

list-bunches

remove-bunch (rbn)

Removes the bunches you name. Note: it does not remove the tracks, only the grouping. the girlies are free ๐Ÿ’…

remove-bunch <string:bunch_name> [ <string:bunch_name> ] ...

add-to-bunch (atbn)

Adds track(s) to a bunch that already exists.

add-to-bunch <string:bunch_name> <string:track1> [ <string:track2> ] ...
add-to-bunch woodwind oboe sax flute

๐Ÿ“ PROJECT COMMANDS ๐Ÿ“

commit (cm)

Commits Nama's current state. yes, like that kind of commit ๐ŸŽ€

commit <string:message>

tag

Git tags the current branch HEAD commit.

tag <string:tag_name> [<string:message>]

branch (br)

Switches to the named branch.

branch <string:branch_name>

list-branches (lb, lbr)

Lists branches. that's it, that's the command ๐Ÿฆ‹

list-branches

new-branch (nbr)

Creates a new branch.

new-branch <string:new-branch_name> [<string:existing_branch_name>]

save-state (keep, save)

Saves the project settings as a file or a git snapshot โœจ

save-state [ <string:settings_target> [ <string:message> ] ]

get-state (get, recall, retrieve)

Retrieves project settings from a file or a snapshot.

get-state <string:settings_target>

list-projects (lp)

Lists all your projects. They live in the Nama project root directory, and this command knows where that is ๐Ÿ‘‘

list-projects

new-project (create)

Creates or opens a brand-new, empty Nama project.

new-project <string:new-project-name>
create jam

load-project (load)

Loads an existing project โ€” and it pulls from the default project state file. If you want a project state saved to a user-specific file, load the project first and then use get-state ๐Ÿ’–

load-project <string:existing_project-name>
load my_old_song

project-name (project, name)

Displays the name of the current project.

project-name

new-project-template (npt)

Makes a project template out of the current project. Tracks and busses included, no cap ๐ŸŒˆ

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 (upt, apt)

Uses a template to create tracks in a newly created, empty project. cute and efficient, main character energy โœจ

use-project-template <string:template_name>
apt my_band_setup # Will add all the tracks for your basic band setup.

list-project-templates (lpt)

Lists all project templates.

list-project-templates

destroy-project-template

Removes one or more project templates. rip to them ๐Ÿ’€

destroy-project-template <string:template_name1> [ <string:template_name2> ] ...

โš™๏ธ SETUP COMMANDS โš™๏ธ

generate (gen)

Generates an Ecasound chain setup for audio processing, by hand ๐Ÿ‘‘ Mainly useful for diagnostics and debugging.

generate
  • arm โ€” Generates and connects a full setup so you can record or play back. And if you're currently in dodle or preview mode? This brings you back to normal mode, no cap. ๐ŸŽ€
arm
  • arm-start (also arms) โ€” Does the whole generate-and-connect thing and then starts, so you can go directly to recording or listening to your tracks. Instant main character energy. โœจ
arm-start
  • connect (also con) โ€” Connects the setup so everything is ready to run. If you're using JACK, Nama will connect to all the necessary JACK ports. ๐Ÿ”Œ
connect
  • disconnect (also dcon) โ€” Disconnects the setup. If you're running with JACK, it disconnects from all the JACK ports. Bye bestie ๐Ÿ’…
disconnect
  • show-chain-setup (also chains) โ€” Shows the underlying Ecasound chain setup for whatever your current working condition is. Mainly useful for diagnostics and debugging. ๐Ÿ•ต๏ธ
show-chain-setup
  • loop (also l) โ€” Loops the playback between two points. Can be stopped with loop_disable.
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>

Like, for real:

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 (also nl) โ€” Disables looping. That's it, that's the whole job. ๐Ÿ›‘
noloop

๐ŸŽ›๏ธ Effect commands ๐ŸŽ›๏ธ

  • add-controller (also acl) โ€” Adds a controller to an effect (the current effect by default). Controllers can be modified by using mfx and removed using rfx. ๐ŸŒˆ
add-controller [ <string:operator_id> ] <string:effect_code> [ <float:param1> <float:param2> ] ...

Watch it cook:

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 (also afx) โ€” Adds an effect. โœจ
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.

Here's the vibe:

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 (also afxl) โ€” Same as add-effect last. ๐Ÿ‘‘
add-effect-last <fx_alias> [ <float:param1> <float:param2>... ]
  • add-effect-first (also afxf) โ€” Same as add-effect first. ๐Ÿ‘‘
add-effect-first <fx_alias> [ <float:param1> <float:param2>... ]
  • add-effect-before (also afxb insert-effect ifx) โ€” Same as add-effect before. ๐Ÿ‘‘
add-effect-before <fx_alias> <fx_alias> [ <float:param1> <float:param2>... ]
  • modify-effect (also mfx) โ€” Modifies effect parameter(s), periodt. ๐Ÿ› ๏ธ
modify-effect [ <fx_alias> ] <integer:parameter> [ + | - | * | / ] <float:value>

fx_alias can be: a position, effect ID, nickname or effect code.

Observe:

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 (also rfx) โ€” Removes effects. They don't have to be on the current track, so go wild. ๐Ÿ—‘๏ธ
remove-effect <fx_alias1> [ <fx_alias2> ] ...
  • position-effect (also pfx) โ€” Positions an effect before another effect (use 'ZZZ' for end). ๐Ÿ“
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 (also sfx) โ€” Shows information about an effect, defaulting to the current effect. ๐Ÿ”
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 (also dfx) โ€” Dumps all data of the current effect object. ๐Ÿซ—
dump-effect
  • list-effects (also lfx) โ€” Prints a short list of all effects on the current track, only including unique ID and effect name. Short and sweet fr fr. ๐Ÿ“‹
list-effects
  • add-insert (also ain) โ€” Adds an external send/return insert to the current track. ๐ŸŽ€
add-insert External: ( pre | post ) <string:send_id> [ <string:return_id> ] Local wet/dry: local

Look at this:

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 (also wet) โ€” Sets the wet/dry balance of the insert for the current track. The balance is given in percent, 0 meaning dry and 100 wet signal only. ๐Ÿ’ง
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 (also rin) โ€” Removes an insert from the current track. ๐Ÿšฎ
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 (also crg) โ€” Lists all Ecasound controllers. Controllers include linear controllers and oscillators. ๐ŸŒŠ
ctrl-register
  • preset-register (also prg) โ€” Lists all Ecasound effect presets. See the Ecasound manpage for more detail on effect_presets. ๐Ÿ“š
preset-register
  • ladspa-register (also lrg) โ€” Lists installed LADSPA plugins. ๐Ÿ’ฝ
ladspa-register

๐Ÿ“ Mark commands ๐Ÿ“

  • list-marks (also lmk lm) โ€” Lists all marks with index, name and their respective positions in time. โฑ๏ธ
list-marks
  • to-mark (also tmk tom) โ€” Moves the playhead to the named mark or mark index. ๐Ÿฆ‹
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 (also mark amk k) โ€” Drops a new mark at the current playback position. This will fail, if a mark is already placed on that exact position. ๐Ÿšจ
add-mark [ <string:mark_id> ]
mark start # Create a mark named "start" at the current position.
  • remove-mark (also rmk) โ€” Removes a mark. ๐Ÿ’…
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 (also nmk) โ€” Moves the playhead to the next mark. โญ๏ธ
next-mark
  • previous-mark (also pmk) โ€” Moves the playhead to the previous mark. โฎ๏ธ
previous-mark
  • name-mark โ€” Gives a name to the current mark. ๐Ÿท๏ธ
name-mark <string:mark_name>
  • modify-mark (also move-mark mmk) โ€” Changes the position (time) of the current mark. ๐Ÿ•ฐ๏ธ
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.

๐Ÿ” Diagnostics commands ๐Ÿ”

  • engine-status (also egs) โ€” Displays the Ecasound audio processing engine status. ๐Ÿฉบ
engine-status
  • dump-track (also dump) โ€” Dumps current track data. ๐Ÿ“ฆ
dump-track
  • dump-group (also dumpg) โ€” Dumps group settings for user tracks. ๐Ÿ“ฆ
dump-group
  • dump-all (also dumpa) โ€” Dumps most internal state data. Like, most of it. ๐Ÿซ 
dump-all
  • dump-io โ€” Shows chain inputs and outputs. ๐Ÿ”„
dump-io

๐Ÿ†˜ Help commands ๐Ÿ†˜

  • list-history (also lh) โ€” Lists the command history. Every project stores its own command history. ๐Ÿง 
list-history

๐ŸšŒ Bus commands ๐ŸšŒ

  • add-submix-cooked โ€” Creates a submix using all tracks in bus "Main". ๐Ÿณ
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 (also asr) โ€” Adds a submix using tracks in Main bus (unprocessed signals, lower latency). ๐Ÿฅฉ
add-submix-raw <string:name> <destination>
asbr Reverb jconv # Add a raw send bus called Reverb, with its output
  • add-bus (also abs) โ€” Adds a sub bus. This is a bus, as known from other DAWs. The default output goes to a mix track and that is routed to the mixer (the Main track). All busses begin with a capital letter! ๐Ÿ‘‘๐Ÿ” 
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 (also usm) โ€” Includes tracks added since the submix was created. โž•
update-submix <string:name>
update-submix Reverb
  • remove-bus โ€” Removes a bus or submix. ๐Ÿ—‘๏ธ
remove-bus <string:bus_name>
  • list-buses (also lbs) โ€” Lists buses and their parameters (TODO). ๐Ÿ“
list-buses
  • set-bus (also sbs) โ€” Sets bus parameters. This command is intended for advanced users. ๐Ÿง‘โ€๐Ÿ”ฌ
set-bus <string:busname> <key> <value>

๐ŸŽ›๏ธ Effect commands ๐ŸŽ›๏ธ

  • overwrite-effect-chain (also oec) โ€” Creates a new effect chain, overwriting an existing one of the same name. โš ๏ธ Yeah, the old one is gone gone.
overwrite-effect-chain

Same as for new-effect-chain.

  • new-effect-chain (also nec) โ€” Creates an effect chain, a named list of effects with all parameter settings. Useful for storing effect setups for particular instruments. ๐ŸŽ
new-effect-chain <string:name> [ <effect_id_1> <effect_id_2>... ]

โ€ฆand here's the rest of that little sample block, bestie โœจ

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 (aka dec, destroy-effect-chain)

Deletes an effect chain definition. It does not touch the project state. And heads up ๐Ÿ‘€ โ€” this one is not reversible by undo, so like, mean it when you hit enter.

delete-effect-chain <string:effect_chain_name>

๐Ÿ”Ž find-effect-chains (aka fec, lec)

Dumps effect chains, filtering on key pairs if you hand some over. No keys? You get the whole pile.

find-effect-chains [ <string:key_1> <string:value_1> ] ...
fec   # List all effect chains with their effects.

๐Ÿซถ find-user-effect-chains (aka fuec, leca)

Lists all the user created effect chains, and yes it'll match your key/value pairs if you provided any.

find-user-effect-chains [ <string:key_1> <string:value_1> ] ...

๐Ÿ™ˆ bypass-effects (aka bypass, bfx)

Bypasses effects on the current track. Give it no parameters and it just defaults to bypassing the current effect, nbd.

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 (aka restore-effects, bbfx)

Restores effects, un-bypassing the vibe. No parameter? Default is restoring the current effect.

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 (aka nep)

Makes a new effect profile. An effect profile is a named group of effect chains for multiple tracks โ€” extremely useful for storing a basic template of standard effects for a whole group of instruments, like a drum kit. It's giving "save my setup so I never type it again" energy. ๐Ÿ‘‘

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 (aka aep)

Applies an effect profile. It'll add all the effects in it to the list of tracks stored inside the effect profile. Note: you must give the tracks the same names as in the original project where you created the effect profile. Same names or it simply will not find them, fr fr.

apply-effect-profile <string:effect_profile_name>

๐Ÿ’€ destroy-effect-profile

Deletes an effect profile. This deletes the effect profile definition from your disk. All projects that use this effect profile will NOT be affected โ€” they're safe, chill.

destroy-effect-profile <string:effect_profile_name>

๐ŸŒธ list-effect-profiles (aka lep)

Lists all effect profiles. All of them. Every single one.

list-effect-profiles

๐Ÿฆ‹ show-effect-profiles (aka sepr)

Lists effect profile. Yep, that's the whole bit. ๐Ÿซถ

show-effect-profiles

๐ŸŒˆ full-effect-profiles (aka fep)

Dumps the effect profile data structure โ€” the whole raw situation.

full-effect-profiles

๐ŸŽง Track commands

โญ cache-track (aka cache, ct, bounce, freeze)

Caches the current track. Same thing as freezing or bouncing. This is your bestie when the project is huge or the CPU is low-power, because effects don't have to be recomputed on subsequent engine runs. Cache_track stores the effects-processed output of the current track as a new version (WAV file), and that becomes the current version. The current effects, inserts and region definition are removed and stored. To go back to the original track state, use the uncache-track command. The show-track display appends a "c" to version numbers created by cache-track (and therefore reversible by uncache).

cache-track [ <float:additional_processing_time> ]
cache 10   # Cache the curent track and append 10 seconds extra time,

๐Ÿ’œ Effect commands

๐Ÿ“ uncache-track (aka uncache, unc)

Selects the uncached track version. This restores effects, but not inserts. Not the inserts. Just so we're clear. ๐Ÿ‘€

uncache-track

๐Ÿงš General commands

โœจ do-script (aka do)

Executes Nama commands from a file in the main project's directory or in the Nama project root directory. A script is just a list of Nama commands, exactly like you'd type them on the Nama prompt.

do-script <string:filename>
do prepare_my_drums   # Execute the script prepare_my_drums.

๐Ÿ”Ž scan

Re-reads the project's .wav directory. Mainly useful for troubleshooting, iykyk.

scan

๐Ÿ’– Effect commands

๐ŸŽ€ add-fade (aka afd, fade)

Adds a fade-in or fade-out to the current track. Iconic behaviour, minimal effort.

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 (aka rfd)

Removes a fade from the current track. Bye fade ๐Ÿ’…

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 (aka lfd)

Lists all fades.

list-fade

๐ŸŽง Track commands

๐Ÿ’œ add-comment (aka comment, ac)

Adds a comment to the current track, and yes it replaces any previous comment. A comment can be a short description, notes on instrument settings, whatever you want to remember.

add-comment <string:comment>
ac "Guitar, treble on 50%"

๐Ÿ“ remove-comment (aka rc)

Removes a comment from the current track. Gone. Poof.

remove-comment

โœจ show-comment (aka sc)

Shows the comment for the current track.

show-comment

๐ŸŒˆ show-comments (aka sca)

Shows all track comments. All of them at once, the whole group chat. ๐Ÿ’ฌ

show-comments

๐Ÿฆ‹ add-version-comment (aka avc)

Adds a version comment, replacing any previous user comment. This adds a comment for the current version of the current track โ€” so it's comment-per-take, cute.

add-version-comment <string:comment>
avc "The good take with the clear 6/8"

๐Ÿ™ˆ remove-version-comment (aka rvc)

Removes version comment(s) from the current track.

remove-version-comment

โญ show-version-comment (aka svc)

Shows version comment(s) of the curent track.

show-version-comment

๐ŸŽ€ show-version-comments-all (aka svca)

Shows all version comments for the current track.

show-version-comments-all

๐Ÿ’… add-system-version-comment (aka asvc)

Sets a system version comment. Useful for testing and diagnostics โ€” very much a behind-the-scenes, not-for-the-feed situation.

add-system-version-comment <string:comment>

๐ŸŽฌ Edit commands

โœจ new-edit (aka ned)

Creates an edit for the current track and version. Fresh edit, blank canvas, main character energy.

new-edit

๐Ÿ“ set-edit-points (aka sep)

Marks play-start, record-start and record-end positions for the current edit. Three little pins in the timeline ๐ŸŽฏ

set-edit-points

๐Ÿ—’๏ธ list-edits (aka led)

Lists all edits for the current track and version.

list-edits

๐Ÿ‘† select-edit (aka sed)

Selects an edit to modify or delete. After selection, it is the current edit.

select-edit <integer:edit_index>

๐Ÿšช end-edit-mode (aka eem)

Switches back to normal playback/record mode. The track will play full length again. Edits are managed via a sub-bus, fyi.

end-edit-mode

๐Ÿ’€ destroy-edit

Removes an edit and all associated audio files. No parameter? Default is to destroy the current edit.

Note: the data will be lost permanently. Use with care! ๐Ÿ˜ญ
destroy-edit [ <integer:edit_index> ]

๐Ÿ”Š preview-edit-in (aka pei)

Plays the track region without the edit segment. So you hear what's left when the edit is taken out.

preview-edit-in

๐ŸŽง preview-edit-out (aka peo)

Plays the removed edit segment. Just the chunk that got cut. ๐Ÿ‘€

preview-edit-out

โ–ถ๏ธ play-edit (aka ped)

Plays a completed edit.

play-edit

โบ๏ธ record-edit (aka red)

Records an audio file for the current edit.

record-edit

๐ŸŽฏ edit-track (aka et)

Sets the edit track as the current track.

edit-track

๐Ÿช„ host-track-alias (aka hta)

Sets the host track alias as the current track.

host-track-alias

๐Ÿ  host-track (aka ht)

Sets the host track (the edit sub-bus mix track) as the current track.

host-track

๐ŸŒˆ version-mix-track (aka vmt)

Sets the version mix track as the current track.

version-mix-track

๐Ÿ“ play-start-mark (aka psm)

Selects (and moves to) the play start mark of the current edit.

play-start-mark

๐Ÿ”ด rec-start-mark (aka rsm)

Selects (and moves to) the rec start mark of the current edit.

rec-start-mark

๐Ÿ rec-end-mark (aka rem)

Selects (and moves to) the rec end mark of the current edit.

rec-end-mark

โšก set-play-start-mark (aka spsm)

Sets play-start-mark to the current playback position.

set-play-start-mark

โšก set-rec-start-mark (aka srsm)

Sets rec-start-mark to the current playback position.

set-rec-start-mark

โšก set-rec-end-mark (aka srem)

Sets rec-end-mark to current playback position.

set-rec-end-mark

๐Ÿ™… disable-edits (aka ded)

Turns off the edits for the current track and plays back the original WAV file. This removes the edit bus entirely.

disable-edits

๐Ÿงฌ merge-edits (aka med)

Mixes edits and original into a new host-track. This writes a new audio file to disk, and the host track will have a new version for this. Glow up achieved. โœจ

merge-edits

๐ŸŽง Track commands

๐Ÿ’ฅ explode-track

Makes the current track into a sub bus, with one track for each version. One track per version, no cap.

explode-track

๐Ÿšš move-to-bus (aka mtb)

Moves the current track to another bus. A new track is always in the Main bus โ€” so to reverse this action, use move-to-bus Main.

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 (aka pvt)

Creates a read-only track using the specified version of the current track. It said "you're a track now," and it was. ๐Ÿ’…

promote-version-to-track <integer:version_number>

๐Ÿงš General commands

๐Ÿ”„ read-user-customizations (aka ruc)

Re-reads the user customizations file 'custom.pl'. Refresh, bestie.

read-user-customizations

โš™๏ธ Setup commands

โฑ๏ธ limit-run-time (aka lr)

Stops recording after the last audio file finishes playing. Can be turned off with limit-run-time_off.

limit-run-time [ <float:additional_seconds> ]

๐Ÿ›‘ limit-run-time-off (aka lro)

Disables the recording stop timer.

limit-run-time-off

โ–ถ๏ธ offset-run (aka ofr)

Records/plays from a mark, rather than from the start โ€” i.e. not from 0.0 seconds. Skip the intro, go straight to the good part.

offset-run <string:mark_name>

โ†ฉ๏ธ offset-run-off (aka ofro)

Turns back to starting from 0.

offset-run-off

General commands ๐Ÿ’ฌ

  • view-waveform, wview โ€” pops open mhwavedit so you can look at (and mess with) the waveform of the current track โœจandโœจ the current version. Heads up bestie: this one needs Nama running in a graphical terminal, like xterm or gterm, or started from GNOME with alt+F2. No pretty terminal, no pretty waveform, periodt.
view-waveform
  • edit-waveform, wedit โ€” launches audacity to view/edit the waveform of the current track and version. Same deal as above, it's giving graphical-terminal energy only: start Nama from xterm or gterm, or from GNOME using alt+F2 ๐ŸŒธ
edit-waveform

Setup commands ๐ŸŽ€

  • rerecord, rerec โ€” record exactly like you did before ๐Ÿซถ It sets every track to record that you had just recorded right before you listened back. Deja vu, but make it productive.
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.

Track commands ๐ŸŽง

  • analyze-level, anl โ€” prints the Ecasound amplitude analysis for the current track. You get the highest volume plus the stats, so you can actually see how hot your signal is ๐Ÿ”ฅ
analyze-level

General commands ๐Ÿ’ฌ

  • for โ€” runs one or more commands across several tracks at once. Group-chat commands, basically ๐Ÿ‘‘
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

Project commands ๐Ÿ—‚๏ธ

  • git โ€” runs a git command inside the project directory. Yes, your mix has version control. Iconic.
git <string:command_name> [arguments]

Track commands ๐ŸŽง

  • edit-rec-setup-hook, ersh โ€” edit the REC hook script for the current track.
edit-rec-setup-hook
  • edit-rec-cleanup-hook, erch โ€” edit the REC cleanup hook script for the current track.
edit-rec-cleanup-hook
  • remove-fader-effect, rffx โ€” removes the vol, pan or fader from the current track. Pick exactly one, bestie ๐Ÿ’…
remove-fader-effect vol | pan | fader
  • rename-track โ€” renames a track and its WAV files. Not me giving your files a whole new identity โœจ
rename-track <string:old_track> <string:new_track>

Sequence commands ๐Ÿฆ‹

  • new-sequence, nsq โ€” define a brand new sequence.
new-sequence <string:name> <track1, track2,...>
  • select-sequence, slsq โ€” makes the named sequence the current sequence.
select-sequence
  • list-sequences, lsq โ€” lists every user sequence you've got.
list-sequences
  • show-sequence, ssq โ€” displays the clips that make up the current sequence.
show-sequence
  • append-to-sequence, asq โ€” appends items to a sequence, lowkey the easiest way to grow one.
append-to-sequence [<string:name1>,...]
asq chorus # append chorus track to current sequence
asq        # append current track to current sequence
  • insert-in-sequence, isq โ€” inserts items into a sequence before index i.
insert-in-sequence <string:name1> [<string:name2>,...] <integer:index>
  • remove-from-sequence, rsq โ€” removes items from a sequence.
remove-from-sequence <integer:index1> [<integer:index2>,...]
  • delete-sequence, dsq โ€” deletes an entire sequence. No takebacks ๐Ÿ’€
delete-sequence <string:sequence>
  • add-spacer, asp โ€” adds a spacer to the current sequence at the position you specify, or appends it if you don't give a position ๐ŸŒธ
add-spacer <float:duration> [<integer:position>]
  • convert-to-sequence, csq โ€” converts the current track into a sequence.
convert-to-sequence
  • merge-sequence, msq โ€” caches the current sequence mix track and sets it to PLAY. Chef's kiss.
merge-sequence
  • snip โ€” creates a sequence from the current track by removing the region(s) defined by the mark pair(s). Heads up: this is not supported if the current track is already a sequence ๐Ÿšซ
snip <mark_pair1> [<mark_pair2>...]
snip cut1-start cut1-end cut2-start cut2-end

That one removes the cut1 and cut2 regions from the current track by creating a sequence โœ‚๏ธ

  • compose, compose-sequence, compose-into-sequence โ€” composes a new sequence out of the region(s) of the named track, defined by the mark pair(s). If a sequence with that name already exists, it appends the regions to it instead (that's the compose-into-sequence behaviour, bestie).
compose <string:sequence_name> <string:trackname> <mark_pair1> [<mark_pair2>...]
compose speeches conference-audio speaker1-start speaker1-end speaker2-start speaker2-end

That creates a "speeches" sequence with two clips, one for speaker1 and one for speaker2 ๐Ÿ‘‘


General commands ๐Ÿ’ฌ

  • undo โ€” rolls back the last commit. (Pro tip: use "git log" to see the specific commands.) Note: redo is not supported yet. Yeah. It's giving cliffhanger ๐Ÿ˜ญ
undo
  • redo โ€” restores the last undone commit. (TODO) โ€” so, not yet, bestie, we're manifesting it ๐Ÿ™ˆ
redo
  • show-head-commit, show-head, last-command, last โ€” shows the last commit, i.e. the one that undo would roll back. And yes, a single commit can hold multiple commands. A whole group chat in one message.
show-head-commit

Mode commands ๐ŸŒˆ

  • eager โ€” sets eager mode. On or off, no in-between.
eager on | off

Engine commands ๐Ÿ”ฅ

  • new-engine, neg โ€” starts a named Ecasound engine, or binds to one that already exists.
new-engine <string:engine_name> <integer:port>
  • select-engine, seg โ€” selects an ecasound engine. (advanced users only!) Like, genuinely, this is main-character-only territory ๐Ÿ‘‘
select-engine <string:engine_name>

Track commands ๐ŸŽง

  • set-track-engine-group, steg โ€” sets the current track's engine affiliation.
set-track-engine-group <string:engine_name>

Bus commands ๐ŸšŒ

  • set-bus-engine-group, sbeg โ€” sets the current bus's engine affiliation.
set-bus-engine-group <string:engine_name>
  • select-submix, ssm โ€” sets the target for the trim command.
select-submix <string:submix_name>
  • trim-submix, trim, tsm โ€” controls a submix fader. Very "one slider to rule them all" of it.
trim-submix
# reduce vol of current track in in_ear_monitor by 3dB
select-submix in_ear_monitor
trim vol - 3

Effect commands โœจ

  • nickname-effect, nfx, nick โ€” adds a nickname to the current effect (and creates an alias for you, bestie) ๐Ÿ’–
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, dnd โ€” deletes a nickname definition. Important: effects that were already named keep their names ๐Ÿซถ
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, rnick โ€” removes the "name" attribute of the current effect.
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, lnd โ€” lists all your defined nicknames ๐ŸŽ€
list-nickname-definitions
  • set-effect-name, sen โ€” sets a nickname only, without creating an alias.
set-effect-name <string:name>
  • set-effect-surname, ses โ€” sets an effect surname. Yes, effects have surnames now, we're fancy ๐Ÿ’…
set-effect-surname <string:surname>
  • remove-effect-name, ren โ€” removes the current effect name.
remove-effect-name
  • remove-effect-surname, res โ€” removes the current effect surname.
remove-effect-surname

Track commands ๐ŸŽง

  • select-track โ€” sets a particular track as the current (or default) track, the one all the track-related commands get executed against.
select-track <string:track-name> | <integer:track-number>

commands ๐ŸŒˆ

  • edit-tempo-map, etm โ€” edit the tempo map file ๐ŸŽผ
edit-tempo-map

Midi commands ๐ŸŽน

  • set-tempo, tempo, tp โ€” sets the MIDI tempo in bpm, no cap.
set-tempo <integer:tempo-setting>

General commands ๐Ÿ’ฌ

  • set-sample-rate, ssr โ€” configures the sample rate for the current project, or just reports the sample rate if you hand it no parameter. It's giving "ask and you shall receive" ๐ŸŒŸ
set-sample-rate <integer:sample-rate>

REALTIME OPERATION โšก

Nama picks its 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 ๐ŸŒˆ And bestie, real talk: for the best realtime operation under JACK you'll have to configure jackd appropriately as well. Nama can't do that part for you ๐Ÿซถ

The realtime and auto profiles are the ones you want when you're 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. Snappy.

The nonrealtime profile uses a bigger buffer, which gives you extended margins for stable operation. It's suitable for post-processing, or for recording without live monitoring responsibilities. Chill vibes, stable vibes ๐Ÿ˜Œ

The auto profile defaults to nonrealtime settings. It switches to realtime, low-latency settings when a track has a live input. Truly the main character โ€” it just knows โœจ


DIAGNOSTICS ๐Ÿฉบ

On any change in setup, the GUI display updates and the "show-tracks" command is executed automatically, showing you exactly what to expect the next time the engine is started ๐Ÿ‘€

You can use the "chains" command to verify the Ecasound chain setup. (And the Ecasound command "cs-save-as mysetup.ecs" will additionally store all engine data โ€” effects as well as routing. Look at that, full receipts ๐Ÿ’…)

The "dump" command displays data for the current track. The "dumpall" command shows all state that would be saved.

And this is the same output that gets written to the State.yml file when you issue the "save" command. Consistent, as it should be ๐Ÿ’–


BUGS AND LIMITATIONS ๐Ÿ’€

No latency compensation across signal paths is provided at present. This feature is under development โ€” so, like, it's coming, bestie, we're just not there yet ๐Ÿ™ˆ


SECURITY CONCERNS ๐Ÿšจ

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. Yes, seriously. Lock that door ๐Ÿ”’


INSTALLATION ๐Ÿงš

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"

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"

And consult the BUILD file for build instructions ๐Ÿ“ฆ


SUPPORT ๐Ÿซถ

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

๐Ÿฉน PATCHES

So like, the modules that make up this whole application are the preprocessed output from several source files, okay? Which means if you wanna patch something, patches against those source files are preferred. That's the move. That's the vibe. Sending a patch against the generated module output? Bestie, no. Go to the source. ๐Ÿ‘‘


โœจ AUTHOR

That would be Joel Roth, <joelz@pobox.com> โ€” the icon, the legend, the main character who wrote this whole thing ๐Ÿ’–


๐Ÿซถ CONTRIBUTORS

The whole squad, and we are obsessed with every single one of them:

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 ++

(You'll notice a couple of them are marked with ++ there โ€” that's literally in the original, so we're keeping it exactly as-is, no edits, periodt. ๐Ÿ’…)


Copyright (c) 2009-2017 by Joel Roth.

This is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, Version 3.

Like, actually free. Free as in go read the license and enjoy your freedoms, bestie. ๐ŸŒˆ

And that's a wrap on the whole NAMA(1p) page, babes ๐ŸŽ€โœจ this one shipped with perl v5.40.1 and was dated 2026-05-06 โ€” so if you ever see that version and date at the bottom of the page, you know exactly which cutie you're reading. Go make some noise. ๐Ÿ’œ๐Ÿฆ‹๐ŸŒธ

๐Ÿ“ฆ where this page comes from