Copyright: Copyright ® 1995 David L. Dight


Contents

1.  Introduction

1.1    What is WaveGen ?

1.2    Typical uses

1.3    Example 1: how to generate a single waveform

1.4    Example 2: how to generate a multiple waveform

1.5    Example 3: how to generate a multiple tone sequence

1.6    Discussion: creating unique instrument waveforms

2.  Commands

2.1    File menu

2.2    Edit menu

2.3    View menu

2.4    Sequence menu

2.5    Help menu

3.  Program notes

3.1    Hearing the sound

3.2    Configuration Options

3.3    Tone Script Language Reference

3.4    Using the Envelope

3.5    Limitations of PCM sampling

4.  Miscellaneous

4.1    How to register

4.2    Other programs written by the author

4.3    Legal stuff

4.4    Contact information

4.5    Availability

4.6    Ombudsman Statement

«»


File menu commands
2.1  File menu commands

The File menu contains the following commands:

New	Creates a new wave file.
Open	Opens an existing wave file
Clear	Closes the current wave file.
Save	Saves an opened wave file using the same file name.
Save As	Saves an opened wave file to a specified file name.
Play	Plays the current wave file using the MCI interface.
Settings	View or edit WaveGen settings.
Exit	Exit WaveGen.


File view commands
2.3  View menu commands

The View menu contains the following commands:

File details	Displays a summary of the current wave file's header
Rewind	Rewinds the wave file,  resets scaling to default.
Samples	Sets the display to show individual samples
Lines	Set the display so that individual samples are joined by a continuous line.
Scale	Toggles the scale display


Edit menu commands
2.2  Edit menu commands

The Edit menu contains the following commands:

Undo	Undo the previous edit.
Redo	Undo the previous Undo.
Mix with	Mix the current wave with a new wave.
Wave Editor	Edit the current wave file with a user defined wave editor.
Adjust volume	Increase,  decrease or normalise the amplitude of the current wave file.
DC Offset	Adjust the DC offset / zero volume line.
Edit Sample Rate	Edit the sample rate of the current wave file.
Fade	Fade in or fade out the current wave file.
Invert	Invert the current waveform.
Modulate	Modulate the amplitude of the current waveform at a specified frequency and intensity.
Reverse	Reverse the order of each sample in the current wave file.


Help menu commands
2.5  Help menu commands

The Help menu contains the following commands:

Index	Provides an index to topics on which you can get help.
Register	Enter your validation details to create the 'Registered Version'.
About	Displays the version number of WaveGen as well as the amount of free windows resources and disk space.


Sequence menu commands
2.4  Sequence menu commands

The Sequence menu contains the following commands:

DTMF tones	Generate DTMF tones to a new wave file.
Sequencer	Generate tone and chord sequences to a new wave file.
Mix with...	Mix the current wave with a new tone sequence.


File New command
2.1.1  New (File menu)

Use this command to create a new wave file.  A dialog box will be presented so that you can enter the desired parameters.  Click on the parameters below for more details...

This dialog is also used to mix a new waveform with an existing one (See Edit:Mix).

Shortcuts

Keys:	CTRL+N

Toolbar:


File Open command
2.1.2  Open (File menu)

Use this command to open an existing wave file for editing.  WaveGen will display a file open dialog so that you can select a file.  The initial directory that the dialog will default to the directory specified as your Source Directory  If this is not set,  WaveGen will default to the current directory.

If the wave file is stereo,  WaveGen will prompt  you to convert it to mono.  If you choose no,  the open will be aborted since WaveGen only handles mono wave files.

Shortcuts

Keys:	CTRL+O

Toolbar:


Exit command
2.1.8  Exit (File menu)

Exits WaveGen.  If the current wave has not been saved,  WaveGen will prompt to save it (if you have selected Expert Mode this prompt is suppressed).

Shortcuts

Keys:	ALT+F4

Toolbar:


What is Wavegen?
1.1  What is WaveGen ?

WaveGen is a Windows PCM wave file generator.  The program enables you to create unique waveforms of any frequency and amplitude for both 8 and 16 bit sample sizes with the standard range of sampling rates or any user selected rate.  All wave files under WaveGen are mono.  From a set of wave generation algorithms you can generate pure waveforms or mix different waveforms together.

Using the configurable envelope function,  tones can be modified to produce life like sounds.

Using the Tone Sequencer Language,  musical patterns can be generated such as bass lines,  melodies,  chord harmonies and so on.  These can be used as the basis for new compositions.  All of WaveGen's waveform algorithms are available to the sequencer.

WaveGen also allows you to generate DTMF tone sequences for use over standard telephone networks.

WaveGen provides a set of basic wave processing operations such as fade,  normalise,  modulate,  DC offset and sample rate editing.  More involved wave edits can be made with a user defined wave editor called from within WaveGen.

WaveGen uses double floating point calculations when generating waves.  The frequencies generated are very accurate.  The accuracy increases with the sampling rate.

System Requirements

The minimum system required is an 80386 or greater running Windows 3.1 or greater.  WaveGen will not work under Windows 3.0.  WaveGen will use the floating point co-processor if it is present (strongly recommended).  WaveGen also expects the [MCI] sound driver to be installed.


Typical uses
1.2  Typical uses

WaveGen is suitable for creating wave files for import into wave trackers and sample playback synthesisers.  In particular,  these wave files can be used to create unique instrument patches and sounds.  16 bit/44100Hz samples are suitable,  for example,  for importing into E/MU Soundbank fonts (.SBKs) such as those supported by Creative Labs' AWE32 sound card and many other OEMs.

WaveGen supports wave generation at any user defined sampling rate.  Combined with a wave file conversion utility,  the generated waves can be used across a wide range of hardware.

Using the tone sequencer,  you can generate sequences of unique musical instrumentations.  This is ideal for composition and improvisation.  WaveGen is "music aware",  supporting keys and chords and MIDI notes,  making it ideal for musicians and music enthusiasts (in particular,  those using wavetrackers).

WaveGen can also be used for creating test tones;  testing the frequency range of equipment (eg. speakers);  generation of DTMF tone sequences;  testing the frequency range of a listener and can even be used to tune instruments.

WaveGen may also be of use to science and music teachers and other educationalists.


Example - single wave
1.3  Example 1: single wave

To create a new wave,  click on File:New.  WaveGen will display the wave parameters dialog (see New command) where you simply fill in the parameters you desire,  for example:

1. Select the File: New command.

2. Keep all the defaults,  and click OK.

3. WaveGen will generate a sine wave at 440Hz,  80% maximum volume,  16 bit @ 44100 Hz sampling rate.

4. Select File:Clear and repeat the above.  Try experimenting with the different values.

You should see something like the following:

Click in this window for details on the display.


Example - multiple wave
1.4  Example 2: multiple wave

To create a multiple wave,  click on Edit:Mix.  WaveGen will display the wave parameters dialog (see New command) where you simply fill in the parameters you desire,  for example:

1. Create a simple sine wave,  as described in Example: single wave with all the defaults except volume,  which you should set to 45%.

2. Select the Edit:Mix command and you will be presented with the wave parameters dialog.  Select sine again,  but this time set the frequency to 220 Hz,  and volume 45% (WaveGen will have remembered the previous settings).  Click OK.

3. You now have a simple octave wave which is the basis of the Hammond Organ and other popular organs of the 50's and 60's.  Add more waves with frequencies in multiples of 440Hz for even better tones.

There is no limit to the number of mixes you can make but you should make sure that the combined waveforms don't exceed the maximum/minimum amplitudes (see Limitations of PCM sampling).  To adjust the amplitudes,  use the Adjust volume command to normalise or increase/decrease volume.  Mixing of waves can be undone once for each mix.

To generate a custom wave,  click in Custom.  WaveGen will display a dialog box with a selection of algorithms.  See Custom wave for more details.


Example - multiple sequence
1.5  Example 3: multiple wave sequence

WaveGen uses a tone sequence script to generate sequences of tones and or chords.  To create a sequence,  click on Sequence:Sequencer.  WaveGen will display the sequence parameters dialog (see Sequencer).  For this example,  six individual tone sequences (*.tsq files) will be mixed together to create a unique piece of music (part01-6.tsq.).

1. Select Sequence:Sequencer.  Select Load and open the file part01.tsq.  Wavegen stores the wave parameters in the sequence file and restores them when you load so no further editing is required.

2. If you don't have a co-processor or your machine is slow,  change the sampling rate to 8000 Hz and the sample size to 8 bit (repeat this for each tone sequence).  Select Ok to begin generation.

3. Select Sequence:Mix with.  Load part02.tsq and generate.

4. Repeat step 3 for the remaining parts.  Check that the envelope settings files short01.env,  shaker01.env,  bassdrum.env and _default.env are located in the default script directory as these are used by the remaining parts.

5. In the Settings menu,  set playback to loop,  and listen to the pattern.

There is no limit to the number of tone sequences you can mix but you should make sure that the combined waveforms don't exceed the maximum/minimum amplitudes (see Limitations of PCM sampling).  To adjust the amplitudes,  use the Adjust volume command to normalise or increase/decrease volume.  Mixing of sequences can be undone once for each mix.

Once you have created and played the piece,  modify various parameters such as timing,  envelope characteristics,  waveform type and so on and get an idea of what is possible.  See Tone Sequencer Language for details on the script language.


Wave display
Wave voltage/amplitude display

WaveGen displays each sample as a point in a two dimensional graph,  such that each sample is within the range:

a.min <= x <= a.max

where a.min is the minimum voltage pulse (in 16 bit,  = -32768) and a.max is the maximum voltage pulse (in 16 bit,  = 32767).  Zero volts is centred on the horizontal mid line (DC=0).


Horizontal scroll
Horizontal scroll bar (main view)

The horizontal scroll bar represents the relative position of the window in the current wave file.  Use this scroll bar to relocate the current position.  At the default zoom (with the vertical scroll bar in the centre of the window) a click in the horizontal scroll area will page the display.

Shortcuts

Keys:	LEFT/RIGHT ARROW


Vertical scroll
Vertical scroll bar (main view)

The vertical scroll bar defaults to the centre line,  which indicates that each sample is shown as a single dot.

To zoom in,  click in the upper part of the scroll bar and WaveGen will double (magnify) the number of dots shown per sample (up to a maximum of 50x).

To zoom out,  click in the lower part of the scroll bar and WaveGen will skip every second sample in the display (up to a maximum of 50).

Shortcuts

Keys:	UP/DOWN ARROW


Hearing the sound
3.1  Hearing the sound

WaveGen uses the MCI interface for wave playback.  This interface provides the widest compatibility with different PC sound cards and will even the support the PC speaker.

Check your windows control panel under devices if you are unsure if this device is installed.  You should see a device called:

[MCI] sound

Which is the MCI waveform driver.  If you are using a soundcard the installation procedure for the card will have already mapped the MCI requests to the card.  If the device is not installed,  select Add and browse the list for the driver and then install it.  You will need to restart windows for the device to take effect (not for long,  no?).

You have the option of looping the wave playback.  This allows you to hear more continuous sound from a short sample and avoid creating an unnecessarily long sample.  Most waveforms used for import into sample playback synthesisers use short looped samples.


File Clear command
2.1.3  Clear (File menu)

Use this command to clear the current wave.  WaveGen will prompt you to save the file before clearing (except if you have selected expert mode).


Sampling Rate

Use this drop down window to select the desired sampling rate from the list.  For best results,  use the highest rate your hardware can support.  Note: you cannot change the sampling rate when mixing to an existing wave.

The sampling rate is the frequency or number of times per second that a sound is sampled.  The higher the frequency,  the more faithfully the sample will produce the sound.  Think of the sampling rate as being the number of points under a continuous curve.  The more points measured,  the smoother the curve will be.

You can select a rate from the list provided,  or enter a specific sampling rate for your equipment (be aware that your hardware must be capable of supporting the rate selected - of course you can create wave files with non-standard sampling rates for playback on other hardware.)  Most PC soundcards support 8000,  11025,  22050 and 44100 Hz.  PC wave drivers that do not support non-standard sample rates will playback a wave file with a non-supported sampling rate by selecting the closest playback rate supported.

Here is a list of popular sampling rates:

8000	Telephony standard	37.8 k	CD-ROM/XA
11k	Popular Mac rate	44100	CD rate
22K	Mac rate,  1/2 CD rate	48000	DAT rate
32000	Digital radio,  NICAM


Frequency
Frequency (pitch)

This is the frequency of the tone to generate.  Any value from 1 to 22050 is expected.  You can enter the value to one decimal place if you wish,  for example: 440.5.  If you select a MIDI note,  WaveGen will calculate the absolute frequency and display it here.  See Temperament.


Volume
Volume (amplitude)

This value is the amplitude or loudness of the tone.  The value you enter is a percentage of maximum.  Sixteen bit samples can express a greater range of volumes.


Starting Point

This value represents the offset into one wave cycle to begin generation.  The possible values are in steps of pi/4,  from 0 to 2pi.  This field can be used to cancel out other waves,  for example.


MIDI note

The MIDI standard specifies the range of possible notes as being between C0 and G10.  This gives a range of 128 notes.  A440 corresponds to MIDI note A3.


MIDI number

The currently selected MIDI note number is display here.  The MIDI standard specifies the range of possible notes as being between C0 and G10.  This gives a range of 128 notes.  A440 corresponds to MIDI note number 45.


MIDI scroll bar
MIDI note selection

Use this scroll bar to select a MIDI note to generate.  Alternatively,  enter the absolute frequency in the Frequency box.  The frequency of the currently selected MIDI note will depend on the type of tuning you have selected.  See Settings and Temperament.


Apply Envelope

If this option is checked,  WaveGen will apply the selected envelope to the generated waveform.  The envelope settings can be configured and individual settings can be saved or loaded from disk.  See Envelope.


Setup Envelope

If Apply Envelope is checked,  this button will be enabled and will display the envelope settings dialog where you can configure the envelope parameters.  See Envelope.


Tone Length

Represents the length of each tone in a sequence,  in milliseconds.


Pause Length

Represents the length of a pause (,)in a sequence,  in milliseconds.


Rest Length

Represents the length of a rest (;)in a sequence,  in milliseconds.


Ignore File Defaults

If this option is checked,  when you load a tone sequence the tone settings contained in the sequence file's header will be scanned but ignored.


Smooth

If this option is checked,  WaveGen will adjust the tone length of each tone in a sequence to improve the sound quality.


Section

If you have embedded section characters in your script ($),  you can select a particular section to generate by entering the corresponding section number (starting from 1) here.


Script

This window is used to edit existing tone scripts or create new ones.  All of the standard Windows selection,  cut and paste keys are active.  Use the horizontal scroll bars to view long lines and the vertical scroll bars to scroll through the script.  See Tone Script Language.


Filename

The full path of the last loaded tone sequence file.


Description

An optional description for the current tone sequence (this is saved to the tone sequence file header).


Clear

Clears the current tone script,  allowing you to enter a new one.


Load

Brings up the Load Tone Sequence dialog so that you can load an existing sequence file.


Save

Brings up the Save Tone Sequence dialog so that you can save the current sequence file.


Debug

Used after generating a sequence and highlit if any errors were found,  this button will move the cursor in the script window to the next character in the sequence that was invalid or not recognised.


Sample size

This value represents the size in bits of each sample.  16 bit samples can express a greater range of amplitudes than 8 bit samples.  The following table shows these ranges:

Sample Size	Min	Mid (0 volts)	Max	Dynamic Range
8 bit	0	128	255	+/- 127
16 bit	-32678	0	32767	+/- 32767
18 bit (n/a)	-131071	0	131070	+/- 131070
20 bit (n/a)	-524272	0	524271	+/- 524271

For a 16 bit sample,  there are 32767 discrete amplitudes or volumes that can be expressed.  This isn't necessarily the reason why 16 bit samples sound better than 8 bit.  An 8 bit sample @ 44100Hz has the same frequency response as the corresponding 16 bit.  The difference is the dramatic increase in the dynamic range that the sample can record.  This is why all pro gear has a sampling rate of at least 44100Hz although even higher sampling rates are used (eg. 48000) and sample sizes of at least 16bit.


Square wave

This function generates a simple square wave,  the wavelength of which is determined from the currently selected sampling rate.  A square wave oscillates from maximum to minimum pulse within the specified amplitude range.

When this wave is selected,  WaveGen will display a dialog where you can enter the pulse width to be used.  The pulse width can be selected to generate Normal or Reverse symmetry.  Normal symmetry mirrors the positive phase and reverse symmetry reverse mirrors the positive phase.

The value entered in the width field is a percentage of maximum width.  100% uses the full phase width for the pulse which produces a standard square waveform.


Custom wave

The custom wave drop list allows you to select from a range of wave generation algorithms.  These are described as follows:

Aberration (12)	Using a Taylor series it is possible to approximate y=sin(x) for 0 <= x <= 2*pi.  The more terms calculated,  the closer to sin(x) y  becomes.  When you select this algorithm,  WaveGen will display a dialog where you can enter the number of terms.  Odd term numbers are more periodic.  Terms greater than 17 are of higher detail than can be recorded in a 16 bit sample.		y = x - [ (x^n) / n! +  (x^n-1) / (n-1)! ] ...
Cos (8)	This wave is identical to a sine wave except that it is 1/4 a phase (pi/2) behind.		y = cos(x)
Cos*Sine² (14)	This produces a wave that is sluggish on the attack but sharp to decay.  Note that this wave will have twice the frequency given.		y = cos(x)*(sin(x)²)
Cos² (10)	Similar to cos wave with less area under the curve.		y = cos(x)²
Elliptical (19)	An ellipse is rotated through pi/2 and 0 <= x <= pi.  The turning point and focus (zoom) can be modified to give interesting results.  See Algorithm parameters for more details.		y = v^[1 - Q*(1 - x)²]/1 - Q
Euler (21)	The universal constant e can be used as a base in an exponential periodic function (using the natural log in the exponent).  The turning point and focus (zoom) can be modified to give different results.  See Algorithm parameters for more details.		y = e^-[ln(x)²]
Hyperbolic (20)	This waveform uses a hyperbolic equation configurable with the Q and turning point values to produce a very flexible wave generator.  Certain values at each limit produce the common sawtooth or triangle wave.  The turning point and focus can be modified to give different results.  See Algorithm parameters for more details.		y = (1+1/Q) - v^[(1/Q)²  + (1 + 2*(1/Q)(1 - x)²]
Inverse Sine (13)	This is an inverted sine wave.  This is useful to cancel other waves.		y = -(sin(x))
Logarithmic (22)	This waveform uses 1/Q as a base in an exponential periodic function (using the log base10 in the exponent).  The turning point and focus (zoom) can be modified to give interesting results.  See Algorithm parameters for more details.		y = (1/Q)^-[log(x)²]
Parabolic (18)	A parabola wave is inverted at pi (where 0 <= x <= pi) to produce a sine like wave that is slightly harsher sounding.		y = 1 - (x - 1)²
Random (7)	This will approximate white noise within the specified amplitude range.		y = rand() % max_amplitude
Sine(x²) (15)	This produces a wave that increases in frequency geometrically up to the specified wavelength.		y = sin(x²)
Sine(x³) (16)	This produces a wave that increases in frequency geometrically up to the specified wavelength,  more radically than the sine(x²).  This waveform is typically a 'synth' sound.		y = sin(x³)
Sine*Cos² (11)	This produces a wave that is sharp on the attack but sluggish to decay.  Note that this wave will have twice the frequency given.		y = sin(x)*(cos(x)²)
Sine² (9)	Sine wave squared.  A sine waveform with less enclosed area.		y = sin(x)²
Sine³ (6)	Sine wave cubed - notice the narrowing of the area under the curve.		y = sin(x)³
Sine Sweep	A Sine wave cubed over a specified frequency range that produces a continuous shift in frequency.  See Sweep Parameters.  Not available with the tone sequencer.		y = sin(x*g(t))³
Spherical (17)	A sphere is shifted at 0 to y+pi/2,  x+pi/2 (where 0 <= x <= pi) to produce a periodic waveform.		y = v^(1 - x)²
Tan (5)	Produces a tan wave.  Since this function is not continuous,  the wave is limited at the maximum and minimum amplitudes to produce a less harsh square wave.		y = tan(x)
Triangle (4)	A Triangle wave increases in amplitude linearly to maximum,  then,  decreases linearly to minimum then back to 0 pulse.  At the limits of amplitude,  the waveform sharply reverses its polarity.		y = hyperb(x,0.5,1)

Note: some of the above formulae have been abbreviated.  The number appearing after the algorithm name can be used to reference an algorithm in a tone sequence file header.


Sawtooth wave

This function generates a sawtooth wave,  the wavelength of which is determined from the currently selected sampling rate.  A sawtooth wave oscillates from minimum pulse,  linearly increasing to maximum pulse over one cycle (within the specified amplitude range).


Sine wave

This function generates a simple sine wave,  the wavelength of which is determined from the currently selected sampling rate.


Length (duration)

This value is the length of the sample in seconds.  You can enter a real number here,  such as 0.75 seconds.


File Save command
2.1.4  Save (File menu)

Use this command to save the active wave file to its current name and directory.  When you save a wave file for the first time,  WaveGen displays the Save As dialog box so you can name your wave file.  If you want to change the name and directory of an existing wave file before you save it,  choose the Save As command.

Shortcuts

Keys:	CTRL+S

Toolbar:


Settings command
2.1.7  Settings (File menu)

Use this command to select your preferences in WaveGen.  These settings are saved to the file wavegen.ini (usually in your \windows directory) and loaded each time you run WaveGen.  These settings are described as follows:

Source Directory	WaveGen displays the contents of this directory when you execute a File: Open command.  Default is the current directory.
Target Directory	WaveGen displays the contents of this directory when you execute a File: Save or File: Save As command.  Default is the current directory.
Wave Editor	Specifies the full pathname of the wave editor to be used with the File: Wave Editor command.
Script Directory	WaveGen uses this directory as the default location to load or save tone sequence and envelope settings files.  Default is the "scripts" directory.
Phone List	Specifies the full pathname of the phone list file used to store phone strings with the Sequence:DTMF tones command.
Loop Playback	Instructs WaveGen to loop the current wave file indefinitely when you execute a File:Play command.  Whilst a wave is looping,  the scroll bars are still active.
Default Tuning	When you select a MIDI note in the Wave Parameters dialog box,  WaveGen calculates the absolute frequency of the note.  Most Western music uses the equal tempered system.  You can also select the just intonation system.  Note: the just intonation calculations are in C major only.  See Temperament.
System Sounds	Enables or disables system beeps and blips.  Some people find these annoying.
Expert Mode	Enables or disables save wave prompts.
Unique Tones	Enables or disables the unique tone filter.  This filter will remove any duplicate tones that have been added to any group of tones in a tone sequence.
Ignore Settings	Instructs WaveGen to ignore the settings in wavegen.ini when it loads,  and assume defaults.
Black background	Selects the black or default background for the wave display.
User Scales	Define your own scales for use with the Tone Sequencer.  These two scales are referred to as SUSER1 and SUSER2.  See Operators and other tokens.
Save settings on exit	Instructs WaveGen to save the current state of the program when you exit.  This includes the position of the window;  the scale flag;  the samples/lines flag;  your user ID and validation key (if you have registered),  and all of the above settings.


File Save As command
2.1.5  Save As (File menu)

Use this command to save and name the active wave file.  WaveGen displays the Save As dialog box so you can name your wave file.

To save a wave file with its existing name and directory,  use the Save command.


File Save As dialog box

The following options allow you to specify the name and location of the file you're about to save:

File Name

Type a new file name to save a wave file with a different name.  A file name can contain up to eight characters and an extension of up to three characters.  If no extension is specified,  WaveGen adds '.WAV'.

Drives

Select the drive in which you want to store the wave file.

Directories

Select the directory in which you want to store the wave file.

Network...

Choose this button to connect to a network location,  assigning it a new drive letter.  Appears only if a valid network is installed.


Mix command
2.2.3  Mix (Edit menu)

Use this command to mix a new waveform with the active waveform.  WaveGen will display the wave parameters dialog box (See File:New) where you can enter the new wave parameters.  The sampling frequency and playback duration are fixed to the original wave.

Shortcuts

Keys:	CTRL+M

Toolbar:


Invert command
2.2.9  Invert (Edit menu)

Use this command to invert the active waveform.  An inversion simply reverses the polarity of every sample.


Edit Sample Rate command
2.2.7  Edit Sample Rate (Edit menu)

Use this command to edit the sample rate of the current wave file.  WaveGen does not resample the wave.  The new sample rate is written to the wave file's header.

If your soundcard can handle non-standard sampling rates,  the effect of increasing the sampling rate is to raise the pitch of the sample.  Decreasing the sample rate lowers the pitch.  See Sample Rate.


DC offset command
2.2.6  DC Offset (Edit menu)

Use this command to edit the DC offset of the current wave file.  The DC offset defaults to 0 and is indicated by the centre line.  The offset amount cannot exceed the maximum and minimum amplitudes for the current wave's sample size.  The value given in the dialog is in sample amplitude units.

WaveGen will clip any sample that as a result of adding the given offset value,  exceeds the maximum/minimum ranges.  See Sample Size.


Fade command
2.2.8  Fade (Edit menu)

Use this command to fade in or out the active waveform.  The fade dialog allows you to specify a fade in or fade out.  By default,  the entire wave file is faded either from or to 0 volume.  You can specify a starting point to commence fading.  This value is entered as a percentage,  so that 50% will start fading half way through the wave.


Reverse command
2.2.11  Reverse (Edit menu)

Use this command to completely reverse the active waveform.  This means the order of each sample is inverted.  A wave that faded out will now fade in,  for example.


Wave Editor command
2.2.4  Wave Editor (Edit menu)

Use this command to invoke a user specified wave file editor with the current wave file.  You can make any edits to the file before returning to WaveGen.  If you have loaded an existing file and then invoke the wave editor or you have saved a new file,  WaveGen will copy the file to a temporary file and call the editor with the temporary file.

You cannot execute any commands from WaveGen whilst the wave editor is running since the state of the wave file you are editing is indeterminable.

See WaveEditor for more details.

Shortcuts

Keys:	CTRL+E

Toolbar:


Undo command
2.2.1  Undo (Edit menu)

Use this command to undo the previous edit.  Edits that can be undone include Mix,  Adjust Volume Invert,  Modulate,  Reverse and any edits made with the wave editor.

When you undo an edit,  the current buffer is saved to the 'redo' buffer.  An undo may then be undone by a redo.  See Redo command.

Use undo and redo to quickly change between versions of an edit.

Shortcuts

Keys:	CTRL+Z


Redo command
2.2.2  Redo (Edit menu)

Use this command to 'undo an undo'.  When you use the Edit:Undo command,  the current buffer is saved to the redo buffer.  If you are not satisfied with the 'undone' version,  you can revert to the version prior to your last undo by using the redo command.

Any other edit made after an undo except a redo command will destroy the contents of the redo buffer.  Use undo and redo to quickly change between versions of an edit.

See Undo command.

Shortcuts

Keys:	CTRL+A


Adjust volume command
2.2.5  Adjust volume (Edit menu)

Use this command to adjust the volume of the current wave.  The Adjust volume dialog is displayed for you to enter the appropriate parameters.  Click on these parameters for more information.


Modulate command
2.2.10  Modulate (Edit menu)

Use this command to modulate the amplitude of the current wave.  When certain waveforms are modulated,  they imitate the way some sounds are created,  for example,  when a double bass is plucked,  the note seems to waver.  This wavering is simply  a sinusoidal variation in the note's amplitude (volume).

The Modulate dialog lets you specify the frequency at which to modulate (ie.  the number of increases and decreases in volume per second),  the amplitude and the modulation wave type to apply to the amplitude.  Click on the parameters in the box for more details.


Modulation frequency

This value represents the number of increases and decreases in amplitude to apply to the waveform.  Since modulations of over 128 Hz are difficult to hear (they also distort the underlying waveform) the value must be within 1 to 128 Hz.  Low frequencies create a tremolo effect,  where high frequencies produce a vibrato like effect.  This corresponds to a synthesiser LFO frequency.


Modulation amplitude

This value represents the percentage of the amplitude of each sample to modulate by.  For example,  when using a sine wave modulation,  this value represents the maximum and minimum ranges of the modulation.  Louder sample amplitudes tend to modulate more,  proportionally than do the softer samples.  This corresponds to a synthesiser LFO intensity or amount.


Sine Modulation

Organic instruments such as strings and brass all modulate sinusoidally.  This form of modulation has no jumps in amplitude.  The amplitude moves steadily along in a simple sine pattern.  The frequency of the modulation will determine the accuracy,  with higher frequencies showing some distortion.  See Modulation frequency


Square Modulation

This form of modulation jumps from maximum to minimum amplitude each cycle.  Depending on the frequency,  some distortion may occur as individual samples on the period boundaries may be effected.  This form of modulation can produce interesting 'synth' type sounds,  especially when the modulation frequency is a factor of the frequency of the tone(s).  See Modulation frequency


Louder command
Adjust volume - louder

WaveGen will increase the volume of the wave by the specified percentage.  The percentage specified relates to an amount to adjust as a proportion of the individual sample, not  of the maximum.  (See Normalise command).


Softer command
Adjust volume - softer

WaveGen will decrease the volume of the wave by the specified percentage.  The percentage specified relates to an amount to adjust as a proportion of the individual sample, not  of the maximum.  (See Normalise command).


Normalise command
Adjust volume - normalise

WaveGen will set the volume of the wave to the specified percentage of maximum volume.  WaveGen does this by scanning the entire wave to find the maximum and minimum volumes,  then sets each sample's volume within the context of those limits as a proportion of absolute maximum and minimum (the percentage value given) .


Adjust volume amount
Adjust volume - amount

The amount  to adjust the volume is expressed as a percentage value.  With the Increase and Decrease volume commands,  the value represents a percentage of each sample.  With the Normalise command,  the value represents a percentage of maximum volume.


Rewind command
2.3.2  Rewind (View menu)

The wave is display is rewound to the first sample and the window scaling is reset to the default.

Shortcuts

Keys:	CTRL+R

Toolbar:


Scale command
2.3.5  Scale (View menu)

Toggles the scale display.  The scale display appears at the left of the window along the y-axis and shows the proportion of amplitude of maximum (-1 <= x <= 1).

This command also toggles the sample scale indicator which appears at the top right hand of the window.  This value changes when you scroll the vertical scroll bar.  It shows the number of samples shown to the number of samples read.  For example,  if you zoom in (click in the upper part of the scroll bar),  the scale will display 1:2.  This means that each sample is shown at twice the normal magnification.  If you zoom out (click in the lower part of the scroll bar),  the scale will display 2:1.  This means that every second sample is shown.


File details command
2.3.1  File details (View menu)

Displays details about the current wave file from the wave file header.  These values are described as follows:

File name	The file name of the current wave,  or untitled if the wave has not been saved yet.
File size	The size in bytes of the current wave file.
Sample number	The number of samples in the current wave file.
Sample rate	The sampling rate (Hz) of the current wave file.
Sample length	The length in seconds of the current wave file.
Sample size	The number of bits in each sample of the current wave file.
Wave file format	The wave format of the current wave file.  WaveGen only supports Windows PCM.

Shortcuts

Keys:	F10

Toolbar:


Play command
2.1.6  Play (File menu)

WaveGen will attempt to play the current wave through the MCI interface.  If the MCI driver is not installed,  WaveGen will display an error message..  The sound device you are using must be capable of playback at the selected sampling frequency and sample size.  See your Microsoft Windows documentation for details on installing the [MCI] Sound driver.

If the Loop Playback flag is set,  WaveGen will loop the wave indefinitely,  or until you select File: Stop.

Shortcuts

Keys:	CTRL+P,  SPACEBAR

Toolbar:


DTMF command
2.4.1  DTMF tones (Sequence menu)

DTMF tones are used by domestic telephone handsets to dial a number over a tone sensitive exchange line.  The combinations of tones used to represent digits (including the * and # characters) are standardised,  however some phone systems use different tone break,  length and pause intervals.

To generate a DTMF sequence,  fill in the relevant fields in the dialog.  WaveGen will select a sampling rate of 8000 Hz and use 8 bit samples by default since these defaults approximate the resolution of most phone networks.,  however any combination of sample rate and sample size is ok.

WaveGen will generate the tones to a new wave file.

When you enter the phone number,  you can use any non-digit or non-metacharacters in your string to improve readability.  WaveGen will ignore these characters when generating the tones.  Use the comma (,) to insert a pause in the string.  The pause value corresponds to the Pause Length field in the dialog.  Most direct dial systems do not require a pause,  although in some circumstances it may be needed (see below).  Example:

Acme Alternet Access  0011,1,998,7654321

The Break Length is the length of time in milliseconds between successive tones (not including a pause).  The Tone Length defaults to the standard 100ms.

To generate MF tones instead of the default DTMF,  check the MF box.

WaveGen will remember up to 256 phone number strings that  you have entered.  These are automatically saved to the file phone.lst in the default directory,  (This pathname can be changed using the Phone List setting,  see Phone List ).

The phone list file is a normal text file which can be modified with a text editor.  WaveGen will ignore any blank line,  or any line beginning with a semi-colon (;),  so that you can enter comment lines.

To use a string,  double click on the desired string in the list box.  The selected string is copied to the phone number variable for editing.

Phone strings can be deleted by clicking on Delete,  or the entire list can be cleared by clicking on Clear All.

To use a DTMF sequence,  hold the handset to your speaker and playback the wave.  For better results,  use a small speaker (like a pair of headphones).  If you find the tones are not properly recognised,  increase the break interval,  insert pauses or increase the playback volume.  For long distance or international use,  insert pauses between the area codes/international access codes and the local number.

Shortcuts

Toolbar:


DTMF definition
DTMF

Variously defined as Data Tone Multiple Frequency and Dual Tone Multi Frequency.  For domestic telephony via the PSTN,  the system uses pairs of tones mapped in a 4 x 4 grid,  as follows:

1st / 2nd	1209Hz	1336Hz	1477Hz	1633Hz
697Hz	1	2	3	(reserved)
770Hz	4	5	6	"
852Hz	7	8	9	"
941Hz	*	0	#	"

These correspond to the CCITT standard.  Another set of DTMF tones are used internally by telephone networks.  These are referred to as Multi-Frequency tones (MF) and are mapped as follows:

1st / 2nd	700Hz	900Hz	1100Hz	1300Hz	1500Hz
900Hz	1
1100Hz	2	3
1300Hz	4	5	6
1500Hz	7	8	9	0
1700Hz			*		#


PCM

Pulse Code Modulation.


Samples toggle
2.3.3  Samples (View menu)

WaveGen will display the waveform as individual samples (default).


Lines command
2.3.4  Lines (View menu)

WaveGen will display the waveform with each individual sample joined by a continuous line.


Index command
2.5.1  Index (Help menu)

Use this command to display the opening screen of Help.  From the opening screen,  you can jump to step-by-step instructions for using WaveGen and various types of reference information.

Once you open Help,  you can click the Contents button whenever you want to return to the opening screen.  Use the browse buttons to review the main topics.  The help system makes use of screen snapshots with hotspots.  To locate hotspots,  press TAB.

Most of WaveGen's dialogs have context sensitive help buttons.

Shortcuts

Keys:	F1

Toolbar:


Register command
2.5.2  Register (Help menu)

Use this command when you have received your registration notification.  You will receive a user ID and a validation key.  Enter these exactly as they appear in your notification.  If they are correct,  WaveGen will exit the dialog when you click on OK.  If they are invalid,  you will only be able to leave the dialog by clicking on Cancel.  WaveGen will ignore any invalid entry.

If the registration codes are valid,  WaveGen will change to the registered version.  This means that the sign-on splash banner will automatically remove itself after a second (no key needs to be pressed),  and the 'nag' screen which appears at program termination will no longer be displayed.  The limitation of one save per session is also lifted.

See How to register for more details.


How to register
4.1  How to register

If you regularly use WaveGen then please register.  The registration fee is nominally $US 30.00 - send more or less as you feel.  I don't expect to make a living out of this program,  however,  your small contribution will encourage me to continue to develop software that you and people like yourself will find useful.

When you register you are entitled to unlimited mail,  e-mail or phone support;  program notifications (eg. bug fixes or work-arounds) and one free major upgrade (on disk).  Registration removes the "nag" screen and lifts the one save per session limit.

The best way to register is to damage the plastic.  I can accept credit card payments without your signature.  Alternatively you can print and sign the form if you wish.  Australian residents can pay by cheque if desired.  Please note: I cannot accept cheques drawn on a foreign bank (it costs more to process the cheque than its face value).  You can also send the equivalent cash in your local currency.

When you exit WaveGen,  select Register in the pop-up window.  Fill in the details on the form.  If you have access to e-mail and are paying by credit card,  select Save.  Look for the file wavegen.dta in the default directory.  Attach this file to an e-mail message and send to me (it may be necessary to uuencode the file first).  If you don't have e-mail,  select Print.  In the print dialog you can select Print to file if you wish to print the file elsewhere or select the default,  to have Windows print the details.  Fax or mail the form with your payment.

If you select Save as Text the text will be saved to a file called register.txt in the default directory.  You can print this file and then fax or mail it.

If you wish to just fill in the form and send it at a later date,  select Save and then exit.  The next time you select Register from the pop-up,  WaveGen will remember these details.

What next ?

You will receive notification by e-mail or post which will contain your user ID and a validation key.

Select Help:Register from the main menu.  If you have received the notification by e-mail open the notification using notepad and cut and paste the information to the fields in the dialog box (this way you will avoid miskeying the rather lengthy validation key).  If you have received the notification by post enter your ID and your validation key exactly as it appears in the notification.

Alternatively,  you can cut and paste the userID and Validation key directly into wavegen.ini using your text editor (or notepad).  WaveGen will validate the key when you restart.  See ValidationKey.

The registration key can be used with later shareware releases to create the registered version.  This effectively gives you lifetime access to free upgrades.

See Register for more details.


Configuration statements
3.2  Configuration Statements (WAVEGEN.INI)

These statements are read from the file wavegen.ini each time you run WaveGen.  The file is automatically created and updated.  The file usually resides in the \windows directory.  You can edit this file with a text editor.  Each statement takes the form:

setting=value

The first statement in the file must read:

[WaveGen]

The statements are described as follows:

SourceDir	WaveGen displays the contents of this directory when you execute a File: Open command.  Default is the current directory.
TargetDir	WaveGen displays the contents of this directory when you execute a File: Save or File: Save As command.  Default is the current directory.
WaveEditor	Specifies the full pathname of the wave editor to be used with the File: Wave Editor command.
ScriptDir	WaveGen uses this directory as the default location to load or save tone sequence and envelope settings files.  Default is the current directory.
PlaybackLoop	Instructs WaveGen to loop the current wave file indefinitely when you execute a File: Play command.  To stop the wave,  select the File: Stop command (0=FALSE,  1=TRUE).
ExpertMode	When in expert mode,  WaveGen will not prompt you to save unsaved work.  Use this to speed up your experiments (0=FALSE,  1=TRUE).
SaveSettings	Instructs WaveGen to save the current state of the program when you exit.  The state includes the position of the window;  the scale flag;  the samples/lines flag;  your user ID and validation key (if you have registered),  and all settings described here. (0=FALSE,  1=TRUE).
SystemSounds	Instructs WaveGen to enable (1=TRUE) or disable (0=FALSE) system beeps and blips.
JustIntonation	Instructs WaveGen to use just intonation when it calculates the absolute frequency in the Wave Parameters dialog box.  See Temperament for more details.  (1=just) or (0=equal tempered).
ShowScale	Specifies that the amplitude and the zoom scales be displayed (0=FALSE,  1=TRUE).
BlackBackground	WaveGen will use a black background for the wave display.  Change to (0 =FALSE) for the default background.
PhoneListFile	Specifies the full pathname of the phone list file used with the DTMF dialog.
ShowSamples	Specifies that WaveGen default to either sample (dots,  = 1) display or lines (= 0).
UserID	Your user ID as specified in your registration notification.
ValidationKey	You validation key as specified in your registration notification.
UserScale1	User supplied scale #1,  used with the tone sequencer.  See Operators and other tokens.
UserScale2	User supplied scale #2,  used with the tone sequencer.  See Operators and other tokens.
IgnoreSettings	Instructs WaveGen to ignore settings from wavegen.ini and assume defaults (1=TRUE,  0=FALSE).
UniqueTones	Instructs WaveGen to use the unique tone filter with the tone sequencer.  (1=TRUE,  0=FALSE).
Left, Right, Top, Bottom	Specifies the position and size of the window that WaveGen was last  executing in (in device units).

If for some reason WaveGen misbehaves,  delete this file from your \windows directory and restart WaveGen.


About command
2.5.3  About (Help menu)

Use this command to display the copyright notice,  version number and registration ID of your copy of WaveGen.  Also displayed is the amount of free windows user resources and the free disk space on the default drive.


Sequencer command
2.4.2  Sequencer (Sequence menu)

Using WaveGen's tone script language,  you can create detailed tone or chord sequences.  You can use any of WaveGen's wave generation algorithms.  You can for example,  set random ranges within chord arpeggios or scales,  and WaveGen will generate random patterns in the key selected.

A tone script is a sequence of notes/chords and functions that allows you to instruct WaveGen to generate user definable sequences.  These scripts can be saved and restored for later use.  For a detailed description of the script language,  see Tone Script Language.

Click on areas of the window below for more information.

This dialog is also used to mix a new sequence with the current wave (See Mix with...).

Shortcuts

Keys:	Ctrl+Q

Toolbar:


Mix with command
2.4.3  Mix with (Sequence menu)

Use this command to mix a new tone sequence with the current wave file.  (See Sequencer).

Shortcuts

Keys:	Ctrl+X

Toolbar:


Other programs
4.2  Other programs by David L. Dight

The following Shareware DOS programs are available for downloading:

XED version 1.1b  heX EDitor  <ASP>   $US 15.00

XED is a powerful, HEX/ASCII/BINARY file editor. Unlimited file size, 28/43/50 line modes, mouse support. Edit, insert and delete data from any file. Undo;  Search & Replace; goto offsets and markers; ASCII tables; DOS shell; Menus; File info; Binary display/edit; generate C data files; C like assignments; bitwise edits; text filters; unassembler; Fast and friendly. An indispensable tool.   Availability:

Compuserve IBMSYS LIB 6, XED11B.EXE

garbo.uwasa.fi:/pc/binedit/xed11b.zip

oak.oakland.edu:/SimTel/msdos/binedit/xed11b.zip

NED version 1.7x  Programmer's Text Editor <ASP>   $US 12.50

A high performance text editor for programmers and general use. Edit 10 files; 28/43/50 modes; File wildcards, pick lists and browse; compile and run apps; On line calc,ASCII tables,calendar & help. Super fast screens; Kbd. macros; std. editing functions. +many others; Block cut,copy paste & fmt and columns; Autosave; Clock, Alarm, Spooler; Regular expr S & R; {} match; Configurable. +more! Full documentation.   Availability:

CompuServe: IBMAPP LIB 1 NED17X.EXE

garbo.uwasa.fi:/garbo/pc/editor/nedit17x.zip

oak.oakland.edu:/SimTel/msdos/editor/nedit17x.zip

SF  SuperFind v7.0 <ASP>   $US 9.50

Super find is an enhanced DOS file find utility. Find files by wildcards,attributes, sizes,date/date ranges. Search multiple and network drives. SF scans the drive/dir spec only once, allowing multiple finds. SF permits located filenames to be substituted into a user supplied DOS command string. Great for locating and deleting or copying files across multiple drives and networks.   Availability:

CompuServe: IBMSYS LIB 6 SF70.EXE

m.ehd.hwc.ca:/pub/msdos/sdn/1-util/sf70.arj


Contact information
4.4  Contact information

I welcome any comments,  bug reports or suggestions.

David L. Dight

P.O. Box 280 Kings Cross,

N.S.W.  2011  Australia.

Fax: +61 2 770 1717

Internet: davidd@interconnect.com.au

Compuserve: 100033,2563

I would like to thank the following people for their invaluable contribution to this program:

Mark Barton:  Windows expertise,  beta testing.

Frank C. Crisp,  Stephen Rowlison:  Beta testing.

John S. Crisp:  Algorithm development.

Rev. 1.1.d Jul-95


You won't get much sympathy from an Australian farmer for an abandoned fox cub like this one,  however this picture was taken in South India.  This little guy (the one on the left) fell upon a villager who took pity on him.  Unfortunately,  the villager's wife was afraid of foxes so he had to be kept in his friend's back yard.  The villager,  for his part,  couldn't find any rope to tie him up with but did manage to improvise with a coat hanger !


No Help Available

Sorry,  no help is available for this area of the window.


Ombudsman Statement
4.6  ASP Ombudsman statement

WaveGen  v1.1 is produced by David L. Dight,  an author member of  the Association of Shareware Professionals (ASP).  The ASP wants to make sure that the shareware principle works for you.  If you are unable to resolve a shareware related problem with an ASP member by contacting the member directly,  the ASP may be able to help.  The ASP Ombudsman can help you resolve a dispute or problem with an ASP member,  but does not provide technical support  for members' products.  Please write to the ASP Ombudsman at 545 Grover Road,  Muskegon,  MI 49442-9427 (USA) or send a message  via CompuServe to ASP Ombudsman 70475,1071.  The Ombudsman may also be contacted by FAX on: +1 616 788 2765.  In communication with the Ombudsman please include a telephone number and/or FAX if available.


Availability
4.5  Availibility

This release can be found at the following locations:

1. On Compuserve:

GO MIDIFORUM

Library 10, WAVG11.ZIP

2. On the net:

SimTel and mirrors, primary site:

ftp://oak.oakland.edu/SimTel/win3/sound/wavgen11.zip

CICA and mirrors, primary site:

ftp://ftp.cica.indiana.edu/pub/pc/win3/sounds/wavgen11.zip

To find the nearest mirror site, use archie.  Updates will be announced in comp.archives.msdos.announce and in alt.binaries.sounds.utilities, with follow up in comp.archives.msdos.d

3. ASP Shareware CD series,  and many other shareware CD's.

4. The latest version will always be available on the WWW, from my home page at:

http://people.interconnect.com.au/~davidd/


MasterCard

You know,  master the moment,  blah,  blah.


VISA

Your ticket to success.  Countries that don't have Visa aren't worth visiting,  right? (yeah,  sure).


American Express

Without leave,  don't home it.


Temperament

As you are probably aware,  music exhibits an underlying mathematics.  It is said that Pythagoras discovered this by observing the vibrations of a stringed instrument.  If you take a string and pluck it,  the string vibrates at a certain audible frequency.  If you hold your finger lightly half way on the string and pluck,  the note you will hear will be twice the frequency.  If you hold your finger at a position 1/3 along the string,  the tone will be a third or diatonic (in the key of Cmaj,  this will be E).

What you are hearing here is known as just intonation and is not  how the keys of a piano are tuned.  The problem with just intonation is that as you change key,  the proportions between the notes change.  That is to say,  if you were playing a piano that was just intoned,  it would be tunable to one key only.  To create a just intoned piano capable of handling all key signatures would require too many piano keys.  If we used just one key signature (say repetitions of the above over all octaves) music played in a different key will sound very 'out'.

This problem was discovered a long time ago and a number of systems were devised to 'temper' or moderate intervals.  The system that was eventually settled on is known as equal temperament.  This system adjusts each note in a scale such that there is a small amount of error (except for notes one or more octaves apart) compared to notes tuned to just intonation.  The proportions of a semi-tone in the equal tempered scale are in the order of 2^1/12.  By making this adjustment,  compositions can be transposed through any key and will sound good,  although some combinations of chords or notes will still sound a little out of tune.  Most people don't really detect this.

WaveGen allows you to generate tones from either system.  Most Western music uses the equal tempered system but just intonation can also be used to good effect.  Note: the just intonation calculations in WaveGen are based on the key of C only.

If you are only generating single tones or tones with overtones then the absolute tuning will not make any difference since it is the proportions between  the notes of a scale that matters.  Tuning only becomes important if you are generating chords or arpeggios.

The following table shows the absolute frequencies of  the Cmaj scale in the octave around middle C,  from both systems:

System/Note	C3	D3	E3	F3	G3	A3	B3	C4
Equal tempered (Hz)	261.6	293.7	329.6	349.2	392	440	493.9	523.3
Just intonation (Hz)	264	297	330	352	396	440	495	528


Using the envelope
3.4  Using the Envelope

A major characteristic that distinguishes an artificially generated tone from an 'organic' sound such as an instrument is that with the former,  the volume or amplitude does not change with time.

When you strike a piano key,  the amplitude rises suddenly (but not instantaneously) to some maximum,  1:attack;  remains at that maximum for a while,  2:hold;  then drops to some lower level,  3:decay;  where it remains until  4:sustain;  you release the key,  when the amplitude drops (again not suddenly) to zero,  5:release.

This model of Attack,  Hold,  Decay,  Sustain and Release,  collectively referred to as an envelope, is usually abbreviated to AHDSR.

The envelope is a basic tool of most synthesisers.  WaveGen uses the envelope to modify the amplitude of a tone or chord with time.  For sequences,  the envelope is applied to each tone or group of tones.

The Wave Parameters and Tone Sequencer dialogs allow you to setup an envelope to be used with the tone(s) to be generated.  Clicking on Setup... will bring up the Envelope Parameters dialog.  Using the sliders,  you can make your adjustments and then click Ok.  You can optionally ignore the envelope by unchecking Apply envelope.

Since there are many possible combinations,  each with distinctive results,  WaveGen permits envelope settings to be saved and retrieved from disk.  Click on Save or Load to bring up the appropriate dialog.  The last loaded envelope settings file is displayed in the dialog.  Envelope setting files have the default extension *.env and reside,  by default,  in the script directory.  The file consists of one line of text as follows:

attack,hold,decay,sustain,release

for example:

60,99,99,50,70

All of these values are between 0 and 100 and are used as follows:

Phase	Range [duration %]
attack	0-100 [ 0 - (tonelength / 5)]
hold	0-100 [ 0 - (tonelength / 5)]
decay	0-100 [ 0 - (tonelength / 5)]
sustain	0-100 amplitude to sustain at;  [duration = tonelength - ((100 - release) * (decay + hold + attack) / 100)]
release	0-100 [duration=tonelength - (sustain + decay + hold + attack)]

The first three phases each refer to 1/5 of the tonelength;  a value of 100 uses the full 1/5 allocated,  a value of 1 yields 99% to the remaining tonelength.  Since the sustain and release have little meaning when the duration of the tone is already known,  these values are set to a proportion of the remaining tonelength,  by the relation in the table.  This system simulates sustain and release and can be used with good effect.  Note that the sustain value represents the percentage of amplitude to sustain at,  not a proportion of time.

Envelope settings remain in force until they are changed (even if the envelope is not applied).  When WaveGen first loads,  it looks for the file _default.env in the default script directory,  from which to set the default envelope.  Set this file to your desired default settings.  If this file is not found,  WaveGen will select defaults for you.  The dialog button Default will reload these settings.


Creating unique instruments
1.6  Discussion: creating unique instrument waveforms

Sample playback synthesisers can use samples of real instruments or use generated samples like those produced by WaveGen.  WaveGen was designed to allow you to explore and experiment with different waveforms quickly and easily.

The best way to use WaveGen is to play around with as many different combinations of waveforms as you can,  and get a feel for which combinations work best for you.  There is no limit to the number of different waveforms you can mix (except for the overall volume,  see Example: multiple waveform)

Here are a few ideas:

1. Overtones	Most organic instruments produce sympathetic vibrations in the instrument at frequencies that are either multiples or factors of the underlying tone.  These 'overtones' add a certain character to the sound produced.  Try mixing waveforms with multiples of the base frequency,  for example 440Hz+880Hz.
2. Modulation	Use modulation to add a more life like quality to the waveform.  This very basic effect can have dramatic results.  Use WaveGen to modulate the wave or use your synthesiser which should have at least two oscillators,  one which you can send to volume (tremolo).
3. Wave algorithms	WaveGen has many wave generation algorithms for you to experiment with.  As you will discover,  sine based waveforms are less harsh sounding than sawtooth and square waveforms.  Combinations of these waveforms can produce instrument sounds used in the early synthesisers and organs.  For example,  sine(x³) @ 60Hz produces a moog like sound.  More at Algorithm parameters.
4. Amplitude envelope	Very few organic sounds have square envelopes.  The AHDSR envelope model (or something similar) used in most good synthesisers accurately maps the path of the an organic instrument's amplitude.  If you are using a sample playback synthesiser,  do some work to the amplitude using the envelope provided by your synthesiser.  You can also use WaveGen's envelope.  Even a purely synthetic sound will sound better when its amplitude follows an interesting shape (as opposed to a square (none at all) envelope).
5. Using effects	There are many good wave editors around that enable you to add effects to your wave files,  for example,  echo,  flange,  delay,  chorus and so on.  WaveGen is primarily designed for wave generation,  not wave processing so if you want special effects,  hunt around for a good wave editor.  WaveGen does provide a few effects,  such as modulation,  reverse and fade.
6. Tuning	Since WaveGen can produce waves of any audible frequency you can tune your waveforms by adjusting the frequency.  If you are importing into a synthesiser you will be able to tune the individual sample very accurately on the synthesiser itself.  When developing treble instruments,  you should use [A] 440Hz as your benchmark.  When mixing tones to create chords,  you should be aware of the limitations of just intonation.  See Temperament.
7. Wave editing	Use your favourite wave editor to make adjustments to the generated waves.  You can,  for example,  trim the wave file to create a good loop point or copy sections of the wave and paste them at desired locations.  WaveGen will re-read the edited wave so that you can continue adding generations.  See Wave Editor.
8. Import waves	Interesting waveforms can be created by starting with an existing wave file.  For example,  an instrument sample can be enhanced by the addition of new tones,  or with additional effects processing.  When mixing with instrument samples,  try to match the frequency of the tone as closely as possible.
9. Sequencing	Use the tone sequencer to compose melodies and improvisations.  In particular use of wildcards in selected key/chord/scale ranges can result in useful musical material.


Algorithm parameters

Some of the Custom wave types can be modified by two parameters entered in a dialog box.  The following example shows a hyperbolic wave with the turning point set to the mid point (0.5) and the Q factor set to 0.9.  The second image shows the effect of changing the turning point.

The turning point is defined as a value between 0 and 1,  where 0.5 produces a symmetrical waveform in both the positive and negative phases.  This value is used in both phases,  such that 0 <= t <= 1 and 1 <= 2*(1 - t) <= 2.

The Q factor has varying results depending on the type of algorithm.  Its general effect is to either produce more of a curve at one limit and approach a straight line at the other.

Experiment with these parameters to create new (maybe even unheard?) sounds.  Version 2.0 might have a user programmable interface.


Turning Point

The turning point is the point where the amplitude changes direction.  In a sine wave this value is always pi/2.  Certain custom wave can be modified to produce unusual wave shapes using this parameter.  See Custom wave.


Q factor

The Q factor can be used to modify the sharpness or dullness of certain custom waves.  Its general effect is to either produce more of a curve at one limit and approach a straight line at the other.  See Custom wave.


Sweep parameters

Use this dialog to enter specific parameters for creating a sweep.  When you select this wave algorithm,  the frequency given in the wave parameters dialog is ignored.

Frequency From	is the starting frequency.  (If the start is greater than the end,  the sweep descends).
Frequency To	is the ending frequency.
Sweep algorithm	can be linear (fx/n),  logarithmic (fx²) or exponential (f^x/n).

Due to aliasing the sweep may not be capable of reaching the full range given.  Generally speaking,  any frequency greater than 1/4 the sampling rate will produce severe aliasing errors.  See Limitations of PCM sampling for more details.

Note: this algorithm is not available with the tone sequencer.

See also Custom wave


Legal stuff
4.3  Disclaimer of Warranty;  Shareware distribution.

Users of WaveGen must accept this general disclaimer of warranty:

"WAVEGEN IS SUPPLIED AS IS.  THE AUTHOR DISCLAIMS ALL WARRANTIES,  EXPRESSED OR IMPLIED,  INCLUDING,  WITHOUT LIMITATION,  THE WARRANTIES OF MERCHANTABILITY AND OF FITNESS FOR ANY PURPOSE.  THE AUTHOR ASSUMES NO LIABILITY FOR DAMAGES,  DIRECT OR CONSEQUENTIAL,  WHICH MAY RESULT FROM THE USE OF WAVEGEN.  GOOD DATA PROCESSING PROCEDURE DICTATES THAT ANY PROGRAM BE THOROUGHLY TESTED WITH NON-CRITICAL DATA BEFORE RELYING ON IT.  THE USER MUST ASSUME THE ENTIRE RISK OF USING THE PROGRAM.  ANY LIABILITY OF THE AUTHOR WILL BE LIMITED EXCLUSIVELY TO PRODUCT REPLACEMENT OR REFUND OF THE REGISTRATION FEE TO REGISTERED USERS."

WaveGen is a "shareware program" and is provided at no charge to the user for evaluation.  Feel free to share it with your friends,  but please do not give it away altered or as part of another system.  The essence of "user-supported" software is to provide personal computer users with quality software without high prices,  and yet to provide incentive for programmers to continue to develop new products.  If you find this program useful and find that  you are using WaveGen and continue to use WaveGen after a reasonable trial period,  you are obliged to make a registration payment of $30 to David L. Dight.

Commercial users of WaveGen must register and pay for their copies of WaveGen within 30 days of first use.  Site-Licence arrangements may be made by contacting David L. Dight.

WaveGen is available for distribution through all channels.  You are requested to notify David L. Dight by e-mail or in writing if you intend to distribute and are reminded of my distribution rules outlined in vendor.doc and in vendinfo.diz.

Thank you for your support.


File New (ToolBar)

Create a new wave file.


Exit (ToolBar)

Exit WaveGen.


File Open (ToolBar)

Open an existing wave file.


File Save (ToolBar)

Save the current wave file.


View Rewind (ToolBar)

Rewind the current wave file and reset the display.


File Play (ToolBar)

Play the current wave file.


File Stop (ToolBar)

Stop playing the current wave file.


Edit Mix (ToolBar)

Mix a new wave with the current wave file.


Edit Wave Editor (ToolBar)

Invoke the user defined Wave Editor with the current wave file.


View Details (ToolBar)

Display details about the current wave file.


Sequencer (ToolBar)

Create a new tone sequence.


Sequence Mix with (ToolBar)

Mix a new tone sequence with the current wave file.


Generate DTMF tones (ToolBar)

Create a DTMF tone sequence to a new wave file.


Help Index (ToolBar)

Go to the help index.


Limitations of PCM
3.5  Limitations of PCM sampling

The accuracy of a PCM waveform largely depends on three factors: the frequency of the tone being generated,  the sampling rate and the amplitude.  The possible errors can be broadly classified as aliasing,  quantisation or clipping errors.

Aliasing happens when the resolution of the wave file (ie. the sampling rate) is not high enough to provide enough samples in one cycle of the frequency of the tone (the wavelength in samples) to generate.  For example,  at a sampling rate of 44Khz,  a tone of 18Khz will have a sample wavelength of only 44100/18000 or just 2.45 samples.  As the tone's frequency is increased,  proportionally less information about the tone is encoded.

The wave display window also exhibits aliasing errors.  If you generate a tone of say 440Hz and continually zoom out,  you will notice strange wave shapes appearing.  These are aliasing errors and show that the "sampling rate" of the wave display is too low to reveal the true wave shape.  With high frequency tones,  you will need to zoom right in to see sampling aliasing.  As you scroll horizontally through the wave,  you will notice the position of each sample continually shifts and if you watch closely,  you will get a mental image of the true underlying wave shape that the samples are only approximating.  Using lines to show the waveform tends to reveal aliasing more clearly.

Aliasing errors are negligible for frequencies below 1/8 of the sampling rate.

Quantisation errors result from the fact that all sample amplitudes are expressed as integers.  WaveGen uses floating point maths to calculate the amplitude of a sample,  but unfortunately this floating point value must be rounded.  This results in amplitudes that are not quite correct and often produce distortion.

Clipping usually occurs when you mix two waveforms together that are too 'loud'.  When waves are mixed,  samples are logically added.  If the resulting amplitude is beyond the maximum and minimum amplitudes for the current sample size,  the value is 'clipped' at that limit.  WaveGen will clip any sample that falls out of the range of either the default range for the sample size or of an amplitude value given (volume).


Script Language
3.3  Tone Script Language Reference

The Tone Script Language is used by the Sequence:Sequencer and Sequence:Mix with commands.  Tone sequences can saved and restored to files.  See Sequencer for more details.

3.3.1	Using the sequencer

3.3.2	Statement summary and syntax

3.3.3	Tones,  chords and scales

3.3.4	Operators and other Tokens

3.3.5	Functions

3.3.6	Compiler operation and debugging

3.3.7	Chord Summary

3.3.8	Scale Summary


Using the sequencer
3.3.1  Using the sequencer

To generate a new tone sequencer,  select Sequence:Sequencer.  To mix a new tone sequence with the current wave file,  select Sequence:Mix with.

The Tone Sequence dialog uses similar parameters to the Wave Parameters dialog,  with a few additions.

The Load and Save buttons allow you to load an existing tone sequence file (*.tsq) or save the current sequence script.  WaveGen will use the Script Directory  by default.

When you load a tone sequence,  WaveGen will set the dialog parameters to the settings read from the file (if they are found).  If you check Ignore File Defaults,  the settings block is scanned but not stored.  The settings also refer to the envelope to use.  The envelope file parameter in the settings block of the file refers to a file in the default script directory.  If this is set to none,  the envelope will not be applied.  See envelope for more details.

When you save a tone sequence,  WaveGen will save the current dialog settings to the selected file in the settings block.,  including the envelope filename if applicable.

The Smooth check box option can be used to improve the sound of  the tones generated.  WaveGen does this by rounding up the each tonelength using the following relation:

tonelength = tonelength + wavelength - (tonelength mod wavelength)

The tonelength and wavelength values refer to the number of samples in the overall length of the tone and the length of one cycle respectively.  This method works by increasing the tonelength such that the wavelength of the tone divides perfectly into the new tonelength.  The smooth option only works on the first tone in a group.  This means that only the first tone in a sequence of tones or chords will be smoothed.  Since the tonelength is altered,  the timing of the tone may be shifted.

The Section option allows you to selectively generate different parts of one sequence file.  To create sections,  append the '$' character at the end of the desired section.  The script prior to this character can now be referred to as section one.  Successive sections can be created in the same way and will be numbered 2, 3 and so on.  Select the appropriate section to generate in the dialog.  The section number value is not  saved to the sequence file.

If you have not saved the tone sequence when you select Ok in the dialog,  WaveGen will automatically save your work to the file _unsaved.tsq in the default script directory.

WaveGen will also generate a file called _result.tsq in the default script directory.  This file contains the script of the successfully parsed commands.  See Debugging for more details.

If the Unique Tones flag is set,  WaveGen will filter out any duplicate tones that appear in any one group of a sequence.  Duplicates usually arise when you use wildcard tones.  Use of this filter can speed up generation.

The progress indicator shows the percentage of the entire script that has been processed (including whitespace and comments).


Statement summary
3.3.2  Statement summary and syntax

Statements consist of undelimited tokens.  Any symbol that is not a valid token is ignored.  Whitespace characters may appear between tokens but not embedded within them.  The general syntax is as follows:

The sequence header may appear only once (but anywhere on a separate line) in a sequence file (or not at all).  It is not necessary to enter this line.  WaveGen automatically inserts it when you save the sequence.  You can however edit it with a text editor.  WaveGen will not display this line in the sequence text window.

[ [srate, ssize, vol, tlen, plen, rlen, waveform,

envelopefile | none, "description"] ]

Where:

srate	the sampling rate (e.g. 44100).
ssize	the sample size (0=8,  1=16).
vol	the volume (1-100).
tlen	the tone length (1 to 10000ms).
plen	the pause length (1 to 10000ms).
rlen	the rest length (1 to 10000ms).
waveform	the waveform type (1 to 23).
envelopefile	the default envelope file to use or none.
description	a brief description in inverted commas.
For example:

[8000,0,80,115,115,230,20,_default.env,"freaky organ"]

Other statements may appear any number of times anywhere in the file and do not require any whitespace delimitation:

[/*<text>*/]...

[F(n)]...

[,;]...

[ [frequency] [MIDI note][ [MIDI note:chord] [*] [+] ]...

Where:

/*<text>*/	is any comment text bound by the comment start and end tokens,  which is ignored.
frequency	is any real number (such as 440.5) in Hz.
MIDI note	is any value within the range C0 to G10 (see MIDI note).
chord	is any chord or scale token from the chord and scale sets (see Chord Summary and Scale Summary).
F(n)	is any of the Script functions with parameter n. (see Functions).
*,;+$	is one of the tokens from the set (these symbols are reserved,  see Operators).

Statements can appear in any order.  Most functions are used to set parameters for successive notes/chords whose settings remain in force until reset or set to other values.

Examples:

440.5+220.2+110.1	Add these frequencies to produce a chord.
G4,C3+E3+G3	Play a note,  a pause then a chord.
G4;C3:m9+C1	Play a note,  a rest then a chord plus a note.
440.5+G3+C3:m9	Add a frequency,  a MIDI note and a chord.
L(10)U(20)K(CM) *,*,*,*,	Set the upper and lower MIDI note ranges and the chord to C Major for any wildcards,  then play four notes from those values at random (with pauses in between).
L(16)U(35)K(EbSML) *,*,*,*,	Set the upper and lower MIDI note ranges and the key to Eb using the Major Locrian scale for any wildcards,  then play four notes from those values at random (with pauses in between).
G4,T(2)G4	Play a MIDI note,  a pause,  then the same note for twice as long.


Tones and chords
3.3.3  Tones,  Chords and Scales

A tone token can be an absolute frequency,  a MIDI note,  a chord,  a wildcard character or a combination of any of the above.

MIDI notes and MIDI based chords

MIDI notes can be used to produce a single tone or they can be used as the tonic location of a chord.  For example:

C4,C4:sus4

plays the note C4 followed by a pause,  and then the chord Csus4 with the tonic note of the chord starting at C4.  The colon (:) must be used to delimit the MIDI note from the chord token.  In this way,  chords can be placed in specific octaves.  Chords can be stacked across octaves,  for example:

C3:sus4+C4:sus4

and they can be mixed:

C3:sus4+C3:M+G4:M9

WaveGen can recognise most of the standard chords and scales,  see Chord Summary and Scale Summary.  Chord and scale tokens must be entered exactly as they appear in the table.  To create chords that are not in the table or to create different inversions of those chords,  you can use a series of MIDI notes (or frequencies) added together with the '+' operator,  for example:

E4+G4+C5

will generate the C Major chord starting at E4 which is the first inversion of C Major.  For most purposes the root (tonic) inversion is all you'll need.

MIDI note wildcards

The wildcard character (*) can be used in place of a MIDI note,  frequency or chord token to generate a random tone selected from the MIDI note range (default 0 to 127).  For example:

*,*,*,*,

will produce four random tones of equal length.  You can specify the upper and lower ranges of random selection with the L() and U() functions,  for example:

L(10) U(25) *,*,*,*

will produce four random tones of equal length within the inclusive range of MIDI note numbers 10 and 25.  Interestingly:

K(Cm7) L(10) U(25) *,*,*,*

will produce four tones selected at random from the notes of the chord Cm7 within the range of MIDI notes 10 and 25.  This enables WaveGen can be used to generate bass lines or melody patterns and arpeggios.  The K() function accepts a key signature followed by a chord or scale token (it will not recognise a note number) and any wildcards read after the function will produce notes from that chord (arpeggio) or scale until another K() function is parsed.  The token K(*) will reset the key to the default of all notes or  the chromatic scale.  This means that:

K(Cm7) L(20) U(35) *,*,*,*,

K(FM7) L(8) U(18) *,*,*,*,

will generate four tones at random from Cm7 (C Minor Seventh) within 20 to 35,  followed by four tones at random from FM (F Major) within the range 8 to 18.  A random chord can also be generated given the tonic note,  for example:

C4:*

will generate a chord starting at C4,  selected at random from all the C chords (not necessarily in the key of C,  since  C Minor = Eb Major).

For randomly generated tones,  you have the choice between using the notes of a chord or the notes from a scale.  WaveGen treats these the same.  It is possible to create a chord from all the notes of a scale,  for example:

C4:SM7

will produce a chord will all notes from the scale of C Major Dom. 7th.  This isn't necessarily very useful though as scales are better used for individual notes,  as in:

K(CSM) L(14) U(35)

*,*,*,*,

K(GSM7)

*,*,*,*,

which will pick random notes firstly from the scale of C Major,  and then from G Major Dom. 7th,  within the range of MIDI notes 14 to 35.  See the next section for description of user defined scales.


Operators and tokens
3.3.4  Operators and other tokens

The following tokens are recognised:

,	a pause is inserted.
;	a rest is inserted.
+	the previous note/chord sequence is added to the following notes or chords.
:	a chord or scale token follows.
$	an end of section marker.
/*...*/	a comment enclosure.

The sequencer dialog lets you specify among other things,  the length in milliseconds of a tone,  and the lengths of a pause and a rest.  These values are arbitrary but they can be used to express complex timings.  The default sets the rest length to twice the pause length,  and the pause length to the tone length..  With these defaults,  the following sequence:

C4,;E4,;G4,;

is equivalent to

C4,,,E4,,,G4,,,

Try and set your pause and tone lengths to the minimum duration for any note.  You can then use the T() function to specify durations in multiples of the base length.  The same applies to pauses and rests - these can be used economically to express complex rhythms.

When adding chords or tones together,  WaveGen averages out the overall amplitude.  This means that the resulting amplitude may be less than expected.

The section marker $ allows you to divide various parts of a sequence into separately generatable parts.  The section marker can be placed at the end of a desired section.  Selecting the appropriate section number from the dialog will only generate that particular section.

User defined scales

You can supply two scales for use with wildcard note selection.  These scales are set with the UserScale1 and UserScale2 settings in wavegen.ini.  To specify the scale,  a string is passed consisting of 2 to 8 integers separated by commas,  whose value are between 0 and 11.  For example,  the following strings specify the Major and Minor scales:

UserScale1=0,2,4,5,7,9,11

UserScale2=0,2,3,5,7,8,10

Each value represents the relative offset from the tonic in a twelve tone or chromatic scale.  These settings are relative to the selected key used when the sequence is generated.

Use the Settings dialog to edit these strings.


Functions
3.3.5  Functions

Functions can appear anywhere in the script.  They cannot be added to note/chord sequences,  and their parameters cannot contain any embedded spaces.  Function names can be in upper or lower case.  The following table details the functions available:

Token	Function	Params	Description	Example
L(n)	Lower random range	0-127	Used to set the lower range for wildcard generated tones.	L(10) sets the lower limit to MIDI note 10.
U(n)	Upper random range	0-127	Used to set the upper range for wildcard generated tones.	U(25) sets the upper limit to MIDI note 25.
T(n)	Tone length multiple	1-16,*	All notes after this function will have their tone lengths multiplied by this value. (*) selects a value at random (1-16).	T(4) all notes after this will be four times as long as the default tone length.
P(n)	Pause length multiple	1-16,*	All pauses after this function will have their lengths multiplied by this value. (*)selects a value at random (1-16).	P(8) all pauses after this will be eight times as long as the default pause length.
R(n)	Rest length multiple	1-16,*	All rests after this function will have their lengths multiplied by this value. (*)selects a value at random (1-16).	R(2) all rests after this will be twice as long as the default rest length.
K(<key>n)	Wildcard Key select	Any valid Key (key) signature and chord or scale token (n),*	Sets the key and chord or scale from which to select random notes specified with the wildcard character. (*)resets the key to all notes.	K(C#m7) selects the key of C# Minor Seventh.   K(C#SJm) selects the key C# and specifies the jazz harmonic minor scale.  Note that the MIDI note number is not used in this function.


Compiler operation
3.3.6  Compiler operation and debugging

The Tone Sequencer interpretively compiles tone scripts.  This means that if your script has errors,  they will only be detected when you click on Ok.  If you find that the resulting wave is not correct,  return to the sequencer dialog (either 'new' or 'mix with').  WaveGen will remember the previous settings.  If WaveGen has detected any errors,  the Debug button will be enabled.

When you click on the Debug button,  WaveGen will move the cursor in the script window and highlight the next character that was not recognised or that was unexpected.  The next and successive clicks on the button will move to the next error.  In this way you can quickly debug the script.

If you Clear or Load a sequence,  the previous debugging information will be lost.

To further assist in debugging,  WaveGen will produce a file called _result.tsq in the default script directory,  when you generate a tone sequence.  This file is a WaveGen readable tone sequence file (*.tsq) and contains every command or token that was successfully interpreted.  Chord tokens are expanded to their resulting individual notes.  Any note,  value or chord generated by the wildcard token (*) will have the resulting MIDI note substituted.  This means that a script with randomly generated sequences can be recovered and imported into other sequence files.

By comparing this file with the original script,  subtle syntax errors can be revealed.  Note that the script produced in _result.tsq uses the minimum number of characters to express tokens,  and does not contain any comments.

The file _result.tsq is overwritten each time you generate a sequence,  so it is important to save the result to another filename before executing another generation,  if you wish to recover the script.


Chord summary
3.3.7  Chord Summary

Chord tokens are parsed to so that C7+5 is not matched with C7.  Chord symbols are case sensitive (in order to distinguish between major and minor).

Symbol	Chord*	Notes**	Symbol	Chord*	Notes**
M	Major	C,E,G	m	Minor	C,Eb,G
-5	Diminished 5th	C,E,Gb	6	6th	C,E,G,A
m6	Minor 6th	C,Eb,G,A	9/6	Major 6th add 9th	C,E,G,A,D
m9/6	Minor 6th add 9th	C,Eb,G,A,D	7	7th	C,E,G,Bb
7sus4	7th suspended 4th	C,F,G,Bb	m7	Minor 7th	C,Eb,G,Bb
7-5	7th diminished 5th	C,E,Gb,Bb	m7-5	Minor 7th diminished 5th	C,Eb,Gb,Bb
7+5	7th augmented 5th	C,E,G#,Bb	7-9	7th diminished 9th	C,E,G,Bb,Db
7-9+5	7th diminished 9th augmented 5th	C,E,G#,Bb,Db	7#9	7th augmented 9th	C,E,G,Bb,D#
7/6	7th add 6th	C,E,G,A,Bb	M7-3	Major 7th diminished 3rd	C,Eb,G,B
M7	Major 7th	C,E,G,B	9	9th	C,E,G,Bb,D
m9	Minor 9th	C,Eb,G,Bb,D	9-5	9th diminished 5th	C,E,Gb,Bb,D
9+5	9th augmented 5th	C,E,G#,Bb,D	M9	Major 9th	C,E,G,B,D
9#11	9th augmented 11th	C,E,G,Bb,F#	m9#7	Minor 9th augmented 7th	C,Eb,G,B,D
11	11th	C,E,G,Bb,D,F	m11	Minor 11th	C,Eb,G,Bb,F
13	13th	C,E,G,Bb,D, F,A	13-9	13th diminished 9th	C,E,G,Bb,Db, F,A
13-9-5	13th diminished 9th  diminished 5th	C,E,Gb,Bb,Db, F,A	sus4	Suspended 4th	C,F,G
+	Augmented	C,E,G#	o	Diminished	C,Eb,Gb,A

* All chords are in the root or tonic inversion.

** Music notes given are for the key of C Major.


Scale summary
3.3.8  Scale Summary

Scale tokens are parsed in the same way as chord tokens.  Scale symbols are case sensitive (in order to distinguish between major and minor).

Symbol	Scale	Notes*
SM	Major (Ionian mode)	C,D,E,F,G,A,B
SM7	Dominant Major 7th (Mixolydian mode)	C,D,E,F,G,A,Bb
Sm	Pure Minor (Aeolian mode)	C,D,Eb,F,G,Ab,Bb
SHm	Harmonic Minor	C,D,Eb,F,G,Ab,B
SJm	Jazz Melodic Minor	C,D,Eb,F,G,A,B
SDO	Dorian mode	C,D,Eb,F,G,A,Bb
SPH	Phrygian mode	C,Db,Eb,F,G,Ab,Bb
SLY	Lydian mode	C,D,E,F#,G,A,B
SLO	Locrian mode	C,Db,Eb,F,Gb,Ab,Bb
SSL	Super Locrian mode	C,Db,Eb,E,Gb,Ab,Bb
SML	Major Locrian mode	C,D,E,F,Gb,Ab,Bb
SWT	Whole tone scale	C,D,E,F#,G#,A#,
SD	Diminished	C,D,Eb,F,Gb,Ab,A,B
SPE	Pentatonic	C,Eb,F,G,Bb
SB	Blues	C,Eb,E,F,G,Bb
SMR	Indian Major Raga	C,Db,E,F,Gb,A,Bb
SmR	Indian Minor Raga	C,Db,Eb,F,G,Ab,B
SUSR1	User defined scale #1	<from wavegen.ini>**
SUSR2	User defined scale #2	<from wavegen.ini>**

* Music notes given are for the scale from the tonic note of C.

** See  User defined scales for more details.


No Help Available

Sorry,  no help is available for this topic.