Difference between revisions of "Nyquist Basics: The Audacity Nyquist Prompt With SAL"

From Audacity Wiki
Jump to: navigation, search
(Basic Nyquist Commands: Update 'S' to *track*)
(Applying a DC offset to a signal: Update 'S' to *track*)
Line 100: Line 100:
Type the following into the Nyquist Prompt (using SAL syntax):
Type the following into the Nyquist Prompt (using SAL syntax):
   return s + 1
   return *track* + 1
Or type the following equivalent LISP command:
Or type the following equivalent LISP command:
   (sum s 1)
   (sum *track* 1)
[[Image:DC_Offset_Applied.gif|Resultant Signal after command.]]
[[Image:DC_Offset_Applied.gif|Resultant Signal after command.]]

Revision as of 20:38, 3 February 2021

This page explains how to use the Audacity Nyquist Prompt to test-run Nyquist code snippets using the SAL syntax. For Audacity versions below 1.3.13 (Beta), SAL syntax is not supported in the Nyquist Prompt... command, so you should use LISP syntax as described in Nyquist Basics: The Audacity Nyquist Prompt.
The "Nyquist Basics" tutorials start with very simple examples at the top of each page with increasing complexity towards the end. You do not necessarily need to work through to the end of each page to be able to understand the other tutorials. If you feel confused, try any of the other Nyquist Basics tutorials, in any order. Every "Basics" page contains lots of notes and hints where you can find extra information.
Related article(s):
Please note: Nyquist supports both a LISP syntax and a more conventional syntax called SAL. You can choose a manual from a link above based on which syntax you are using.

Setting up

Make sure you are using Audacity 1.3.13 or higher. If not, please visit Nyquist Basics: The Audacity Nyquist Prompt.

The Audacity Nyquist prompt appears in Audacity's Effect menu, which is activated only if an Audacity audio track exists and at least some audio in it is selected.

For testing generate commands in Nyquist, you can add Nyquist Generate Prompt to the Audacity "Plug-Ins" folder.

Load a Sound File

Sound files are imported into Audacity via:

File > Import > Audio or the shortcut CTRL + SHIFT + I

If you have no pre-existing sound files to work with, you can create your own mono or stereo tracks via the Audacity Generate menu.

Create a Mono Track

Click Generate > Tone. Leave everything as-is and just click "OK". A mono track will appear in the Audacity window:

Audacity mono track

Create a Stereo Track

1. Create an empty stereo track. Click Track > Add New... > Stereo Track.

An empty stereo track will appear in the Audacity window.

2. Now click Generate > Tone. Leave everything as-is and just click "OK". The stereo tracks will become filled with the generated sound.

Audacity stereo track

The Nyquist Prompt

Select the track(s) and click Effect > Nyquist Prompt. Effects are not activated until at least a portion of the track(s) have been selected. You can select all tracks by pressing CTRL + A on the keyboard.

The Nyquist Prompt appears like this:

Audacity Nyquist prompt window

The Nyquist Interpreter

In the Nyquist Prompt window, type

return "hello"

into the text field as follows:

Audacity Nyquist prompt window with quoted hello

When you click OK, you should get a message box displaying the word hello:

Window displaying the word hello

The message box disappears when you click "OK".

This, as you have learned, is how you can send messages to the user.

The Nyquist Debugger

After clicking OK in the "hello" message box, go back to Effect > Nyquist Prompt, and this time, type

return hello

this time leaving off the quotes around "hello":

Audacity Nyquist prompt window with unquoted hello

Important: This time, click "Debug" instead of "OK".

You should first get a window displaying a "Nyquist did not return audio" or a similar message:

Window displaying Nyquist did not return audio

After clicking "OK" in the window above, a second window appears, displaying the error messages that Nyquist returned. Notice that there are two parts to the message. The first line says what went wrong. Here, HELLO is interpreted as a variable, but the variable has no value, which is an error. Starting with the second line is a "traceback" which tells where in the program the error occurred. MAIN refers to any top-level command. If you defined a function and the error occurred within the function, this would be indicated in the traceback.

Window displaying Nyquist error: unbound variable

NOTE: The "Nyquist output" window only appears if you click "Debug" in the "Nyquist Prompt" window. If you click "OK", then, even with a Nyquist error, only the first window will appear.

Basic Nyquist Commands

The current Nyquist manual introducing SAL syntax is here: Nyquist 3.02 Reference Manual.

Audacity uses the *TRACK* variable to reference the current audio file/selection. Thus, you can use basic commands such as 'mult' or 'sum' with *TRACK* and the Nyquist prompt will replace the file/selection with the result (or as Audacity calls it, "returned audio").

Simple Examples

NOTE: These examples are focused upon using Audacity to manipulate digital signals (clearly Audacity is better suited to audio, but features such as Nyquist can open many other uses). For those interested, the signal used is an infra red (IR) sample from a remote control.

NOTE: Each code example will be shown once using SAL syntax, and again using LISP syntax. Either form can be used, but never try to mix them in a single program or prompt!

Applying a DC offset to a signal

Original Signal before command.

Original Signal before command.

Type the following into the Nyquist Prompt (using SAL syntax):

 return *track* + 1

Or type the following equivalent LISP command:

 (sum *track* 1)

Resultant Signal after command.

The whole signal has now moved up to above zero.

Modulating with a carrier frequency

To multiply a signal with a generated carrier signal, you can use the following commands:

 return s * hzosc(19000)

Or the LISP equivalent:

 (mult s (hzosc 19000))

The (hzosc 19000) produces 19kHz sine wave carrier.

 return s * osc-pulse(19000, 0)

Or the LISP equivalent:

 (mult s (osc-pulse 19000 0))

The osc-pulse(19000, 0) produces a 19kHz square wave carrier (note the 0 is the bias or 50/50 duty cycle, -1 to 1 = 0%-100% pulse-width ). Applying the 19kHz square wave carrier obtains this result.

Resultant Signal after command.

The top and bottoms of the signal can then be clipped using the Hard Limiter option from the effects menu (0dB limit and Wet level 1) if required.

The above examples show how you can use the many Nyquist commands to perform basic signal processing without using scripts.

NOTE: Unfortunately, this isn't the end of the road for this sample; it is near, but the curved "head/tail" of the signal causes a problem for the digital signal being produced [and it was also upside-down, too...]. This will hopefully form the basis of some more complex examples, since I shall need to use Nyquist to:
  1. Find the zero crossing points
  2. Then only apply the carrier frequency to those regions above zero.
Or find another suitable command...

Thanks to Forum moderators stevethefiddle & kozikowski for their help with Audacity & Nyquist.