Nama

Easy multitrack recording with Ecasound

Mon, 16 Feb 2026

Basic Recording

This should give you some idea what to do and what to expect. Tab completion and command shortcuts are available to reduce typing.

Formatting key:

$ shell commands, typed at the terminal's shell prompt

nama> nama commands, typed at the Nama prompt

nama untitled bass> The prompt includes project name and selected track 

| a response from Nama

# a comment



$ nama

[ startup messages, defaults to "untitled" project ]

We create a project, 'mysong' with a track 'bass', which is now the current track.

nama Main> create mysong 

nama mysong Main> add-track bass

The prompt indicates the project and currently selected track.

nama mysong bass>

For simplicity, I'll remove the project name from the prompt in the rest of this tutorial.

nama bass>

Now we set the source:

nama bass> source 3

| Track bass: source set to soundcard channel 3

The soundcard definition and other configuration info resides in ~/.namarc

nama bass> show-tracks

|  No. Name            Status     Source            Destination   Vol   Pan
| =========================================================================
|   1  Main            MON        Main bus          CH 1/2          0    50
|   2  Mixdown         OFF        --                --             --    --
|   3  bass            REC v1     3                 Main bus        0    50

Track 'bass' is set to record version 1 (take 1) from soundcard channel 3. There is also a signal path to the mixer output. The effects-processed output of track 'bass' belongs to the 'Main' (default) bus, which means its output feeds track 'Main'. 'Main' hosts the final fader controls before the mixed signal goes to the soundcard output channels 1 and 2. The level of the volume fader is in dB, so zero in the listing about means 100%.(Note 1)

Suppose that we don't need any audio monitoring, and we want to only record. We could just mute the output.

nama bass> select-track Main; mute

As you see, multiple commands can be separated by semicolons. Since selecting a track by name or number and then performing actions on that track is common, you can just prepend the track name or number to any command.

nama bass> 1 mute

nama Main> show-track

    |  No. Name       Requested  Status  Source                Destination   Vol   Pan
    | ================================================================================
|   1  Main                  MON     Main bus              CH 1/2        -96    50
    | 
    | Bus: Null
    | Signal width: stereo
    | A Pan epp
    |     1. Level %: 50
    | B Volume ea
    |     1. Level %: 0

However, let's remove the signal path entirely. That's one less audio stream to process.

nama Main> off

The command is applied to the 'Main' track because, as the prompt confirms, 'Main' is selected as the current track.

The change in audio routing triggers a reconfiguration and a fresh track display showing the updated status.

|  No. Name            Status     Source            Destination   Vol   Pan
| =========================================================================
|   1  Main            OFF        Main bus          --            -96    50
|   2  Mixdown         OFF        --                --             --    --
|   3  bass            REC v1     3                 Main bus        0    50

Because the engine is configured, Nama prints the following:

| Now at: 0:00
|
| Engine is ready.
|
| Press SPACE to start or stop engine

It looks like we're ready to go. To be sure, Let's check the Ecasound audio network definition.

nama> chains

| # ecasound chainsetup file
| 
| # general
| 
| -z:mixmode,sum -b 256 -z:db,100000 -z:nointbuf
| 
| # audio inputs
| 
| -a:R3 -i:alsa,default
| 
| # post-input processing
| 
| -a:R3 -chmove:3,1 
| 
| # audio outputs
| 
| -a:R3 -f:s16_le,1,44100,i -o:/home/jroth/nama/mysong/.wav/bass_1.wav

Even without knowing Ecasound command syntax, you can see that a file is going to be written.

The directory path and the sample frequency come from the config file F<.namarc>, which is YAML plus comments.

Now we press SPACE to start the engine, lay down our bass part, and press SPACE again to stop it. This creates ~/nama/mysong/.wav/bass_1.wav. Nama will print an updated the track display, automatically selecting the just recorded version and setting the track to PLAY.

|  No. Name            Status     Source            Destination   Vol   Pan
| =========================================================================
|   1  Main            OFF        Main bus          --            -96    50
|   2  Mixdown         OFF        --                --             --    --
|   3  bass            PLAY v1    --                Main bus        0    50

You can press SPACE to play your track. But there will be no audio because we left the Main track OFF (out of the routing network) and the track fader is also muted.

nama Main> unmute

nama Main> mon

|  No. Name            Status     Source            Destination   Vol   Pan
| =========================================================================
|   1  Main            MON        Main bus          CH 1/2          0    50
|   2  Mixdown         OFF        --                --             --    --
|   3  bass            PLAY v1    --                Main bus        0    50

Now we'll get sound.

Let's reduce the master fader volume by 3 dB

nama Main> vol - 3 # note the space between the minus operator and the number.

To set a volume of -10 dB:

nama Main> vol -10

To view the volume of the Main track:

nama Main> vol

You can put multiple commands in one line, using semicolons to delimit statements.

nama Main> bass add-effect Plate; vol + 3

Most commands have abbreviations. Instead of "add-effect Plate" we could say "afx Plate".

Plate is the name of an effect plugin. If you are looking for a reverb plugin, you can type "find-effect reverb".

Set the first parameter of the current effect to 1.3:

nama bass> mfx 1 1.3  # modify-effect

Show the parameter settings of the current effect:

nama bass> sfx # show-effect

Selecting a track will also select the current effect for that track.

In addition to current track and current effect, Nama has a current bus, current mark, current sequence and current edit.

Note 1: Nama defaults to setting volume in percent. To specify volume in dB, set fader_op: eadb in namarc.

Thu, 25 Dec 2014


Welcome to Nama!

Nama manages multitrack recording, mixing and mastering using the Ecasound audio processing engine developed by Kai Vehmanen.

Nama's high-level representation of tracks, buses and signal-routing handles most common recording scenarios.

The command language provides full functionality to console users, while a simple GUI is available for basic recording and mixing work.

Screenshots

Nama's GUI is ugly. There, I've said it. At least, you can change the default colors.

On the positive side, the GUI offers basic functionality: recording, playback, effects, marks. Sliders are a convenient way of setting effect parameters. You'll use text commands to do fancy stuff like buses, inserts, regions, etc.

The first group of shots show the mixer window. All of those letters on the right side of the track display (EF P1 P2 L1 L2 L3 L4) are buttons for accessing Ecasound effects, Ecasound presets, and LADSPA plugins. The GROUP control below the Mixdown track is a global setting that influences all user tracks. The Palette and Namapalette buttons on the upper right are for selecting colors.

Mixer Window - Rec

rec.jpg

The track in red is ready to record a file track_4.wav from soundcard input 2, the track in blue is set to play back vocal_2.wav. (The version number is automatically incremented.) Red in the top band indicates a live input will be recorded. Yellow means mixdown pending, green means playback only.

The Effects Window - Basic

Ecasound and LADSPA provide Nama's effects-processing. At the bottom, a MIDI controller is applied to control the delay time of a flanger effect on the guitar track. At the top, a reverb effect is applied to what is now called the Master track. Additional effects on a track scroll off to the right.

eff.jpg

Text Display

Like Ecasound, Nama can be run entirely from a terminal. Here is the output of the show_tracks command, with mastering mode enabled. (Most commands have abbreviations. show_tracks can be abbreviated to show.)

show_tracks.jpg

Information about one track is displayed with the show_track (sh) command. Here is the display for the low-frequency branch of the mastering network. The command being typed at the prompt sets the first parameter of effect "O" (the lowpass filter) to 200 Hz.

show<em>one</em>track.jpg

The help screen is two keystrokes away.

Routing Diagrams

Nama now uses Graph objects to represent the signal routing. I made some diagrams based on these routing graphs. They are kind of cool to look at. The layout was done automatically, not exactly what you'd expect in hand-drawn diagrams.

Here is the signal flow for recording a single track against an accompaniment. The signals are mixed and output for monitoring. Effects are applied between track input and output.

Here is the signal flow for mastering a song of three tracks. The guitar signal passes through an external JACK program, jconv.

The soundcard output is usually turned off during mixdown so that engine can run in freewheeling mode.


Features

Convenient multitrack audio production

  • Simple setup for recording, playback, effects processing and mixdown.

  • Multiple WAV files (aka takes) for each track.

  • Non-destructive processing

Advanced functionality

  • Mastering mode with signal paths for low, mid-range and high bands

  • Time shifting of tracks and track regions

  • Track caching/freezing/bouncing to reduce CPU usage with long effects chains and large projects

  • Buses

  • Inserts

  • Submixes (aux sends)

JACK and ALSA support

  • Basic functions operate under both JACK and ALSA

  • Manual or automatic JACK client connections

  • Ladish Level 1 session handling support

Plugin support

  • LADSPA and LV2 plugins

  • Ecasound chain operators, presets and controllers

  • New plugins and presets are automatically detected.

  • Plugins are queried for parameter ranges and default settings

  • Linear and logarithmic scaling for parameter sliders

  • Effect chains (multieffect presets)

  • Effect profiles (multitrack presets)

GUI

  • One mixer window for transport controls, track settings, and project load/save

  • One effects window

  • Includes command prompt in terminal window

  • No dialog boxes considered a feature

  • Avoids window-overload syndrome

Full-featured Text UI

  • Text interface based on grammar and recursive descent parser

  • Economical command language. sax vol + 10 does what one would expect.

  • Commands can apply to several tracks at once:

    for piano guitar; vol - 20

  • Tracks can be grouped in bunches

    bunch strings violins violas cellos bass

    for strings; pan + 5

  • A single modify_effect command can adjust multiple effects and/or multiple parameters

  • Tab-completion of commands, plugin labels, and project names

  • Command prompt executes Nama commands, Ecasound interactive mode commands, shell commands, and Perl code

  • Command history

  • Suitable for console users, and for remote or headless systems

Help system

  • help by command category

  • search for commands by name, partial name or shortcut

  • search for effects by keywords, effect label or LADSPA index

Stable

  • Signal processing is performed by Ecasound, a mature, stable and respected multitrack audio processing engine.

  • Ecasound chain setups can be inspected prior to recording runs to verify signal routing and audio format parameters.

  • Project state is stored in JSON, a legible file format

Limitations

  • No graphic waveform display at the moment.

  • Text commands needed to access some functions.

  • Signal routing changes require stopping the engine.

  • Compensation for latencies associated with effects and loop devices in signal paths is planned.

####Q. Why another digital recording software? Aren't there enough already?

A. There are never enough audio applications. Just like good restaurants, there is always room for one more.

Also, Nama is text-based. It can run in a console. This can be useful for several reasons:

  • you are a console user, and don't want to run X
  • you want to reduce the CPU load on your computer while processing audio
  • you want to avoid interrupt conflicts between your audio and video adapters

Q. Why bother to reinvent the wheel?

A. Nama absolute avoids reinventing the wheel! All audio processing for Nama is performed by Ecasound, by LADSPA plugins, and by external programs such as jconverter.

Most of the computer science goodness in Nama is from CPAN, a huge archive of freely available software libraries written in Perl. So that's reuse, too. :-)

Q. Why is Nama written in Perl? Everyone knows that Python or Ruby would be easier to read, C++ would be faster, C# or [insert your preferred language here] would be cooler, etc.

A. No answer, really. Just a personal preference.

Q. Why not just use Ecasound directly? Why do you need a complicated front-end like Nama?

A. Nama adds convenience. Ecasound has no concept of a track, mixer, or bus. Whatever you need, you must build out of chains, objects and operators, which is time-consuming for complicated setups. Nama gives you all that and more with just a couple of commands.

Q. Can you really record/mix/master without a GUI?

A. Yes, if you're willing to use your ears. :-)

I could suggest mhwaveedit if you need a simple app to visualize a waveform.

Q. How does Nama/Ecasound compare to Audacity?

A. Unlike Audacity, Nama applies effects in real time by default. A reverb effect can be applied to a stream as it is played back or arrives from the soundcard. To save CPU, Nama also has a track-caching (track-freezing) function similar to the way Audacity batch preprocesses each track as you apply an effect.

Q. What super-cool features does Nama have?

Almost all of Nama is awesome.

Effect chains and effect profiles. They are like presets. Effect chains are for one track and can include several effects. Effect profiles are for multiple tracks.

Inserts with wet/dry control are cool.

Auto fades on transport start/stop are cool.

The command language allows a single command to be executed on multiple tracks, multiple effects, and/or multiple effect parameters.

The help system covers LADSPA effects and Nama commands. Commands can be listed by category. Commands and effects can be searched by keyword.

Q. What about bugs? Is Nama suitable for recording the

Boston Symphony Orchestra, or will it crash and burn?

A. Ecasound is a mature and reliable audio engine that has been thoroughly tested. So Nama inherits all that. Although Nama's own logic is vulnerable to bugs, many have been beaten out from under Nama's carpets. A basic test suite now ensures that patches and new features can be applied somewhat safely.

Several other design features help keep Nama reliable:

  • Ecasound chain setups can be reviewed to verify correct routing and IO.

  • All system state is stored in user-readable YAML text files that you (or I) can examine in case you find some strange behavior.

  • Nama has a debug mode available to track down problems.

  • Ecasound can be started in server mode with debugging enabled, so that all command IO is visible.

  • Use of a separate configuration file with reasonable default behavior ensures that configuration decisions are deliberate and will not change as the result of an errant mouse click.

  • Object-oriented design has helped organize Nama's source code, encapsulate data, and handle the complexities of signal routing.

Q. Ardour kicks ass, so why would I want to use Nama?

Nama is easy to learn and minimal. It can run without X and without JACK. If you want the kitchen sink, Ardour is for you.

Q. Why didn't you choose Ardour as audio engine, using the scripting interface?

A. When I started writing Nama, Ardour was a beast to build, it segfaulted all the time, and there was no support for building alternative user interfaces. Ecasound is stable, works with or without JACK, and is designed to interface with other software.

News

Releasing v1.203

I am happy to announce Nama version 1.203. With this release, the effects-handling code has been fully converted to Nama's OO model and several issues resolved.

For users, the add-effect and remove-effect commands will now work on effect chains as well as simple effects. Effects can be addressed by effect ID, user alias or effect code. Some bus-related commands have been renamed to conform standard terminology.

For those who care to prod and hack the sources, Nama's variables, defined in src/var*, are now documented in varoverview.

I welcome feedback from any tire-kicking, torture-testing etc.

Ongoing Improvements - now at Version 1.102

Nama has continued to evolve.

Git support has been integrated. It is now the preferred way to manage projects, as it allows branching and returning to a previous state. For easy transition Nama offers save/get commands that work with branch names the way you would expect to work with files.

Adopting Git has led to changes in serialization. For each project, git tracks one file (State.json) containing data that directly affects project audio. Track and version comments, and other peripheral data is stored separately.

Effect chains and profiles have been re-implemented in a much cleaner way, and may include inserts as well as effects and controllers.

For user convenience, times can be specified in samples as well as seconds. Underlying storage is as double-precision floats with 15-17 significant figures.

(March 4, 2013)

Julien Claassen's Nama pages

Julien has been Nama's number-one tester, and his feature requests are behind many of Nama's newer abilities.

He's writing his own pages about Nama. Right now it's mostly links to his music.

Lately he's been using Leslie IR files with jconv to give Leslie sound to his organ recordings. Nama's cache_track function makes it possible for him to free up CPU by preprocessing those files.

Thu, 07 Jan 2010


Links

Ecasound. The well-designed audio processing app on which Nama is based.

Julien Claassen's Nama pages. Nama's number-one tester, adjutant and booster has links to music he's created and other helpful material about using Nama.

Sun, 27 Dec 2009


Future developments

Most people will go to an application like Ardour for professional-level audio production needs, so Nama's development will be driven by user needs, and by any developer contributions.

Nama could potentially do a lot more. Here are some ideas I have floating around.

  • Latency compensation

  • MIDI integration

  • Time-based effects processing

    Ecasound already has some envelope processing. It would be nice to add the ability to record (and playback) realtime changes in effect parameters sent by MIDI, GUI and command inputs.

  • Graphic waveform display

    An interesting project, though a bit more than I personally want to take on at the moment. And not strictly necessary. After all, audio production is first and foremost about listening.

  • Better-looking GUI library

    Learning about GTK or WxWidget would be fun. Recoding Nama's GUI will be a pretty big job, or perhaps a fun summer project.


Nama manages multitrack recording, mixing and mastering using the Ecasound audio processing engine developed by Kai Vehmanen.