Contents
FX V 1-5

FX is a digital sound effects processor. It lets you combine, transform and generate sounds to produce fascinating (and entertaining) results. You can use FX just for fun or as a serious tool for applications such as multimedia authoring and theatrical effects generation.

Warning - FX can generate sound levels and frequencies which are not found in normal music. It's possible that if used incorrectly it could damage equipment connected to your PC sound card or cause distress to listeners. Please take appropriate precautions - e.g. ensure that the volume control on your sound card and any equipment connected to it is set at a low level and don't wear headphones when using FX

FX is supplied 'as is' with no guarantees of functionality, correctness or performance. You alone are responsible for determining if FX is safe to operate in your own environment and satisfies your requirements. This program and its documentation are copyright (c) Nick Jones 1996. The program is distributed as freeware for use by individuals and non profit making organisations. It may not be sold in any form, used by a commercial organisation or used to deliver a chargeable service. If you would like to use this program commercially please contact the author for information on licensing arrangements.

Select one of the following for more information about FX:

Basic concepts	FX Commands

FX Tools	Examples

Common questions & answers	Whats new?

Bug reports and suggestions

For Help on Help, Press F1


Updates and changes

Changes since version 1-0 of FX include:

1. A number of tools have been modified to improve their functionality or ease of use. Changes include improved control options and better internal calculation algorithms to reduce distortion.

2. Tone generators have been substantially modified. Fractional frequencies are supported, frequencies can now be shifted in mid cycle, frequency accuracy has been improved.

3. Clicking the right mouse button on a port or tool now displays a menu providing help and common operations such as deleting connections.

4. The output tool now supports stereo.

5. Double clicking ports no longer deletes connections. This function has been replaced by the right mouse click - see 2.

6. A number of bugs have been fixed.

7. Connection line layout algorithms have been changed to better support backwards connections.

8. Improved help, documentation and more examples.

9. Six new tools have been added - a panning tool for stereo output, a physical model of a plucked string, high and low pass filters, a sample and hold tool and a combined stretch / compress tool. This latter replaces the separate squash and stretch tools which have been removed.

10. Various sloppy areas of the user interface have been enhanced.

11. Sounds can now be stopped while playing.

12. A number of pre-set envelopes have been added.

Other release notes

1. Layout files created with FX V1-0 cannot be read by V2-0.


Basic concepts

The sections listed here describe the key concepts underlying FX. Even though we all hate documentation you will find it much easier to understand and use FX if you read them.

How does Fx work?

The FX main window

What are FX tools?

How to specify the sound you want

How do FX tools generate sounds?

The trash can and the status bar


Examples

This section contains several example layouts to show how you can use FX to create more complex and interesting sounds. All the layouts illustrated here can be found on the FX distribution kit.

Using a noise generator and stereo to produce surf sounds

'Boing' using tone generators and envelopes

Synthesising a tubular bell

Synthesising a stringed instrument

An electronic bird

A pure scale

Synthesising a drum

Chorus effects

Slapback echo

Echo and tone generators

Using filters

Frequency synthesis

Explosion


Examples - Surf

The noise generator, envelope and multiplier on the left together produce a hissing sound which decays into silence. This is fed into the pan tool which is driven by another envelope generator. This second envelope is chosen to pan the sound from left to right as the hiss decays.


Examples - Boing

The basic 'boing' sound is created by a 600 Hz sine wave multiplied by an envelope to define its overall volume. As a simple sine wave is rather boring we modulate its frequency using a mixture of three control inputs: a 20 Hz sine wave which causes the basic frequency to flutter, an envelope which causes the average frequency to shift during the 'boing' and a small amount of noise which causes random frequency jitter and makes the 'boing' sound less artificial.

Hint

Try changing the mixer level controls to alter the proportions of the three control signals.


Examples - Bell

Complex sounds can be created by mixing together simple sine waves. This example uses four tone generators to create a sound somewhat like a tubular bell.

Hint

For advanced users. A more realistic bell can be created by using more harmonics (i.e. tone generators tuned to various multiples of the bell's fundamental frequency).


Examples - String instrument
Examples - Stringed instrument

The basic sound of a 75 Hz string instrument is produced by the 'plucked string' tool. Although quite realistic this still lacks something - real strings tend to exhibit some amplitude modulation as the sound decays. To simulate this we split the string sound and multiply part by an 8Hz sine wave which builds up and then fades away. The original sound is mixed back with a fraction of the modulated sound to produce the final, more realistic, plucked string effect.


Examples - Electronic bird
Examples - An electronic bird

The sample and hold tool is used to take short (30 millisecond) samples of the random waveform created by a noise generator. This produces a signal whose value changes every 30 milliseconds which is used as the control input to a tone generator. The randomly changing tone is then multiplied with an envelope to define the overall shape of the bird sound.


Examples - Scales
Examples - Pure sine wave scales

A separate sine wave tone generator creates the required frequency for each note of a scale. The output of each generator is then sliced to give a short (0.2 second) note. The notes are then concatenated together using splice tools to create the complete scale.

Note

For advanced users. When you play this scale you may notice that there may be a 'click' between some notes. This is because we defined the notes as a fixed duration - so some notes will be cut off part way through a sound cycle producing the click. A more elegant way to create the scale would be to change the slice tool options to define the note durations in cycles - which would ensure that each note consists of an exact number of cycles.


Examples - Drum
Examples - Synthesising a drum

The basic drum note is created by a 100 Hz oscillator multiplied by an envelope which controls its amplitude. The noise generator is used as a control input to the oscillator to provide a little random frequency jitter which makes the drum sound much more realistic.


Examples - Chorus

This layout illustrates a two voice chorus. The original sound is provided by a wave file (called 'blueharp' in this example). One voice of the chorus is the unmodified input sound. The second voice of the chorus is created by feeding a copy of the input sound through a variable delay line with a basic delay of 100 milliseconds. A fixed delay produces a very unrealistic chorus so we modify the basic delay by a 4 Hz sine wave which introduces a little frequency and time variation so making the second voice sound significantly different to the first. The two voices are then mixed together to create the output.

Notes

1. Unfortunately I can't distribute the 'blueharp' wave file with FX as I don't own the copyright to it. If you want to experiment with this layout you will need to double click the file tool and select an alternative wave as the source of the chorus.

2. Try changing the modulation frequency (using the tone generator control dialog) and level (using the delay line control dialog) to obtain different chorus effects.

3. You can increase the number of voices by splitting the input again and using a slightly different modulation frequency and delay for each voice.


Examples - Slapback Echo

Slapback is a special type of echo where there is one single echo return. This layout illustrates how we can use the delay line tool to introduce a delay then mix the delayed sound back with the original. The mixer controls can be used to change the relative volumes of the original sound and the echo.

Notes

Unfortunately I can't distribute the 'click' wave file used above with FX as I don't own the copyright to it. If you want to experiment with this layout you will need to double click the file tool and select an alternative wave.


Examples - Echo and tone generators

This layout shows how to tone generators and the echo tool can be used to produce another type of artificial 'boing' effect. A 500Hz tone generator is controlled by an envelope which causes its frequency to rise and fall quickly. The oscillator output and another envelope are fed into a multiplier to define the overall sound shape. The output of the multiplier is fed into the echo tool.


Examples - Using filters

This layout creates an oscillating, hissing sound (hard to describe but run the layout and you'll see what I mean). It illustrates the use of controlled filters, noise generators and the slice tool.

The basic sound source is a white noise generator which is fed through two filters connected in series (i.e. one after the other). The output of the second filter is fed into a slice tool set to cut off after 2 seconds of sound - this is to force the sound to end otherwise FX would run forever. The effect of using low pass (allows low frequencies through and stops high frequencies) and high pass (allows high frequencies through and stops low frequencies) filters in series is to cut off both low and high frequencies. To make this example more interesting the filter frequencies are swept dynamically under the control of a 2 Hz sine wave. Other points to note:

1. Filters are easy to overload so we use a mixer tool immediately following the noise generator and set the mixer volume control to reduce the sound level a little.

2. Filter control inputs can also be overloaded rather easily so we use mixer tools to reduce the control signal level.


Examples - Frequency synthesis

This layout illustrates a sound generation technique known as frequency synthesis. We generate a fundamental tone using a 300Hz tone generator and modulate its frequency with a 71Hz tone generator. The sound envelope is defined in the usual manner using an envelope tool and a multiplier. The outcome is a complex tone sounding rather like a plucked string instrument.

Notes

This is the synthesis technique used in first generation PC sound cards.


Examples - Explosion

This is a variation on the frequency synthesis principle which generates the sound of a distant explosion. We generate a fundamental tone using a 220Hz tone generator and modulate its frequency with a 31Hz tone generator mixed with a large amount of white noise. A sample and hold tool is used to quantise the modulation signal and the sound envelope is defined in the usual manner using an envelope tool and a multiplier.

Notes

To be honest I don't quite know why this sounds like an explosion, I discovered it one day while trying to generate something else!


Questions and answers

Common questions & answers

How long does it take to generate sounds?

It's not possible to generalise. This depends on the speed of your PC, the complexity of the layout, the size of the sounds you're processing and which tools you use (some need to carry out some complex computation).

Why doesn't FX play sounds while it's generating them?
Most PCs are just too slow to do this with anything other than a trivially simple layout. Future versions of FX may automatically recognise cases when it's possible and try to play the sound.

What PC configuration do I need?

FX will run on a minimal Windows 3.1 or Windows 95 configuration but if you want to deal with large chunks of sound you'll need more memory and a faster processor. A 486/33 with 8Mb of memory is adequate, a fast Pentium with 16Mb is heaven. This version of FX requires a 16 bit sound card.

Why is the output tool the only one which supports stereo?
If every tool supported stereo FX would run much more slowly. As the main purpose of FX is to create sound effects stereo output is usually sufficient because the left and right channel are often created in different ways.

How can I make FX run faster or use less memory ?

If you think FX is running too slowly or you're running out of memory check the following:

1. Remove any unconnected tools from the workspace. They take up memory and slow the system down.

2. When you're experimenting with a new effect try it out at the lowest sampling rate (11KHz) which requires the least calculation time. Only use higher rates when you've got it right and want to create a high quality copy to save.

3. Try closing down any other applications running at the same time as FX. If Windows runs low on memory it may start paging to disk which is very slow - if you see your disk access light flashing continuously while FX is running this is probably happening.

FX stops processing before it's finished my sound effect. What should I do?

If FX stops displays the message "Auto Stop" it means that the output tool has seen a long sequence of near-silence. This is often a good indication that the processing is over - that's why FX has the auto stop feature. Occasionally however the sound you're creating contains a long silent period which fools the auto stop logic. In this case use the option dialog to increase the auto stop duration or reduce the auto stop threshold level.

FX stops immediately without doing anything. What should I do?

The most common cause is that the output tool is not connected to anything. FX stops calculating as soon as the output tool recognises that there is no more data arriving at its input port. If it's not connected this happens immediately.

FX never stops. What should I do?

Its possible to create some layouts which continue generating sound indefinitely - e.g. connecting a tone generator directly to the output tool. In such cases FX cannot correctly deduce when the calculation is over and so will run on indefinitely (or at least until something catastrophic happens such as running out of memory). If you create such layouts you must stop FX manually by pushing the stop button on the command bar.

What do I do if the sound seems distorted?

Some of the tools (e.g. fuzz) are specifically designed to distort sound in a variety of ways so first make sure that it's not because you're using one of these. The commonest reason for unintentional distortion is overload - sounds are represented as numbers and if you use to high a volume the numbers will overflow producing severe distortion. Try using the mixer tool as a volume control to reduce the sound levels somewhere in the layout and see if this helps.

Another source of distortion arises when you use a tone generator to create frequencies close to the current sampling frequency. In this cases distortion is caused because there are too few samples to create a sufficiently close approximation to the required tone. In such cases distortion may sometimes be reduced if you increase the sample frequency using the options dialog.

How do I get rid of silent periods created by input gobbling tools?

Input gobbling tools consume all their input before processing and generate silence until they are ready to start generating output. If this is a problem (e.g. because you want to splice two sounds together) try splitting the layout into two. Generate part of the sound (the piece created by the input gobbling tool) and save it in a file or folder then import it into a second layout.

What does the message MMIO error mean?

An MMIO error means that FX has not been able to carry out an operation which involved your sound card - the most common time to see this message is when you push the play button. The most likely reason is that your sound card is in use by another program or cannot support the sample rate or size selected in the options dialog. Version 1-5 of FX requires a 16 bit sound card, if you have an 8 bit card you will not be able to play generated sounds directly. A limited workaround is possible by selecting an 8 bit sample size, saving the output to a file and then using the Windows sound recorder or media player utilities to play the sound file.


How do tools generate sounds
How do tools generate sounds?

The principles behind FX are very simple. When you press the Go button on the command bar all the tools on the workspace take sound samples from their input ports, process them and deliver them to their output ports where they're passed on to whatever tool is connected to the port. There are however a couple of points which aren't necessarily intuitive:

Input gobbling tools

Some tools need to look at all of their input before they can generate any output. Examples include the frequency shifter and tools which stretch and compress sounds. While they're gobbling up the input these tools generate zero output (i.e. silence) so some FX configurations will have periods of silence before any output is generated. Sometimes this is a nuisance (e.g. when you want to stitch several sounds together) - the questions and answers section describes various ways to get around this.

The output tool has a control option (which is set by default) which instructs it to discard any silent period before the first sound arrives. You should normally leave this enabled.

When does FX stop?

Some tools know when they've come to the end of the sound they're working on and will tell the tools connected to their output that they've finished. This cascades through the connections until the output tool discovers there's nothing more to do and the calculation stops automatically. This is called a normal stop and FX displays a "Calculation is finished" message.

Some tools (such as tone generators) continue creating sound forever so if you use one of these in a layout you may have to stop the calculation manually by pushing the Stop button on the command bar.

Many sound effects tend to fade away as they end so FX has an auto stop facility where the output tool will stop the calculation automatically after an extended period of silence. In this event FX displays an "Auto stop" message. The FX option control dialog allows you to change the silent period which defines the auto stop condition.

Finally the FX option control dialog also allows you to define a maximum sound duration, FX stops if the generated sound exceeds this.


How to specify the sound you want

Sound effects processing is specified by placing tools on the workspace, connecting their ports, and optionally configuring the tools.

Adding a tool to the workspace.

To add a tool to the workspace click the tool you require in the toolbar. It will be added to an unused area of the workspace. You may then drag it to the location you require (see below for more information on moving tools).

Adding connections

To add a connection move the cursor into a port at one end of the connection, press and hold the left mouse button, move the cursor into the port at the other end of the connection and release the mouse button. FX will draw the connection line automatically.

Connections must join an input to an output, each port may only be connected once. If you try to create an invalid connection you'll be warned.

Moving tools

To move a tool place the cursor anywhere inside the tool boundary (except on a port), press and hold the left mouse button - an outline of the tool will be displayed. Drag the outline to the desired location and release the button, FX will redraw the tool and its connections in the new location.

Deleting tools

To delete a tool place the cursor anywhere inside the tool boundary (except on a port), press and hold the left mouse button - an outline of the tool will be displayed. Drag the outline into the trash can and release the button. The tool and all its connections will be deleted.

Deleting connections

To delete a connection place the cursor anywhere inside a port at either end of the connection. Press and hold the left mouse button and drag the cursor into the trash can. Release the mouse button and the connection will be deleted.

Configuring tools

To configure a tool's options double click the tool to display a control dialog

Shortcuts when working with tools and ports
If you move the cursor onto a tool or port and click the right mouse button you will see a context sensitive menu which allows you to carry out some common operations more quickly. These include:

1. Delete all the connections to/from a tool.

2. Delete the connection from/to a port.

3. Display help about a specific tool.

4. Delete a tool.

5. Display the tool's control dialog

6. Obtain help about the tool.


The trash can and status bar
The trash can and the status bar

The trash can and the status bar are special regions within the FX main window.

Trash can
The trash can is shown below, tools and connections can be deleted by dragging them into the trash can. To drag a tool place the cursor anywhere inside its perimeter (except on a connection port), press and hold the left mouse button, drag the tool over the trash can and release the button. The trash can's colour will change when a tool or connection is over it. To drag a connection into the trash can use the same procedure except that the starting position must be inside the port at the start or end of a connection.

Status bar

The status bar displays a high level summary of a sound as it's being generated. Each point on the bar shows a summary of the sound during a short period - its average level is shown in green, its peak level in red. The example here shows a squeaky door hinge.


How does Fx work
How does Fx work?

Sound effects are created by plugging together collections of tools, each tool has one or more input and output ports which may be joined with connections. (It's just like plugging your hi-fi together). Tools take in sound on their input ports, process it in some way and send it to their output ports. Each tool performs a relatively simple task but they can be connected together to produce very complex effects. The illustration below shows three FX tools plugged together, in this case the effect is to add echo to the sound of a foghorn.

To set up FX you start with an empty workspace containing only one tool - the output tool. The output tool is special - you can't delete it and you must make sure that at least one of its input ports is connected to something. The output tool's job is to store the sound effect that you generate, play it for you and optionally save it as a standard WAV file.

You place tools on the workspace, connect them to specify the effect you want and then press the Go button to start sound processing. FX will then generate the sound; when it's finished you press the Play button to hear it.

The set of tools and connections to produce an effect is called a layout, you can save layouts as files and reload them later. The FX main window illustration shows the key components of FX as they will appear to you on the screen.


FX window illustration
The FX main window

This illustration shows the FX window containing a simple layout and highlights tools, ports, connections, the workspace, toolbars, the command bar, the trash can and the status bar.


Understanding FX tools

Each tool on the workspace is a grey rectangle identified by a small icon which is identical to the toolbar button which selected it. The tool's ports are dark rectangles, input ports are on the left hand side, output ports are on the right. Every tool has its name at the bottom and some have an additional label at the top which tells you something about the tool's current option settings. The tone generator tool shown above has one input and one output.

Many tools have user defined control options which are set using a dialog. This may be triggered by placing the mouse cursor anywhere inside the tool boundary (except inside the ports) and double-clicking.

Some tools (such as the tone generator shown above) have two sorts of port - data ports and control ports. There are actually not very different as you can connect any output to either type of input however they do have a different purpose:

Data ports

Data input ports are usually connected to a data output port of another tool which is generating a sound. Data ports are shown as a dark grey rectangle.

Control ports

Control ports may be connected to sounds or control signals, the value of a control input typically affects the way in which a tool processes sound. E.g. changing the control input of the tone generator will modify its output frequency. Some tools (such as the envelope generator) are primarily intended to generate control outputs. Other tools (such as the tone generator) can be used to create data or control values. Control ports are shown as a light grey rectangle.


Effect generator tools

The effects tools are shown below, click on the name of any tool to display a detailed description.

Mixer	Tone generator	Pan

Delay line	Envelope	Plucked string

Multiplier	White noise	Sequencer

Oscilloscope	Slicer	Output

Silence	Moving average	Sample & hold

Controlled fader	Noise filter	Change duration

Echo	Reverse	Phase shift

File	Split	Invert

Join	Fuzz	Loop

Low pass filter	High pass filter	Frequency shift

Folder


Commands

FX has a small number of commands which control its operation. These are selected by pressing the appropriate button on the command bar which runs along the top of the FX main window. Click the name of any command for more information.

Help	Exit

Go (start processing)	Stop (stop processing)

Play	Options

Save sound	Save layout

Load layout	New layout

During some operations (such as calculation or when a sound is being played) some or all of the command bar buttons will be greyed out to indicate that they are not available. Once the operation is complete, or has been cancelled, the buttons will return to normal.


Mixer tool
    Mix

A four-way mixer. The output is generated by adding the inputs. The control dialog (see below) provides separate sliders to control the level of each input. Associated with each slider is a checkbox labeled x10, when selected the level of the associated channel is multiplied by 10.

Notes

1. You do not need to have every mixer port connected.

2. If you need to mix together more than four inputs use two mixers and mix their outputs together with a third mixer.

3. You can also use a mixer as an attenuator to reduce the level of a sound or of a control signal - this may be useful if you're trying to prevent overload. E.g. see the filter example.


Pan tool
    Pan

A tool primarily intended for panning output across stereo channels - although it can also be used for any purpose requiring a controlled fade or switch from one output to another. The input fades from one output to the other as the control port input changes. When the control port value is maximum all input is directed to the top output port. When the control port value is at a minimum all input is directed to the bottom output port.

The option dialog contains two sliders - offset and sensitivity. The former allows you to set an initial pan value which will subsequently be modified by the control input. The sensitivity slider modifies the amount of panning associated with control input changes. A high sensitivity means that a small control change will result in a large pan. An additional checkbox control input is from envelope tool should be selected only if the control input is connected directly to the output of the envelope tool (see below).

Notes

1. A square wave input (e.g. from a tone generator) can be connected to the control input to make the pan tool behave like a switch.

2. The envelope tool provides a useful way to create control inputs which pan sounds between the left and right channels.

3. For technically inclined readers only. The checkbox control input is from envelope tool is required because the envelope tool generates values in the range 0 to the maximum positive value of an audio sample. This is necessary so that a minimum envelope value (i.e. 0) can be used as a multiplier input to switch off sounds. Unfortunately sound samples have both negative and positive values so the tool needs to know where the input comes from to ensure that it pans correctly.


Tone generator tool
    Generate tone

Tone generators are used to produce sine, square and triangular waveforms. When using tone generators remember that digitised sound approximates pure waveforms with a series of samples - the maximum frequency that you can create using a tone generator is limited to around half the current sampling frequency set using the option dialog. As the tone generator frequency approaches this limit the sound it creates will become more distorted.

The tone generator has an optional input port, If both the control dialog and input port are used the input value modifies the generated frequency around a centre value defined in the option dialog. If the input is unconnected the generated frequency is defined by the option dialog alone. If the input port is connected the sensitivity slider adjusts the input sensitivity. Low sensitivity requires a large input change for a given frequency variation, high sensitivity requires a small input change for a large frequency variation.

Notes

1. Although it's common to use tone generators to produce sounds they can also be used as control inputs for other tools - e.g. a low frequency sine wave at (for example) 10Hz is useful to modulate other sounds to produce a warbling effect.

2. FX V1-0 tone generators implemented a number of restrictions intended to improve performance on slow PCs. These have now been lifted. The generator frequency can now be changed part way through a waveform cycle and is no longer limited to an integral number of samples.


Envelope generator tool
    Envelope

Envelope generator. Usually used to generate control signals which define the volume and duration of other sounds. An envelope is defined as a series of points using its control dialog (see below). The following operations are used to define an envelope:

Selecting an envelope point
To select an envelope point move the cursor over it and click once with the left mouse button. The currently selected envelope point is shown as a black rectangle (see below).

Adding a point to the envelope

Click the add point button to add a new point to the right of the currently selected point. After adding a point you should move it to the required position.

Moving an envelope point

Move the cursor to any location inside the rectangle defining the point you wish to move. Press and hold the left mouse button. Drag the point to its new location and release the mouse button. Note that you cannot move a point outside the range defined by its adjacent points.

Deleting an envelope point

Click the envelope point to select it (this is not necessary if the point is already selected). Press the delete point button to remove the point. Note that an envelope must have at least one point so you will not be allowed to delete the last point.

Defining the envelope duration

Enter a value in the duration field to specify the duration (in seconds).

Selecting a pre-set envelope
Five pre-set envelope shapes are provided, these are: Exponential decay, exponential rise, rectangle, hill, S curve. To select a predefined envelope click the appropriate button in the preset envelopes group.

Notes

1. Beginners are most likely to use the envelope generator to provide one of the inputs to the multiplier tool however it can also be used as a more general purpose source of control values. E.g. the envelope generator might be connected to the input of a waveform generator to control its frequency.


Multiplier tool
    Multiply

The multiplier tool can be thought of as a volume control where the level of one input is defined by the value of another. It's typically used for two purposes:

Multiplying to define an envelope

A sound may be multiplied by a very low frequency waveform created by the envelope tool to control its overall envelope - i.e. the way the sound volume changes over time. E.g. a tone generator multiplied by a slowly decaying envelope produces a bell-like sound.

Multiplying for special effects

Multiplying a sound by a high frequency waveform is sometimes useful for creating special effects.


White noise generator tool
    White noise

White noise is a random noise containing all frequencies which sounds like a hiss. The white noise generator has no user defined options.

Notes

1. White noise is most useful as a component of other sounds you're creating - e.g. multiplying white noise by a suitable envelope can produce a sound rather like a cymbal.

2. White noise is also useful as a control input. Try mixing a small proportion of white noise with control inputs to tools such as the waveform generator. This has the effect of slightly randomising its output and producing effects which sometimes sound more natural than pure generator tones.

3. Noise generators use random numbers, every time you use a noise generator the output will be slightly different. Normally this is not noticeable, however if you use a noise generator as a control input you may find that the sound effect you create sounds a little different every time you re-calculate it. This is normal.

4. Other types of noise are characterised by a different spectrum - e.g. 'pink' noise has a relatively higher proportion of low frequencies. You can create pink noise by passing white noise through a low pass filter to remove higher frequencies.


Sequencer tool
    Sequencer

The sequencer is a tool which allows you to define a sequence of sounds (represented as WAV files) which may be repeated as many times as you wish. To create a sequence first add a sequencer tool to the layout then double click it to display the option dialog (see below). A sequence consists of up to 14 slots each containing one sound. Each slot is represented by a grey rectangle. To define the sequence use the following operations:

Adding  a sound to a sequence

Choose any empty sequence slot (represented by a dark grey rectangle) and double click it. This will open a file dialog allowing you to associate a WAV file with the sequence slot. Once a file has been associated with a sequence slot it will change to a light grey colour, the slot length will change to represent the file duration and the file name will be displayed.

Changing the position of a sound in a sequence.

Drag the slot rectangle to the left or right to change its position in the sequence.

Changing the length of the sequence.

Click the Set Duration button to display a dialog allowing you to change the sequence duration.

Changing the iteration count.

Change the value in the iteration count field.

Changing or deleting the contents of a sequence slot

Double click the slot to open the file dialog, either select a new WAV file to be associated with the slot and click OK or click the Clear button to clear the slot.

Notes

1. The order of the slots is insignificant.

2. You can control the relative volume of the sounds in the sequence using the volume control slider on the dialog which associates the WAV file with the sequence slot.

3. The sequencer can use a lot of memory as it loads a copy of every sound in the sequence when FX is generating sounds. You may therefore see error messages if you're short of memory.

4. When FX isn't generating sounds the sequence definition stores the names of files - not the contents of files. It's therefore possible for a file to be deleted or renamed between creating and using the sequence. In such cases an error message will be displayed either when you open the sequence to edit it or when you push the Go command button. If you load a layout containing a sequence which references files that no longer exist the corresponding sequence slots will be empty.


Scope tool
    Scope

The scope (oscilloscope) tool displays sound waveforms. It has one input and one output and copies sound without modification from input to output. In addition the control dialog allows you to define a capture period. During this period the scope tool makes an internal copy of the sound passing through which can be displayed after FX calculation is complete by double-clicking the scope to open its control dialog. The scope control dialog (see below) also allows you to choose two ways to define the start of the capture period:

Start capturing from a specified position in the sound
Click the trigger on sample number radio button to select this mode then enter the sample number at which capturing is to start in the first sample field. The number can be any positive integer. When using this mode remember that the time at which the scope starts capturing will depend on the sampling rate defined in the options dialog.

Start capturing from the first sample having a specified level
Click the trigger on level radio button and enter the level (in percent) at which capturing is to start in the level field.

Notes

1. The scope tool is intended for expert users who understand about sound waveforms. If you are just starting with FX it is less likely to be useful.

2. Experts can use the scope tool to track overflow distortion in a complex FX layout by triggering on levels just below 100% which is likely to catch the waveform just before overflow occurs.

3. The scope tool stores all samples within the capture range and can therefore use substantial amounts of memory. It may generate error messages on systems with limited memory. If this happens try reducing the number of samples collected.


Sound slicer tool
    Slicer

The slicer tool returns a small section from a larger piece of sound. This section may be defined in one of three ways:

Time slice

Takes a slice from the input sound starting at a specified time from the beginning of the input and lasting for a fixed period of time. Click the start at time radio button to select this mode then fill in the start time and duration fields to define the period in seconds. Note that these fields accept decimal numbers.

Cycle slice
Takes a slice from the input sound starting at a specific cycle of the sound waveform and lasting for a specified number of cycles. Click the start at cycle radio button to select this mode then fill in the cycle no. and number of cycles fields to define the slice period.

Segment slice
The input waveform is treated as a number of segments separated by periods of approximate silence. The slice starts at a specified segment and lasts for a specified number of segments.

To use this mode click the start at segment radio button then fill in the segment no. and no. of segments fields to define the slice period. Two additional slider controls allow you to define the duration and volume (in percentage) which define the segment threshold. A segment is defined as a section of sound preceded and followed by a period where the sound volume is less than the threshold volume for more than the threshold duration.

Notes

You can use the slicer tool followed by the loop tool to slice out one cycle of a sound waveform and then repeat it to create a new waveform.


Silence generator tool
    Silence

Generates a specified period of silence.

Note

The silence tool is useful if you need a defined period of silence (e.g. to separate two sounds which you are concatenating).


Change sound duration
    Change Duration

Shortens or extends the duration of a sound without changing its overall frequency. This tool operates by splitting the sound into granules, which are short sound fragments. Overlapping granules extend the sound, separated granules shorten it. The control dialog contains three fields. The factor which can take values between 0.5 and 2.0 defines the new sound duration in terms of the old duration. Advanced users may wish to alter the granule size and granule overlap fields. The former defines the granule size in milliseconds, the latter the percentage of overlap between granules (in the range 1% to 40%). See below for additional information on these options.

Notes

1. Changing the granule size may help to reduce distortion or unwanted effects with particular types of sound. Increasing granule sizes (e.g. greater than 30 milliseconds) will add a noticeable echo effect to the sound. Very large granule sizes (e.g. 100 milliseconds) are of limited value for changing the sound duration but can create some interesting effects.

2. Changing the granule overlap may also help to reduce distortion with some types of sound.


Controlled fader tool
    Fade

Fades or switches between sound sources under the control of the input value. The top input is a control port, when it is at its maximum the output of the fader is the upper of the remaining two inputs. When the control port value is at its minimum the fader output is the lower of the two inputs. Intermediate control values produce different mixtures of input values.

The option dialog contains two sliders - offset and sensitivity. The former allows you to set an initial fade value which will subsequently be modified by the control input. The sensitivity slider modifies the amount of fading associated with control input changes. A high sensitivity means that a small control change will result in a large fade. An additional checkbox control input is from envelope tool should be selected only if the control input is connected directly to the output of the envelope tool (see below).

Notes

1. A square wave input (e.g. from a tone generator) can be connected to the control input to make the fader behave like a switch.

2. For technically inclined readers only. The checkbox control input is from envelope tool is required because the envelope tool generates values in the range 0 to the maximum positive value of an audio sample. This is necessary so that a minimum envelope value (i.e. 0) can be used as a multiplier input to switch off sounds. Unfortunately sound samples have both negative and positive values so the tool needs to know where the input comes from to ensure that it operates correctly.


Silence slicing tool
    Slice silence

Removes silent periods from a sound. The tool's control dialog allows you to define the duration and volume of sound which define a "silent" period. All sections of sound which have a volume less then the threshold level lasting for more than the threshold duration are removed.


Echo tool
    Echo

Creates an echo by delaying its input sound and re-mixing the delayed input with the output.

The echo control dialog lets you select the duration of delay and the proportion of echo mixed back in to the original using two sliders. The delay slider defines the duration of the echo delay and the feedback % slider defines the amount of delayed sound re-mixed with the original.

Note

Small feedback percentages are most useful to create conventional echoes however feedback of greater than 100% is allowed for special effects. In this case the sound gets louder at each echo and will eventually overload producing extreme distortion.


File tool
    File

Loads a sound from an external WAV file so that it can be processed by FX.

The file tool option dialog (see below) allows you to select a sound stored in a Windows .WAV file. The select button triggers a standard Windows file selection dialog to choose the file. Once selected its characteristics are displayed and it may be previewed using the play and stop playing buttons. The clear button cancels the file selection.

Notes

1. The file tool loads the complete sound into memory when you select it. This might fail if you are short of memory.

2. You should normally run FX at the same sampling rate as any files accessed by this tool. If you use a file created with a different sampling rate it will sound bizarre! The FX sampling rate is set using the options dialog.


Splitter tool
    Split

Makes two copies of a single sound. This tool has no user defined options.

Note

If you want more than two copies of a sound connect several splitter tools in series.


Join tool
    Join

Concatenates sounds. The output of the join tool is created from the sound on the first (i.e. upper) input port immediately followed by the sound on the second (i.e. lower) port.

This tool has no user defined options.


Fuzz tool
    Fuzz

Adds clipping distortion, by limiting the sound amplitude. The factor slider in the control dialog (see below) allows you to modify the level at which clipping occurs.

Notes

A hint for technically inclined readers. Fuzz is most commonly used to add controlled distortion to sounds however it is sometimes valuable when generating control inputs for other tools. You can use high levels of fuzz to change a multi-valued data input into a binary control input - e.g. to drive a pan or fade tool.


Frequency shifter tool
    Shift frequency

Raises or lowers sound frequency by a constant factor. The control dialog (see below) allows you to select a frequency shift in the approximate range of 0.5 to 2.0 times the original sound frequency.

Note

You can use the frequency shifter in conjunction with the stretch / compress tool to disguise voices. Connect the output of a file tool into the frequency shifter to raise or lower the frequency of a fragment of digitised speech. Connect the frequency shifter output to a stretch / compress tool to restore the original sound duration.


Folder tool
    Folder

The purpose of folders is to provide a way to temporarily save sounds on the workspace without needing to write them to a file. Folders can be used to speed calculations by saving commonly used fragments of sound. A folder will perform one of two functions depending on whether or not its input port is connected:

Input connected

When the folder's input is connected to the output of another tool it copies its input to its output port but also saves the input in an internal buffer.

Input not connected

When the folder input is not connected it sends the contents of its internal buffer to the output port.

The folder control dialog (see below) allows you to define a folder name (useful when you have more than one folder in the same layout). A check box labelled compress leading silence allows you to instruct the folder to ignore (i.e. not save) any silent period before the first non zero sample which it sees.

Note

Folder names and connections will be saved if you save a layout but their contents are transient and are not saved. If you need to save a sound across an FX session write it to a WAV file and use the file tool.


Loop tool
    Loop

Repeats a sound. The output is 'n' successive copies of the input. The loop tool's control dialog (see below) allows you to select the number of repeats.

Note

Don't connect the loop tool directly to the output of tools which generate periods of silence before they create output - the silence will be replicated as well as the sound. This is not usually the effect you want to achieve. In such cases it's usually best to split your task into two parts - first create the sound to be replicated and store it in a folder or file then use the loop tool on the folder or file output.


Signal inversion tool
    Invert

A waveform inverter. The inverter is usually used with control signals although will operate with all inputs. Its output is the inverse of the input - e.g. if the input sample value is 1 the output sample value will be -1.

This tool has no user defined options.


Noise filter tool
    Noise filter

This tool removes low level noise by forcing its value to zero. The threshold at which the filter cuts in is defined by its control dialog (see below). The noise filter can be seen as a gate which is open (the input is passed through) or closed (the input is blocked and the filter outputs silence). The gate switches between these two states in the following way:

When the gate is open - if the filter recognises a period when the input signal is below the noise threshold the gate will be closed and subsequent low level noise converted to silence.

When the gate is closed - if the filter recognises any input above the threshold the gate is opened.

The filter gate does not open or close instantaneously, a smoothing effect is applied to avoid unwanted clicks. The filter automatically chooses the period for noise detection based on the sound frequency.


Average level tool
    Moving average

Calculates the sound level averaged over a defined period.

This tool is generally used to create a control signal whose value is defined by the average level of its input sound. The control dialog (see below) allows you to define the averaging period by filling in the average time (secs) field. The gain slider multiples the output level by a constant factor in the range 1 to 10.

Note

One use of the moving average tool is to 'steal' the envelope of a sound so that you can apply it to another sound. See the description of the sample and hold tool for an example of this.


Phase shift tool
    Phase shift

Phase shifts sound.

The phase shift tool has one control port and one data port. The value on the control port defines the degree of phase shift applied to the input sound. The phase shifted sound is optionally mixed back with the original input and copied to the output.

The control dialog (see below) contains two sliders which allow you to control the amount of phase shift and the percentage of original sound mixed back into the output.

Note

Phase shift is audible when it's changing, not when it's constant. A constant value at the control input produces no shift. A linearly changing value is equivalent to a short delay (which is also unlikely to be audible). A non-linearly changing control input is likely to produce an audible effect. If you're experimenting with the phase shifter for the first time try feeding a low frequency sine wave (e.g. 5Hz) into the control input.


Output tool
    Output

The output tool is a special system tool. There is always exactly one copy of the output tool in every layout, it may be moved but cannot be deleted. The output tool's purpose is to store the sound created by running FX. The play and save sound buttons in the command bar play and save the contents of the output tool.

The output tool's option dialog displays a summary of the sound it contains from the previous run of FX and has two user defined options. Select the check box compress leading silence to force the output tool to ignore any silent period before the first sound arrives.

If you select the stereo checkbox both inputs are enabled and the output tool stores two channels of sound. The left channel is taken from the top input and the right channel from the bottom input. If you select mono output the bottom input is ignored and the output tool stores one channel of sound taken from the top input.

Notes

1. When running the output tool in mono mode only the top input is active. If you fail to connect something to this input an error message will be displayed when FX starts calculating.

2. When running the output tool in stereo mode both inputs are active. If you fail to connect something to at least one input an error message will be displayed when FX starts calculating.


Reverse tool
    Reverse

Reverses a sound (i.e. the first sample becomes the last and vice versa).

This is an input gobbling tool (i.e. produces no output until it has consumed all its input) and has no user defined options.


Delay line
    Variable delay line

Inserts a short, variable delay into the sound path. The basic delay is defined by the option dialog shown below. The delay period can be specified in one of three units: milliseconds, samples or Hertz. In the latter case the delay will be equivalent to one cycle of sound at the specified frequency.

If the delay tool's control input is unconnected the delay is fixed. The basic delay can however be varied dynamically by connecting the control input of the delay tool to the output of another tool. In this case the sensitivity slider allows you to control the degree to which changes in the control input affect the delay. The high sensitivity checkbox switches between high and low sensitivity ranges, when high sensitivity is selected small input changes have a greater effect on the delay.

Notes

1. The delay line tool is an extremely useful building block to create more sophisticated effects which can include slapback echo and choruses.

2. If you define a delay in units of samples the delay period will change if you alter the overall sampling rate using the option dialog.

3. Large, fast changing delays will produce an audible frequency shift.


Plucked string tool
    Plucked string

The plucked string tool simulates a plucked string and has two user defined options. The damping slider allows you to select the string damping. Low damping produces an extended note which decays slowly. High damping produces a short note which decays quickly. The frequency field defines the frequency of the string.

Notes

1. The plucked string tool uses a sound generation technique called physical modelling which uses a computer to model the physical characteristics of an instrument. The plucked string tool uses the Karplus-Strong algorithm (named after the inventors).

2. For technically inclined users. Plucked strings only sound realistic at reasonably high frequencies - e.g. greater than 50 Hz. If you choose a very low frequency (e.g. 11 Hz) the generator sounds more like a cymbal than a string, this isn't a bug, it's just a feature of the Karplus-Strong algorithm.


Low pass filter tool
    Low pass filter

A low pass filter allows low frequencies to pass through unaltered and reduces high frequencies. The cut-off frequency of a low pass filter is the frequency above which high frequency input will be attenuated. The cut-off frequency is defined using the option dialog (see below). Filters have one control input which allows other tools to modify the cutoff frequency, the sensitivity slider allows you to control the degree to which input changes affect the cutoff frequency.

Notes

1. Filters are computationally intensive and are one of the few tools which perform their internal calculations using floating point arithmetic. Layouts containing low pass filters will therefore run relatively slowly.

2. The permitted cut-off frequency range varies from 1Hz to half the current sample frequency.

3. It's not necessary to use the control input, if it's not connected the filter will operate with a fixed cut-off frequency defined by the option dialog.

4. For technically inclined readers. The low and high pass filters are implemented as 2nd order Butterworth filters.


High pass filter tool
    High pass filter

A high pass filter allows high frequencies to pass through unaltered and reduces low frequencies. The cut-off frequency of a high pass filter is the frequency below which low frequency input will be attenuated. The cut-off frequency is defined using the option dialog (see below). Filters have one control input which allows other tools to modify the cutoff frequency, the sensitivity slider allows you to control the degree to which input changes affect the cutoff frequency.

Notes

1. Filters are computationally intensive and are one of the few tools which perform their internal calculations using floating point arithmetic. Layouts containing high pass filters will therefore run relatively slowly.

2. The permitted cut-off frequency range varies from 1Hz to half the current sample frequency.

3. It's not necessary to use the control input, if it's not connected the filter will operate with a fixed cut-off frequency defined by the option dialog.

4. For technically inclined readers. The low and high pass filters are implemented as 2nd order Butterworth filters.


Sample and hold tool
    Sample and hold

The sample and hold tool has one input. Its output remains constant for the duration of a sample period which may be specified in milliseconds or samples. At the end of each sample period it calculates a new output value for the next sample period based on the selected mode of operation. Four alternatives are supported:

Output value is input value. The output value for the next sample period is the instantaneous input value at the start of the sample period.

Output value is peak input value. The output for the next sample period is the peak input value occurring during the previous sample period.

Output value is average input value. The output for the next sample period is the average input value occurring during the previous sample period.

Output value is input envelope. The output for the next sample period is an approximation to the envelope of the sound during the previous sample period. The envelope is calculated as the average modulus of the peak values in the sample period.

Notes

1. See the "bird" example layout for an illustration of one way to use this tool.

2. The envelope option is intended to allow you to extract the envelope of one sound in the form of a control signal which can be used as the input to other tools. The envelope transfer example layout illustrates how this tool may be used to apply the envelope of one sound to another.

3. The moving average tool can provide a useful way to smooth the output of this tool (e.g. before using it as a control signal). The example below shows how a combination of the sample & hold tool and the moving average tool can be used to extract the envelope of one sound ( a squeaky door) and apply it to another (people clapping).


Command: Help
    Help

The help button displays the FX "About box" showing the product version number and optionally invokes the contents page of this on-line documentation.


Command: Exit
    Exit

Terminates the FX application.


Command: Go!
    Go!

Starts sound processing.

Once you have placed the tools on the workspace and connected them you may press the Go button; FX will generate the sound (displaying its progress in the status bar) and store it. When generation is complete you can play the sound by pressing the Play button.

Once you press the go button all command buttons except for Stop will be greyed out until the calculation is complete.


Command: Stop
    Stop

This command has one of two purposes:

If FX is calculating - Stops any current sound processing calculation and returns FX to the idle state.

If FX is playing a sound - Stops the playing the sound and returns FX to the idle state.

Once you press the Go or Play buttons all command buttons except for Stop will be greyed out until the calculation is complete or the sound has been played.


Ccmmand: Play
    Play

Plays the last generated sound.

Hint - If FX displays the message MMIO error when you press the play button it may mean that your sound card can't handle the sample size or rate that you have selected. Try using the options dialog to select a lower sampling rate. Note that this version of FX requires a 16 bit sound card.


Command: Set FX control options
    Options

Displays the option dialog (see below) which allows you to set various parameters controlling the way FX operates. Options which may be set are:

Sampling rate

Currently FX supports three of the most common sampling rates 11KHz, 22KHz and 44KHz. A slow sampling rate allows FX to generate sounds more quickly but with lower quality. A high rate provides better quality sounds but takes longer to generate. In addition the higher the sampling rate the larger the size of the WAV file if the sound is saved.

Auto stop

The value of the two auto stop parameters Auto stop (seconds) and Auto stop (volume) define when FX stops its calculations on the assumption that there is no more output. Auto stop occurs when the output tool sees more than the specified number of seconds of sound which has less than the auto stop volume.

Saved sample size

All FX calculations are carried out using 16 bit sound samples however the contents of the output tool may be saved as 8 or 16 bit samples.

Maximum duration
It's relatively easy for beginners to create layouts which generate sound indefinitely and never stop. This option forces FX to terminate after generating a specified number of seconds of output. Select a very long maximum duration such as 9999 seconds to effectively disable this feature.


Command: Save sound to file
    Save sound

Saves the last generated sound as a standard Windows WAV file. The saved file will have the sample rate and size defined in the options dialog.


Command: Save layout to file
    Save layout

Displays a dialog allowing you to select a file name then saves the current layout as a file.


Command: Load layout from file
    Load layout

Discards the current layout and loads a previously saved layout.


Command: New layout
    New

Discards the current layout and creates a new empty layout.


Bug reports and enhancement suggestions
Bugs, enhancements and contacting the author

If you find any bugs in FX or would like to suggest enhancements for future versions please send an email message to the author, Nick Jones at either of the following addresses:

CompuServe: 100010,1773

Internet: 100010.1773@compuserve.com