Copyright: Tommy Anderberg and Polyhedric Software, 1998-2000
Citation: Tommy Anderberg and Polyhedric Software, 1998-2000


Welcome to Acid WAV's Help system!

At a glance

Acid WAV is an advanced sound editor and synthesizer created by Tommy Anderberg and brought to you by Polyhedric Software. Unlike older sound editors, it has been designed from the ground up to take full advantage of Microsoft's 32 bit Windows architecture, and features

•	an unparalleled set of powerful synthesis and editing functions,

•	an intuitive, friendly user interface,

•	visual scripting for easy automation of repetitive tasks,

•	a built-in development environment for the creation of new functions; and

•	an incredible price!

If you are running Acid WAV for the first time, please read the License Agreement, then get to know Acid WAV!

Operations

•	Loading and saving

•	Playing and recording

•	Analyzing sound data

•	Basic editing

•	Advanced editing

•	Synthesizing new sounds

•	Setting program options

•	Automating tasks with scripts

•	Creating new functions with OpenDSP

Ordering Acid WAV

•	Overview

Getting tech support

Submit error reports and questions to support@polyhedric.com.

Before sending us a question, please make sure that it isn't answered in this document. Don't forget to use the Find button - it's much faster than an e-mail query. Our own response time depends mainly on the number of redundant questions we have to handle.


About Tommy Anderberg
Tommy Anderberg is the creator of several popular audio tools for MS Windows (Mellosoftron, MIDInight Express, Virtual Sampler SDK, WAVmaker). A physicist by training and a computer geek by vocation, he is also a consultant and a prolific freelance writer on personal computing and the Internet.

Tommy can be reached at

Tommy.Anderberg@polyhedric.com


Other titles from Polyhedric Software

For the latest information on titles published by Polyhedric Software, please visit our web site at

www.polyhedric.com/software

Our products include:

•	The Mellosoftron live virtual sampler.

•	The MIDInight Express wavetable-based MIDI player and MIDI to WAV renderer. FREEWARE!

•	The WAVmaker CD+ quality MIDI to WAV renderer.

•	The GSound 22 CD-ROM: a complete General MIDI and GS sound library for the Mellosoftron and the MIDInight Express.

•	The Virtual Sampler SDK. A Software Developer's Kit which lets programmers use the Mellosoftron's low latency wavetable engine in their own projects.

We also undertake custom software design and development on a contract basis. You are always welcome to contact us at consulting@polyhedric.com to discuss your custom development needs.


About the Mellosoftron

The Mellosoftron is a low latency, fully programmable virtual sampler.

In short, it turns your PC into a sampler which you can play live with a MIDI keyboard, with a sequencer or with any MIDI file player. Any sound card with a DirectSound 3 (or later) driver will do - you don't need a particular brand or model. You can edit all instrument patches and create new ones from scratch using your own WAVs as sound sources.

Since it comes with an integrated patch editor and uses the same file formats as the MIDInight Express emulated wavetable MIDI player and as the WAVmaker high quality MIDI to WAV renderer, the Mellosoftron is the ideal tool for the creation of your own soft synth instruments. Add Acid WAV and you have a virtual recording studio inside your PC!

Here is a screen shot of the Mellosoftron's main window and one of its patch editor.

You can always download the latest version of the Mellosoftron Evaluation Package from our site

 www.polyhedric.com/software

The Mellosoftron is only $29...

...and comes with a $9 discount on the GSound 22 CD-ROM when they are ordered together!

Other titles from Polyhedric Software...


Mellosoftron screen shot #1


Mellosoftron screen shot #2


About the MIDInight Express

The MIDInight Express is a free, programmable, software wavetable MIDI player and MIDI to WAV renderer which uses the same instrument file (PRG and WAV) format used by the Mellosoftron and WAVmaker.

Unlike the Mellosoftron, the MIDInight Express doesn't require (but nevertheless supports) DirectSound and a fast CPU. In fact, it will even run on a low end 486 PC. Any entry-level 16 bit sound card, or even the simple sound circuits found in most laptops, will do just fine.

You can use the MIDInight Express...

•	As a standalone MIDI player

•	As a fast MIDI to WAV renderer

•	As a better WAV player

And it's easy, too! If you have ever used a CD player, you will feel right at home with the MIDInight Express II's user interface:

Other titles from Polyhedric Software...


As a standalone MIDI player
If you are tired of listening to your MIDI files as rendered by the toy FM synth chips found on Sound Blaster-compatible sound cards and in most laptops, the MIDInight Express is for you! Pop the GSound 22 CD-ROM into your PC, set the MIDinight Express playing, and enjoy!


As a fast MIDI to WAV renderer
Sometimes you need to create a song on WAV format for a web page, a program, or a multimedia application.

The MIDInight Express offers the fastest route - just click the record button and play your MIDI file(s) as usual! In most cases, the result will sound much better than recording off your sound card while playing.

This function is also useful for listening to MIDI files which are too complicated for real time rendering on your current hardware (too little free RAM to hold all samples, causing the disk swapper to kick in, or too slow a CPU). Note that the MIDInight Express can play WAVs, too.

A tip for all webmasters:  Acid WAV is not only the perfect tool for recording, synthesizing and editing sound; it's also great for compressing WAVs created with the MIDInight Express before posting them on the web, e.g. in MPEG format.


As a better WAV player
An auxiliary function of the MIDInight Express is the ability to play WAV files using the standard Media Control Interface (MCI). On most systems, it will do a better job than the Windows 95 media player (which tries to load the whole WAV before playing it, bringing the whole system to a virtual standstill when there isn't enough free memory).


About GSound 22

Other titles from Polyhedric Software...

The GSound 22 CD-ROM is only $29...

...or $20 if ordered together with the Mellosoftron!

We burn your GSound 22 CD-R when we receive your order. Keeping no stock allows us to minimize costs and guarantees that you always get the most recent version of all files.

Other titles from Polyhedric Software...


About the Virtual Sampler SDK
The core of the Virtual Sampler SDK is the Virtual Sampler Library, the low latency sound engine running behind the Mellosoftron's user interface.

As a developer using the Virtual Sampler Library, you deal with a simple API emulating a real sampler. You control it using standard MIDI messages, with one difference - there are 65536 channels to choose from, not 16! The difference between MIDI and digital audio ceases to exist, and you can use the same tool for everything from music  - with predictable results, independent of the end user's MIDI hardware - to sound effects. The Virtual Sampler Library coexists happily with straight DirectSound code, too (but chances are that you will not see any reason to deal with the latter).

The full Virtual Sampler Library API counts only 27 functions, most of them used to (optionally) set parameters such as the latency and the current WAV directory. Only a third of them are required to build a full application. This simplicity, the use of the well-known MIDI standard, and the availability of powerful PRG and WAV tools like the Mellosoftron and Acid WAV all make using the Virtual Sampler Library a breeze.

The Virtual Sampler SDK contains the documentation and code needed to use the Virtual Sampler Library in your own programs. It also includes the Mellosoftron for quick sound patch creation and editing.

The following 32 bit development environments are currently supported by the Virtual Sampler SDK: Watcom C/C++, MS Visual C/C++, Borland C++ Builder, Borland Delphi, MS Visual Basic.

A fully functional demo is available for download from our site,

 www.polyhedric.com/software

Other titles from Polyhedric Software...


About WAVmaker

WAVmaker is the undisputed leader in MIDI to WAV rendering. Unlike sound cards and soft synths like the MIDInight Express, which are constrained by the requirements of real time operation within a limited memory and CPU footprint, WAVmaker turns MIDI files of virtually unlimited polyphony and complexity into CD-quality WAVs with perfect timing precision, using fully editable instrument patches and samples of virtually unlimited size, without the noise and distortion introduced by conventional recording.

The WAVs produced are ready to be burnt on CD, uploaded to a website or processed further (e.g. mixed with recorded vocals).

Version III is a quantum leap in WAVmaker's development. The program has been completely rewritten to take full advantage of current state of the art PC multimedia technology. New features include:

•	New, higher precision rendering kernel

•	Programmable, MIDI-controlled effect chains

•	User-definable tune tables

•	Automatic volume optimization

•	Batch rendering

•	Wider target sampling rat range

•	Improved MIDI reporting and editing

•	Integration with Acid WAV

•	Integration with the Mellosoftron live sampler and patch editor

•	New, Explorer-style user interface

Last but not least, WAVmaker now comes with the GSound 44 General MIDI and GS instrument library: a CD-ROM with full, ready-to-use, MIDInight Express- and Mellosoftron-compatible GM and GS sets consisting of 3+ MB PRG patches and 261+ MB 44.1 kHz, 16 bit WAV samples!

You can always download the latest version of the WAVmaker Evaluation Package from our site

 www.polyhedric.com/software

Other titles from Polyhedric Software...


New, higher precision rendering kernel
Advances in CPU performance have finally made the use of floating point arithmetic for the entire rendering process a practical proposition. All internal operations are now performed in 32 bit precision or higher, for a signal to noise ratio of no less than 192.6 dB. The results are reduced to (and optimized for) standard 16 bit (CD / DAT) sample size in a second pass, after the final mixdown has been created.


Programmable, MIDI-controlled effect chains
Each MIDI track and channel can be assigned its own MIDI-controlled effect chain with the following architecture:

The chorus / flange, echo and reverb units are all programmable.

This means that you can have a different effect chain for each track and channel. Hardware sound modules typically give you a single, shared effect chain and only let you vary the wet mix level individually for each channel.

Chorus / flange, echo and reverb patches are easily created, edited and tested using Acid WAV (included!). Import / export of Acid WAV effect patches is done at the click of a button.

All effects can be turned off if you prefer a dry mix (e.g. when rendering individual tracks for manual processing).


User-definable tune tables
Tired of that old Western-style tuning? Feel like experimenting with microtonal composition? No problem: each MIDI track and channel can be assigned its own individual tune table. WAVmaker comes with several predefined ones and gives you full liberty to create your own tunings.


Automatic volume optimization
The two-pass approach used by the new rendering kernel means that overall volume no longer needs to be adjusted manually: the resulting WAVs are automatically optimized for the target 16 bit dynamic range.


Batch rendering
Using WAVmaker has never been easier: all you have to do is collect the MIDs and RMIs to render in a list, click the magic button and watch WAVmaker launch a separate rendering process. You are then free to terminate the main program. This minimizes WAVmaker's footprint while rendering. You can also collect a new bunch of MIDI files to render with different settings and launch another job while the first one is still running. There is no limit to the number of jobs you can have running in parallel (other than available memory etc.). This feature is particularly useful if you have multiple CPUs.


Wider target sampling rate range
Supported target sampling rates range semi-continuosly (i.e. in increments of 1 Hz) from 8000 Hz (phone quality, used e.g. in Unix AU files) to 48 kHz (DAT quality).


Improved MIDI reporting and editing
WAVmaker now comes with a dedicated MIDI reporting and editing "wizard". The new tool analyzes the contents of a MIDI file and lets you edit its individual tracks and channels. You can delete selected kinds of events; map GS banks, programs and controllers to each other; scale and offset continuous values; and transpose note ranges. The result can be saved to any of the supported MIDI formats: Standard MIDI Level 0, Standard MIDI Level 1, RIFF MIDI Level 0 and RIFF MIDI Level 1.


Integration with Acid WAV
Acid WAV doesn't only serve as WAVmaker's effect patch editor: it also replaces the auxiliary sound editing functions found in WAVmaker 1.x and 2.x.

That's right, you now get Acid WAV with WAVmaker!

To make a good story even better, you can choose the level of bundling that suits you best. WAVmaker's Standard license covers Acid WAV's recording, encoding, decoding and basic editing functions. Advanced users can take advantage of the Studio license to get all of Acid WAV's features.


Integration with the Mellosoftron live sampler and patch editor
Since WAVmaker now fully supports Mellosoftron 2.x patches, there is no longer any need for a built-in patch editor. Using the Mellosoftron makes life a lot easier by allowing patches to be modified and tried out immediately, live at your keyboard. Again, you can choose the level of bundling that suits you best: if you are not interested in creating your own instruments, it's enough to get a Standard license; otherwise, you can choose between the WAVmaker Plus license (which includes the Mellosoftron) and the WAVmaker Studio license (which adds Acid WAV's advanced sound editing and synthesis functions).


New, Explorer-style user interface
WAVmaker's user interface has been completely redesigned to present you with a greatly simplified, familiar environment. Windows integration has also been improved with the addition of drag & drop (both internally and from the Windows Explorer) and of Open / Play buttons which rely on your system settings to launch the appropriate viewer / player (e.g. a MIDI sequencer or the Windows Media Player).


License Agreement

Last updated: February 20, 1998.

This section contains important license information regarding the distribution and use of Acid WAV.

Acid WAV is NOT in the public domain. It is Copyright (C) Tommy Anderberg, 1998. All rights reserved worldwide. This software and all the accompanying data and documentation files are protected by national and European laws and by International Treaty provisions. You must treat Acid WAV like any other copyrighted material, except that you may copy the Acid WAV Evaluation Package and give to others (subject to the limitations outlined below). Any use or distribution of this software, data and documentation in violation of Copyright law or of the terms outlined in this document will be prosecuted to the best of our ability.

The conditions under which you may copy and distribute Acid WAV are described below under Limited Distribution License Agreement.

The conditions under which you may use Acid WAV are described below under Limited User License Agreement.

All rights not expressly granted here are reserved to Tommy Anderberg.

Limited Distribution License Agreement

This Limited Distribution License Agreement (throughout this section, the "Agreement") is a legal agreement between you, the distributor, and Tommy  Anderberg. By copying any part of Acid WAV, you are agreeing to be bound by  the terms of this Agreement.

As the copyright and trademark holder for Acid WAV, Tommy Anderberg authorizes individuals and organizations to copy the files contained in Acid WAV Evaluation Package for their own use or for giving to others, ONLY when the following conditions are met:

•	The Acid WAV Evaluation Package - including all related program, data and documentation files - may not be modified in any way and must be distributed together, as a complete package, without exception. You may not distribute corrupted or otherwise damaged files.

•	No price or other compensation may be charged for the Acid WAV Evaluation Package. A reasonable distribution cost may be charged for the distribution media, shipping and handling. BBS systems may not charge beyond their normal rates for downloads of the Acid WAV Evaluation Package.

•	Acid WAV is designed to be easily extended by the addition of patches and script files. You may not, however, distribute an extended version of the Acid WAV Evaluation Package without prior written permission from Tommy Anderberg.

•	Neither this Agreement nor any part or portion hereof shall be assigned or sublicensed, except as described herein. Should any provision of this Agreement be held to be void, invalid, unenforceable or illegal by a court, the validity and enforceability of the other provisions shall not be affected thereby. If any provision is determined to be unenforceable, you agree to a modification of such provision to provide for enforcement of the provision's intent, to the extent permitted by applicable law. Failure of a party to enforce any provision of this Agreement shall not constitute or be construed as a waiver of such provision or of the right to enforce such provision. If you fail to comply with any terms of this Agreement, your license is automatically terminated, and you may be prosecuted at any time under national and European laws and under International Treaty provisions.

•	You acknowledge that you have read this Agreement, you understand this agreement, and understand that by copying any part of Acid WAV, you agree to be bound by this Agreement's terms and conditions. You further agree that, except for written separate agreements between Tommy Anderberg and you, this Agreement is a complete and exclusive statement of your distribution rights. This agreement supersedes all prior oral agreements, proposals or understandings, and any other communications between Tommy Anderberg, Polyhedric Software and you relating to the subject matter of this Agreement.

Limited User License Agreement

This Limited User License Agreement (throughout this section, the "Agreement") is a legal agreement between you, the user, and Tommy Anderberg. By installing Acid WAV, by loading or running any part of it, or by placing or copying any part of it onto your computer hard drive, you are agreeing to be bound by the terms of this Agreement.

For the purposes of this section, "use" means loading the software into RAM, as well as installation on a hard disk or other storage device.

 As the copyright and trademark holder for Acid WAV, Tommy Anderberg authorizes individuals or organizations to use Acid WAV, ONLY when the following conditions are met:

•	You shall not: modify, translate, disassemble, decompile or reverse engineer the compiled executables contained in Acid WAV.

•	You may not exploit running copies of Acid WAV commercially, e.g. by renting, leasing or selling access to a computer running Acid WAV.

•	You may not distribute or otherwise exploit the output produced by Acid WAV if you have not purchased your own personal Acid WAV key from Polyhedric Software.

•	Acid WAV keys are personal and non-transferable. They may not be given, sold, or otherwise made available to third parties, e.g. (but not limited to) by uploading them to BBS systems or Internet sites.

•	The user accepts sole and full responsibility for any damage or loss arising from the use or the inability to use Acid WAV. While this software has been extensively tested and is believed to be safe, Tommy Anderberg and Polyhedric Software disclaim any warranties, either expressed or implied, including but not limited to warranties of fitness for ANY particular purpose and of uninterrupted, error free operation. Under no circumstances shall Tommy Anderberg or Polyhedric Software be liable for loss of data, loss of profits, lost savings, special, incidental, consequential, indirect or other similar damages arising from the use or the inability to use Acid WAV.

•	Neither this Agreement nor any part or portion hereof shall be assigned or sublicensed, except as described herein. Should any provision of this Agreement be held to be void, invalid, unenforceable or illegal by a court, the validity and enforceability of the other provisions shall not be affected thereby. If any provision is determined to be unenforceable, you agree to a modification of such provision to provide for enforcement of the provision's intent, to the extent permitted by applicable law. Failure of a party to enforce any provision of this Agreement shall not constitute or be construed as a waiver of such provision or of the right to enforce such provision. If you fail to comply with any terms of this Agreement, your license is automatically terminated, and you may be prosecuted at any time under national and European laws and under International Treaty provisions.

•	You acknowledge that you have read this Agreement, you understand this Agreement, and understand that by installing any part of Acid WAV, by loading or running any part of Acid WAV, or by placing or copying any part of Acid WAV onto your computer hard drive, you agree to be bound by this Agreement's terms and conditions. You further agree that, except for written separate agreements between Tommy Anderberg and you, this Agreement is a complete and exclusive statement of the rights and liabilities of the parties involved in the use of Acid WAV. This agreement supersedes all prior oral agreements, proposals or understandings, and any other communications between Tommy Anderberg, Polyhedric Software and you relating to the subject matter of this Agreement.


Getting to know Acid WAV

[Click Contents for all topics.]

When using Acid WAV, you will spend most of your time looking at the main window.

A surrealistic encounter between this window and Jack the Ripper would leave the following objects scattered on your screen:

Title bar

Function tabs	Toolbar	Position display

Section markers

Wave display

Trackbars

Function buttons	Reset button	Time unit box	Selection box	Help button

Their uses include...

Basic editing	Automating tasks	Playing and recording	Loading and saving

Advanced editing	Analyzing sound data

as well as

Synthesizing new sounds

and

Creating new functions with OpenDSP


Title bar

This title bar tells us that we are editing a WAV file called "Rhythm". The asterisk trailing the filename means that the file has been modified since it was last saved. The basic properties of the file are also displayed [between square brackets; in this picture we are editing a CD quality file].


Function tabs

Immediately below the title bar are six tabs and (at the far right, below the window's [image] button) a cursor position display.

Each tab corresponds to a program function group. In older sound editors, the tabs would be items in a menu bar, and the actual functions would be displayed in drop-down menus brought up by clicking the menu bar. In Acid WAV, the functions in the selected group are always visible and readily available to the left of the graph.


Position display

The cursor position display below the main window's [image] button tells us the mouse location in the graph. The numbers are read as "time position : sample value". The time unit can be either milliseconds or samples, and is selected in the time unit box below the graph.


Toolbar
Below the function tabs and the position display is a toolbar subdivided into six different button groups:

Script group. Use this button to run scripts.

Graph group. Use these buttons to control the waveshape display.

Play/record group. Use these buttons to play and record WAV files.

History group. Use these buttons to undo/redo operations.

File group. Use these buttons to clear, load and save files.

Window group. Use this button to open new Acid WAV windows.

You can rearrange the toolbar by dragging the group separators to new positions. Right-click the toolbar to bring up its menu:

Uncheck groups which you do not want to be displayed in the toolbar, check them again to bring them back.


Script group
Left-clicking the script button causes the default script to be executed on the selected file section. If there is no default script, the Scripts window is opened. Right-clicking the script  button also brings up the Scripts window.

Scripting is a relatively advanced subject better left alone until you have mastered the rest of Acid WAV.


Graph group
Use these buttons to control the waveshape display.

Jump to start of file.

Jump to end of file.

Step back by 10% of file size.

Step forward by 10% of file size.

Step back by one frame.

Step forward by one frame.

Center horizontal axis.

Split graphs of stereo files.


Play/record group
Use these buttons to play and record WAV files.

Play the selected file section.

Pause / resume playback.

Stop playback or recording.

Record. Right-click to change record settings.

Playing and recording is covered in detail here.


History group
These buttons let you move back and forth between successive versions of the file being edited, just like the back/forward buttons on your web browser let you move between web pages you have visited.

Right-click either button (even if it's greyed out) to bring up the temporary storage window. If the button is enabled, right-clicking it also presents you with the option to clear its "memory" (purge undos and redos, respectively).


File group
Use these buttons to clear the editor and to load and save WAV files.

Clear (unload the current file).

Load file. Right-click to change open settings.

Save file. Right-click to change output format.


Window group
Use this button to open new Acid WAV windows.

Working with multiple Acid WAV windows allows you to assign different default settings to the same functions, edit files independently and then combine the results using the clipboard (see the section on basic editing functions).

Note that each window has its own button on the Windows task bar, labeled with the name of the file being edited.


Section markers
The markers below the speedbuttons are visible only when a section of the loaded file has been selected. They can dragged with the mouse to resize the selected section. Dragging the start marker to a position more than one sample beyond the end marker, or the end marker to a position preceding the start marker by more than one sample, causes the section to be unselected.


Trackbars

Like the graph group buttons, the horizontal trackbar below the wave display is used to scroll through the loaded file.

The vertical trackbar (to the right of the wave display) also allows you to scroll vertically, i.e. to offset the horizontal axis (silence level) in the graph.


Wave display
The wave display is politically correct: the left channel is red and the right channel is blue. Monophonic files are displayed in red. If a file section has been selected it's displayed on an aqua-colored background.

If the [image] button in the toolbar's graph group is depressed, the display is split vertically when a stereo file is loaded:

Right-clicking the graph brings up the analysis pop-up menu

from which you can bring up statistics and frequency spectra for the selected section.


Reset button
Clicking the Reset button causes the wave display to be restored to its default state, as if the file had just been loaded.

•	Any selection is cleared.

•	The view is scrolled back to the first sample.

•	The frame length is set to the default value (see below) or to the file length, whichever is shorter.

•	The vertical zoom in the selection box is reset to 1.0 and the horizontal axis in the graph is centered, casing  the full amplitude range (0 to 255 for 8 bit files, -32768 to 32767 for 16 bit files) to be displayed.

When the graph is being redrawn, the Reset button becomes a Stop button, allowing you to abort lengthy redraws.

Right-click this button to set the default open / reset frame length.


Time unit box
The time unit box, located below the main window's wave display, is where you set the current time unit.


Selection box

The selection box is used to...

•	Set and modify the Start and End positions of the selected file section, as described in detail here.

•	Center the wave display on the Start or End positions of the selected file section (just click the corresponding buttons).

•	Modify the horizontal zoom (i.e. the time scale) of the wave display. A horizontal zoom of 1.00 means that the whole file is visible; a horizontal zoom of 100.00 means that the graph  shows 1% of the file. Clicking the Horizontal zoom button causes the display to be fitted exactly to the selected section.

•	Modify the vertical zoom (i.e. the amplitude scale) of the wave display. A vertical zoom of 1.00 means that the full amplitude range is visible (0 to 255 for 8 bit files, -32768 to 32767 for 16 bit files).


Help button
Clicking the Help button opens this document. Right-clicking it brings up the About dialog with information about free memory, system resources and available disk space:


Function buttons
This is where the real action is!

Clicking a function button causes immediate execution of the function on the selected file section (functions which by their nature can only be applied to whole files, e.g. 8 to 16 bit conversion, simply ignore selections).

Right-clicking a function button calls up the function's settings window (provided that the function has one - most do).

Acid WAV remembers all function settings, even between sessions. This means that unlike older sound editors, it only requires you to deal with function settings when you want to change them. If you are happy with your current settings, all you have to do is click!

When no file is loaded, most function buttons will do nothing if clicked (although you can still right-click them to edit function settings). The exceptions are marked with a red triangle:

Apart from Paste, Insert silence and all Synthesis buttons will work even if no file is loaded.


Selecting file sections

See also: standard insertion rules.

No selection

When neither start nor end positions are marked in the wave display, operations are executed on the whole file. In other words, "no selection" implicitly means "all selected".

In this state, the graph cursor is a small cross-hair:

Below the graph, the End button is grayed out, and the  (horizontal) cursor position is displayed in the Start edit box:

Clicking the Start button causes the view to be centered on the position in the Start edit box.

No end position

Clicking the wave display when neither start nor end positions are marked causes a start marker and a cross-hair to be inserted:

When only a start position is marked in the wave display, operations are executed from that position to the end of the file. In other words, "no end position" implicitly means "to end of file".

In this state, the graph cursor is a horizontal, bidirectional arrow (a "resize" cursor):

Below the graph, the End button is activated, and the (horizontal) cursor position is displayed in the End edit box. The contents of the Start edit box are frozen, reflecting the cross-hair's horizontal position:

You can reposition the cross-hair by editing the value in the Start edit box, and center the wave display on it by clicking the Start button. The cross-hair can also be repositioned by dragging the start marker above the graph.

Clicking the graph at a position preceding the start marker by more than one sample causes the start marker and the cross-hair to be deleted.

Full selection

Clicking the wave display when only a start position is marked causes an end marker to appear at the clicked position and the section between the two markers to be highlighted:

In this state, the graph cursor is a standard Windows arrow:

Below the graph, the contents of the Start and End edit boxes are frozen, reflecting the start and end marker's positions. You can move and resize your selection by editing the values in these boxes. The display can be centered on either position by clicking the corresponding button. You can also resize and move the selected section by dragging the start and end markers above the graph. The Horizontal zoom button is enabled. Clicking it causes the wave display to be fitted exactly to the selected section.

Clicking the graph anywhere, moving the start position more than one sample beyond the end position or moving the end position more than one sample behind the start position causes the marked section to be unselected. Depending on the horizontal zoom settings, clicking Horizontal zoom may have the same effect.


Loading and saving

Loading

In order to load a file, click the [image] button in the toolbar. This brings up a standard Windows Open dialog:

Select a file and click Open to load it.

Right-clicking the [image] button brings up the Open settings dialog.

Acid WAV uses the Windows Audio Compression Manager (ACM) to decode encoded (usually compressed) WAV files. Any WAV format can be decoded as long as there is an ACM codec (coder / decoder) capable of handling that format installed on your system. Several codecs come with Windows. Others are installed by third party applications and add-ons such as Netscape Navigator and NetShow (e.g. Microsoft's MPEG Layer-3 codec).

You can get a complete list of all ACM codecs currently installed on your system by right-clicking the [image] button in the toolbar. This brings up the Output format window (click its [image] button to leave without actually changing the output format).

Saving

In order to save a file, click the [image] button in the toolbar. This brings up a standard Windows Save dialog:

Enter a filename and click Save to write your sound file to disk.

Acid WAV remembers the format of loaded files and will use the same format when saving them (unless instructed to do otherwise by means of the Output format window). The default format (used e.g. when a file has been synthesized rather than loaded) is plain PCM, i.e. no encoding.

Both decoding and encoding are done transparently, i.e. they don't require any additional actions on your part.


Playing and recording

Playing

Playback is controlled from the toolbar. Click

to play the selected file section,

to pause and resume playback,

to stop playback.

If a start position has been marked, clicking [image] will cause playback to start there. If an end position has also been marked, playback will eventually stop there. Once playback is underway, modifying the start and end positions has no effect on the file section being played unless the [image] button is clicked. Pausing and resuming playback with [image] causes the end position to be updated.

Recording

Recording is also controlled from the toolbar. Click

to start recording,

to stop recording.

If no file is loaded, clicking [image] will cause the WAV properties window to be displayed. Set the desired file properties and click OK to start recording.

If a file is already loaded, recording works as follows:

•	When neither start nor end positions are marked, the recorded sound is inserted ahead of the current data.

•	When a start position but no end position is marked, the recorded sound is inserted at the start position.

•	When both start and end positions are marked, the recorded sound overwrites the marked section.

Stereo recording can be limited to only one channel, leaving the other channel unaffected. Right-click [image] to bring up the Record settings window.


Analyzing sound data

Right-clicking the wave display when a file is loaded causes the analysis menu to pop up:

•	Click Statistics for basic information about the selected file section.

•	Click Spectrum for a frequency spectrum of the selected file section.

The last two menu entries are just like Spectrum, but only apply to one sound channel (Left or Right). They are only shown for stereo files.


Statistics

The Statistics window is invoked from the analysis pop-up menu. Its contents are largely self-explanatory.

The title bar tells you which part of the file you are analyzing (whole file, start mark to End Of File or full selection - click here for details on selecting file sections) and its length.

The Dynamic range box summarizes the min, max and average sample values in each channel (left channel in red, right channel in blue). The available range for 16 bit files is -32768 to 32767, and the average value should be close to 0. For 8 bit files the available range is 0 to 255, and the average value should be close to 128.

An abnormal average value usually means that there is a DC component (i.e. a constant amplitude offset) in the sound. Such a DC component effectively reduces the available dynamic range and can cause various operations (e.g. mixing) to result in unnecessary distortion due to saturation. You can remove DC components using the Offset function in the Amplitude group.

The Saturation box tells you how many samples are saturated at the low and high ends of the available dynamic range (i.e. how many samples have the values -32768 and 32767 in 16 bit files, 0 and 255 in 8 bit files). A large number of saturated samples usually means audible distortion.


Spectrum

The Spectrum window is invoked from the analysis pop-up menu.

The title bar tells you which part of the file you are analyzing (whole file, start mark to End Of File or full selection - click here for details on selecting file sections) and its length.

The graph shows the spectrum, i.e. the amplitude as a function of frequency. As usual, the left channel is red and the right channel is blue. Frequency and amplitude values for the mouse cursor position are displayed in the upper left corner as "frequency (Hz) : amplitude".

If the dB button is depressed, the graph scale is logarithmic and amplitudes are expressed in decibel (with the full dynamic response supported by the sample size, i.e. 48 dB for 8 bits, 96 dB for 16 bits, serving as the reference level). Otherwise, the graph scale is linear and amplitudes are expressed as absolute sample values.

Click Export to save the spectrum to a CSV (comma-separated value) text file (readable e.g. by Excel).


Basic editing

The Basic editing group contains the following functions:

•	Trim

•	Cut

•	Copy

•	Delete

•	Paste

•	Paste mix

•	Insert file

•	Mix files

•	Insert silence

•	Swap channels

•	Duplicate channel

•	Convert to mono / stereo

•	Convert to 8 / 16 bits

See also: Changing file properties.


Trim

Trim is used to move alla data not in the selected section to the clipboard. In other words, it's the complement of Cut. It's typically used to isolate the selected section.

Right-click Trim to open its settings dialog:

Clicking Left or Right causes data to be removed only from one channel. The resulting difference in duration is compensated by padding the selected channel with silence, leaving the overall file length unchanged. This setting does not affect what's written to the clipboard.

The Target channel setting is ignored when trimming monophonic files.

Click OK to confirm the current settings or any button in the Target channel box to update them. If the dialog was called up from the main window, Trim will be executed.

Click [image] to abort.


Cut

Cut is used to move the selected section to the clipboard.

Right-click Cut to open its settings dialog:

Clicking Left or Right causes data to be removed only from one channel. The resulting difference in duration is compensated by padding the selected channel with silence, leaving the overall file length unchanged. This setting does not affect what's written to the clipboard.

The Target channel setting is ignored when cutting monophonic files.

Click OK to confirm the current settings or any button in the Target channel box to update them. If the dialog was called up from the main window, Cut will be executed.

Click [image] to abort.


Copy

Copy is used to duplicate the selected file section. The copy can be sent to Acid WAV's clipboard or to a file.

Right-click Copy to open its settings dialog:

Use the controls in the Destination box to update the current settings, click OK to confirm them (confirmation is implied when you click Clipboard). If the dialog was called up from the main window, Copy will be executed.

Click [image] to abort.


Delete

Delete is used to remove the selected section. The difference between Delete and Cut is that no data is sent to the clipboard.

Right-click Delete to open its settings dialog:

Clicking Left or Right causes data to be removed only from one channel. The resulting difference in duration is compensated by padding the selected channel with silence, leaving the overall file length unchanged.

The Target channel setting is ignored when deleting data from monophonic files.

Click OK to confirm the current settings or any button in the Target channel box to update them. If the dialog was called up from the main window, Delete will be executed.

Click [image] to abort.


Paste

Paste is used to copy data from the clipboard. The standard insertion rules apply.

Right-click Paste to open its settings dialog:

Clicking Left or Right causes data to be written only to one channel. The resulting difference in duration is compensated by padding the shorter channel with silence.

The Target channel setting is ignored when pasting to monophonic files.

Click OK to confirm the current settings or any button in the Target channel box to update them. If the dialog was called up from the main window, Paste will be executed.

Click [image] to abort.


Paste mix

Paste mix is used to mix the clipboard's contents into the file.

Right-click Paste mix to open its settings dialog:

The edit boxes let you set amplification factors for the Editor and Clipboard data, individually for each channel. Negative values (causing phase inversion) are allowed.

Use the arrow buttons to copy amplification factors to neighbouring boxes.

The Right column is ignored when pasting data to monophonic files.

Clicking 1 causes all levels to be reset to 1.00, i.e. all channels are mixed down without any amplification.

Click OK to accept the new settings. If the dialog was called up from the main window, Paste mix will be executed.

Click [image] to abort and revert to the old settings.


Insert file

Insert file is used to copy data from a disk file. The standard insertion rules apply.

Right-click Insert file to open its settings dialog:

Clicking Left or Right causes data to be written to only one channel. The resulting difference in duration is compensated by padding the shorter channel with silence.

The Target channel setting is ignored when pasting to monophonic files.

Click [image] to abort.

Click OK to confirm the current settings or any button in the Target channel box to update them. Either way, you will be presented with a standard Windows Open dialog:

Select a file and click Open to insert it. Click Cancel or [image] to abort.


Mix files

Mix files is used to mix one or more files into the editor.

Right-click Mix files to open its settings dialog:

Select the files to mix using the controls in the upper part of the dialog window.  Multiple file selections are supported (press the Shift key while clicking to select a range; press Ctrl while clicking to select additional individual files).

Use the buttons to Add the selected files or to Add all files in the current directory to the mix list in the lower part of the dialog window.

The mix list can be cleared using Remove all. Individual files can be selected and then Removed.

The first entry in the list  is the file currently being edited. It can not be removed.

Amplification factors are set in the Left and Right columns. Negative values (causing phase inversion) are allowed. All data is converted transparently to the target format (i.e. the format of the [Current file]) before being mixed down. If the target format is monophonic, the Right column is ignored.

Click OK to accept the new settings. If the dialog was called up from the main window, Mix files will be executed.

Click [image] to abort and revert to the old settings.


Insert silence

Insert silence is used to add silent sections to files.

Right-click Insert silence to open its settings dialog:

If Append to end is depressed, the silent section is added after the last sample in the file, and the Target channel setting has no effect.

If Append to end is not depressed, the standard insertion rules apply.

When the dialog is called up from the main window, the Duration is expressed in the main window's time unit.

When the dialog is called up from the script editor, the Duration is expressed in milliseconds.

Click OK to accept the new settings. If the dialog was called up from the main window, Insert silence will be executed.

Click [image] to abort and revert to the old settings.


Swap channels
Swap channels is used to make stereo channels change place in the selected section. It can't be applied to monophonic files.


Duplicate channel

Duplicate channel is used to copy one stereo channel in the selected section to the other channel. It can't be applied to monophonic files.

Right-click Duplicate channel to open its settings dialog:

Click OK to confirm the current setting or either button in the Target channel box to update it. If the dialog was called up from the main window, Duplicate channel will be executed.

Click [image] to abort.


Convert to mono / stereo
When a monophonic file is being edited, the next to last button in the Basic group is labeled Convert to stereo. Clicking it causes all sound data to be duplicated into a second sound channel, creating a stereophonic file.

When a stereophonic file is being edited, the button is labeled Convert to mono. Clicking it causes all sound data in the two channels to be averaged into a single channel, creating a monophonic file.

Any file section selection is ignored (but preserved).


Convert to 8 / 16 bits
When a 16 bit file is being edited, the last button in the Basic group is labeled Convert to 8 bits. Clicking it causes all samples to be reduced to 8 bit resolution, preserving their amplitude relative to the available dynamic range. Note that this operation causes information to be lost, introducing noise.

When an 8 bit file is being edited, the button is labeled Convert to 16 bits. Clicking it causes all samples to be scaled up to 16 bit resolution, preserving their amplitude relative to the available dynamic range. No information is lost (and no noise added) in this process.

Any file section selection is ignored (but preserved).


Changing file properties

The fastest way to change the word size (8 or 16 bits) or the number of channels (1 or 2) of a file is to use the dedicated Basic editing functions.

An alternative method allowing you to change sampling rate, word size and number of channels in one shot is to use the Copy and Paste mix functions:

•	Click Copy to send the selected file section to the clipboard.

•	Click [image] in the toolbar to clear the editor. Alternatively, click [image] and switch to the new Acid WAV window.

•	Click Insert silence. Since no file is loaded, this brings up the WAV properties window. Set the desired properties and click OK. A new, silent file will be created.

(You may want to right-click Insert silence instead of left-clicking it. This allows you to change the duration of the new file to something shorter than the clipboard contents, saving you any trimming of the final result later on.)

•	Click Paste mix (right-click if you are not sure that the amplification levels are set appropriately). Done!

Yet another alternative is to create your own one-step conversion function with OpenDSP.


WAV properties
The WAV properties window is displayed by Acid WAV when it needs to create a new file from scratch, e.g. for synthesis or recording. After selecting the desired properties, click OK to continue or [image] to discard all changes and cancel the operation.


About the clipboard
Acid WAV's clipboard is a file (not the Windows clipboard) used for temporary storage of sound data. You can send data to the clipboard with Trim, Cut or Copy. All Acid WAV windows share the same clipboard (unless you have several copies of Acid WAV installed in different directories, in which case each copy will maintain its own clipboard).

Writing new data to the clipboard causes any data previously sent there to be lost. The clipboard is also cleared when the last Acid WAV window is closed.

The clipboard's contents can be pasted into the editor using Paste and Paste mix. In addition, Ring modulate can use the clipboard as its modulator source, and Reduce noise requires the clipboard to contain samples of the noise to be removed. Sound data which was written to the clipboard in a format different than that of the destination (e.g. 16 bit data being pasted into an 8 bit file) is reformatted transparently by Acid WAV.

OpenDSP functions have full access to the clipboard.


Standard insertion rules
See also: Selecting file sections.

No selection

When neither start nor end positions are marked in the main window's wave display, new data is inserted ahead of the first sample in the file.

No end position

When only a start position is marked in the mani window's wave display, new data is inserted at the start position.

Full selection

When both start and end positions are marked in the main window's wave display, new data replaces the highlighted section.

Stereo files

Differences in duration between stereo channels caused by inserting (or overwriting) data into only one channel are compensated by padding the shorter channel with silence.


Advanced editing

Advanced editing is a collective term for anything done with the following function groups:

•	Time functions

•	Amplitude functions

•	Frequency functions


Time functions

The Time editing group contains the following functions:

•	Echo

•	Hall reverb

•	Chapel reverb

•	Chamber reverb

•	Custom reverb

•	Virtual room

•	Reverse

•	Stretch

•	Tremolo

•	Vibrato

•	Chorus

•	Flange

•	Ring modulate


Echo

Echo is used to create a basic echo effect throughout the selected section. Use Virtual room for more realistic room simulations.

Right-click Echo to open its settings dialog:

You have the following parameters at your disposal:

•	Echo is the effect mix level. At 100%, the first echo will have the same amplitude as the original sound.

•	Feedback is the amplitude ratio between successive echoes. At 50%, the amplitude will fall by half for each new echo.

•	Dry signal is the mix level of the original sound.

•	Delay time is the separation between the original sound and the first echo, as well as between successive echoes.

When the dialog is called up from the main window, the delay time is expressed in the main window's time unit.

When the dialog is called up from the script editor, the delay time is expressed in milliseconds.

Selecting Left or Right causes only one channel to be echoed. When Both is selected, the left and right channel are treated separately.

Creating echoes in real rooms necessarily implies mixing stereo channels. You can therefore improve the realism of the effect by partially mixing channels or (even better) by reducing the original file to mono, echoing it and mixing the result into the echoed stereo file. This is a good candidate for a simple script.

You can save all settings to (and restore them from) your own echo  Patches.

Click OK to confirm the new settings. If the dialog was called up from the main window, Echo will be executed.

Click [image] to abort and revert to the old settings.


Hall reverb

Hall reverb is used to apply a large-room reverb algorithm to the selected section.

See Chapel reverb and Chamber reverb for other special reverb algorithms, Custom reverb for a generic algorithm and Virtual room for a realistic room simulator.

Right-click Hall reverb to open its settings dialog:

Like most synthetic reverbs, Hall reverb creates its output by mixing three signals:

•	the Original sound,

•	early Echoes from a multitap delay line (used to simulate early, distinct reflections from nearby walls) and

•	the diffuse Reverb proper, created by looping the sound through a network of delay lines (used to simulate mixed, multiple reflections from all walls).

Apart from the mix levels for these sources, you can set the

•	Echo time for the early reflection delay line (use longer echo times to create the impression of a larger room) and the

•	Loop gain for the diffuse reverb section. This determines how fast the reverb will decay. Use larger gains to make the reverberations last longer, creating the impression of a more complicated room geometry (more walls).

When the dialog is called up from the main window, the echo time is expressed in the main window's time unit.

When the dialog is called up from the script editor, the echo time is expressed in milliseconds.

Selecting Left or Right causes only one channel to be reverberated. When Both is selected, the left and right channel are treated separately.

In real rooms, reverberation necessarily implies mixing between stereo channels. You can therefore improve the realism of the effect by partially mixing channels or (even better) by reducing the original file to mono, reverberating it and mixing the result into the reverberated stereo file. This is a good candidate for a simple script.

The Target channel setting is ignored for monophonic files.

You can save all settings to (and restore them from) your own hall reverb Patches.

Click OK to confirm the new settings. If the dialog was called up from the main window, Hall reverb will be executed.

Click [image] to abort and revert to the old settings.


Chapel reverb

Chapel reverb is used to apply a medium-sized-room reverb algorithm to the selected section.

See Hall reverb and Chamber reverb for other special reverb algorithms, Custom reverb for a generic algorithm and Virtual room for a realistic room simulator.

Right-click Chapel reverb to open its settings dialog:

Like most synthetic reverbs, Chapel reverb creates its output by mixing three signals:

•	the Original sound,

•	early Echoes from a multitap delay line (used to simulate early, distinct reflections from nearby walls) and

•	the diffuse Reverb proper, created by looping the sound through a network of delay lines (used to simulate mixed, multiple reflections from all walls).

Apart from the mix levels for these sources, you can set the

•	Echo time for the early reflection delay line (use longer echo times to create the impression of a larger room) and the

•	Loop gain for the diffuse reverb section. This determines how fast the reverb will decay. Use larger gains to make the reverberations last longer, creating the impression of a more complicated room geometry (more walls).

When the dialog is called up from the main window, the echo time is expressed in the main window's time unit.

When the dialog is called up from the script editor, the echo time is expressed in milliseconds.

Selecting Left or Right causes only one channel to be reverberated. When Both is selected, the left and right channel are treated separately.

In real rooms, reverberation necessarily implies mixing between stereo channels. You can therefore improve the realism of the effect by partially mixing channels or (even better) by reducing the original file to mono, reverberating it and mixing the result into the reverberated stereo file. This is a good candidate for a simple script.

The Target channel setting is ignored for monophonic files.

You can save all settings to (and restore them from) your own chapel reverb Patches.

Click OK to confirm the new settings. If the dialog was called up from the main window, Chapel reverb will be executed.

Click [image] to abort and revert to the old settings.


Chamber reverb

Chamber reverb is used to apply a small-room reverb algorithm to the selected section.

See Hall reverb and Chapel reverb for other special reverb algorithms, Custom reverb for a generic algorithm and Virtual room for a realistic room simulator.

Right-click Chamber reverb to open its settings dialog:

Like most synthetic reverbs, Chamber reverb creates its output by mixing three signals:

•	the Original sound,

•	early Echoes from a multitap delay line (used to simulate early, distinct reflections from nearby walls) and

•	the diffuse Reverb proper, created by looping the sound through a network of delay lines (used to simulate mixed, multiple reflections from all walls).

Apart from the mix levels for these sources, you can set the

•	Echo time for the early reflection delay line (use longer echo times to create the impression of a larger room) and the

•	Loop gain for the diffuse reverb section. This determines how fast the reverb will decay. Use larger gains to make the reverberations last longer, creating the impression of a more complicated room geometry (more walls).

When the dialog is called up from the main window, the echo time is expressed in the main window's time unit.

When the dialog is called up from the script editor, the echo time is expressed in milliseconds.

Selecting Left or Right causes only one channel to be reverberated. When Both is selected, the left and right channel are treated separately.

In real rooms, reverberation necessarily implies mixing between stereo channels. You can therefore improve the realism of the effect by partially mixing channels or (even better) by reducing the original file to mono, reverberating it and mixing the result into the reverberated stereo file. This is a good candidate for a simple script.

The Target channel setting is ignored for monophonic files.

You can save all settings to (and restore them from) your own chamber reverb Patches.

Click OK to confirm the new settings. If the dialog was called up from the main window, Chamber reverb will be executed.

Click [image] to abort and revert to the old settings.


Custom reverb

Custom reverb is used to apply a generic reverb algorithm to the selected section.

See Hall reverb, Chapel reverb and Chamber reverb for three special reverb algorithms and Virtual room for a realistic room simulator.

Right-click Custom reverb to open its settings dialog:

Like most synthetic reverbs, Custom reverb creates its output by mixing three signals:

•	the Original sound,

•	early Echoes from a multitap delay line (used to simulate early, distinct reflections from nearby walls) and

•	the diffuse Reverb proper, created by looping the sound through a network of delay lines (used to simulate mixed, multiple reflections from all walls).

As with the special reverb algorithms, you can set the mix levels for these sources as well as the

•	Echo time for the early reflection delay line (use longer echo times to create the impression of a larger room) and the

•	overall Loop gain for the diffuse reverb section. This determines (in part - see below) how fast the reverb will decay. Use larger gains to make the reverberations last longer, creating the impression of a more complicated room geometry (more walls).

You also have a handle on the inner workings of the reverb section through the Loop time and Cutoff controls. This section is made up of six smaller reverberator units working in parallel. Each one has its own delay loop containing an amplifier and a simple low pass filter. The amplifier simulates overall attenuation as the sound travels through air and bounces off walls; the low pass filter makes the simulation more realistic by attenuating high frequencies faster than low ones.

Making a Loop time longer is like moving two walls further apart; lowering the Cutoff frequency is like making the walls "softer" and the air between them more humid, resulting in increased absorption of high frequencies over low ones.

Loop gain and Loop time are of primary importance in determining the overall decay time. A shorter Loop time will counteract a larger Loop gain, but by packing more "bounces" per time unit it will also contribute to a smoother reverb. The effect of the Cutoff settings becomes successively more noticeable over longer decay times, and can become a dominating feature of the sound picture after a few seconds.

When the dialog is called up from the main window, times are expressed in the main window's time unit.

When the dialog is called up from the script editor, times are expressed in milliseconds.

Selecting Left or Right causes only one channel to be reverberated. When Both is selected, the left and right channel are treated separately.

In real rooms, reverberation necessarily implies mixing between stereo channels. You can therefore improve the realism of the effect by partially mixing channels or (even better) by reducing the original file to mono, reverberating it and mixing the result into the reverberated stereo file. This is a good candidate for a simple script.

The Target channel setting is ignored for monophonic files.

You can save all settings to (and restore them from) your own custom reverb Patches.

Click OK to confirm the new settings. If the dialog was called up from the main window, Custom reverb will be executed.

Click [image] to abort and revert to the old settings.


Virtual room

Virtual room is used to run the selected section through a realistic room acoustics simulator.

See Echo, Hall reverb, Chapel reverb, Chamber reverb and Custom reverb for synthetic echo and reverb effects.

Right-click Virtual room to open its settings dialog:

Setting up a room acoustics simulation involves three steps (treated in detail below):

•	Specifying room properties (geometry and absorption coefficients).

•	Specifying speaker and microphone properties (positions and directional characteristics).

•	Specifying the degree of approximation to use in computations.

You can save all settings to (and restore them from) your own virtual room Patches.

Click OK to confirm the new settings. If the dialog was called up from the main window, Virtual room will be executed.

Click [image] to abort and revert to the old settings.

Room properties

Room properties are entered in the upper portion of the Virtual room dialog. Apart from the Room size, you can vary the Air absorption and the Reflectivity of walls, floor and ceiling.

Air absorption may require some explaining. Sound coming from a distant source is weaker than sound coming from an identical but closer source because of two effects: the dissipation of sound energy into heat (caused by air being a less than ideal medium) and the geometrical "dilution" of sound energy over a growing wavefront area. The Air absorption parameter is used to control dissipation. Setting it to zero gives you a room filled with an ideal, non-dissipative medium, but it won't change the fact that wavefront areas grow with distance.

By the way, in case you're still using body parts to measure distances, 1 meter = 3.3 feet.

Reflectivity is the fraction of  the sound's amplitude that survives a bounce from a surface. 100% means that the surface is a perfect reflector, 0% that it's a perfect absorber generating no echoes (this is what's usually strived for in "silent rooms", recording studios and the like).

In real life, neither air absorption nor surface reflectivity are independent of the sound's frequency. If you don't mind some heavy duty computations, you can simulate the effects of frequency-dependent absorption and reflecitivity by splitting the source signal into adjacent frequency bands (e.g. with Band pass or Equalize), running each band through a virtual room with its own air absorption and reflection coefficients, and finally mixing the results back together. This is a good candidate for a script.

Speakers and microphones

Each simulated speaker has a position (X, Y and Z coordinates) a Size, an orientation (Elevation and Direction) and directionality characteristics (Inner cone and Outer cone).

•	Size is the radius of a sphere from which the source signal expands into the virtual room. This parameter sets the scale for the amplitude attenutation over distance caused by the "dilution" of sound energy over a growing wavefront area. A larger Size (initial wavefront) results in slower attenuation.

•	Elevation and Direction are angles best understood by observing how they affect the directional display:

•	By definition, a speaker radiating sound with the same intensity in all directions has no orientation. Elevation and direction are made meaningful by the Inner cone and Outer cone parameters:

The Inner cone (outlined by a series of green circles in the directional display) is the region throughout which the speaker emits sound with full intensity.

The Outer cone (outlined by a series of gray circles in the directional display) is a region throughout which the emitted intensity falls off from full (at the surface of the inner cone) to zero (at the surface of the outer cone). The transition is linear in amplitude, quadratic in intensity.

The speaker does not radiate outside of the outer cone.

Microphones are similar to speakers. The main difference is that they are pointlike (their Size is always 0). Their Inner cone and Outer cone parameters control sensitivity: zero outside the outer cone, 100% inside the inner cone, linear in amplitude between the two.

Microphones and speakers are also affected by the Target channel setting. Selecting Left or Right causes only one channel to be routed through the virtual room. When Both is selected, the left and right channel are treated jointly, i.e. sound emitted by the left speaker is also picked up by the right microphone and vice versa, like in a real room.

The Target channel setting is ignored for monophonic files, which are always routed through the Left microphone and speaker.

Visualizing positions and orientations from numbers alone can be difficult. Click [image] to bring up a wireframe display of the room:

Speakers are marked with Ss, microphones with Ms. Orientations are shown as lines pointing away from microphones and speakers. The usual color codes apply: left is red and right is blue. Use the scroll bars to rotate the display. Click 0 to bring it back to the default position.

Note that the room display is modeless, so you can keep it open while you edit room properties in the Virtual room dialog.

Degree of approximation

Acid WAV simulates room acoustics by adding up the effects of successive echoes: the original sound hits the walls (and the floor, and the ceiling) and bounces off, generating new wavefronts. Each new wavefront in turn goes on to bounce off the other walls (and the floor, and the ceiling) generating even more, "second generation" bounced wavefronts. This can in principle go on forever, with the number of wavefronts growing exponentially.

Two things save the day:

•	The attenuation as sound travels through air and bounces off walls. As energy is dissipated, the contribution of new wavefronts to the sound drops off, and we can get away with neglecting bounces beyond a certain "generation".

•	Each bounce takes time to happen (sound travels through air at roughly 340 m/s), and we are only interested in a limited time frame.

The number of bounces to keep track of is set in the Max bounces box. 0 bounces means "simulate no echoes, just tell me what the direct signal sounds like after it's traveled from the speakers to the microphones". 1 bounce means "simulate first generation bounced wavefronts" (six of them, plus the original signal) and so on.


Reverse

Reverse is used to time-invert the selected section.

Right-click Reverse to open its settings dialog:

Clicking Left or Right causes only one channel to be reversed.

The Target channel setting is ignored when reversing monophonic files.

Click OK to confirm the current settings or any button in the Target channel box to update them. If the dialog was called up from the main window, Reverse will be executed.

Click [image] to abort.


Stretch

Stretch is used to change the duration of the selected section without changing its pitch.

Acid WAV's stretcher uses an advanced, Fourier-based algorithm primarily aimed at samples of music instruments containing a dominating frequency (or set of harmonic frequencies).

Right-click Stretch to open its settings dialog:

Use the Time factor box to set the amount of stretching. Values between 0.5 (causing the duration to be reduced by half) and 2.0 (causing the duration to be doubled) are allowed.

The Overlapping parameter determines the amount of cross-fading between successive sound chunks (like all functions, the stretcher reads and writes sound data in chunks a few kB in length). A setting of 1 / 1 means that the first half of each chunk is cross-faded with the second half of the previous chunk, making all chunks (except for the first and the last one) completely cross-faded with other chunks. A setting of 1 / 2 means that the first and the last quarter of each chunk is cross-faded with other chunks, leaving the central half untouched, and so on. More overlapping tends to improve the result by smoothing out the transition between chunks. It also increases the computation time.

Selecting Left or Right causes only one channel to be stretched. The resulting difference in duration is compensated by padding the shorter channel with silence, leaving the overall file length unchanged.

The Target channel setting is ignored for monophonic files.

Click OK to confirm the new settings. If the dialog was called up from the main window, Stretch will be executed.

Click [image] to abort and revert to the old settings.


Tremolo

Tremolo is used to impose a periodic amplitude envelope on the selected section. Use Envelop for more advanced amplitude shaping.

See also Vibrato.

Right-click Tremolo to open its settings dialog:

The Modulator box lets you choose between the following waveshapes:

Sine wave.

Triangle wave.

Up ramp.

Down ramp.

Square wave.

Set the number of cycles per second in the Rate box and the amount of modulation in the Depth box. A modulation depth of 100% causes the amplitude factor to vary between 1 and 0; a depth of 50% causes the amplitude factor to vary between 1 and 0.5.

Selecting Left or Right causes only one channel to be affected. The Target channel setting is ignored for monophonic files.

Click OK to confirm the new settings. If the dialog was called up from the main window, Tremolo will be executed.

Click [image] to abort and revert to the old settings.


Vibrato

Vibrato is used to impose a periodic frequency envelope on the selected section. Use Modulate for more advanced frequency modulation.

See also Tremolo.

Right-click Vibrato to open its settings dialog:

The Modulator box lets you choose between the following waveshapes:

Sine wave.

Triangle wave.

Up ramp.

Down ramp.

Square wave.

Set the number of cycles per second in the Rate box and the amount of modulation in the Max factor box. A max factor of 1.1 causes the frequency factor to vary between 1.1 and 1 / 1.1; a max factor of  2.0 causes the frequency factor to vary between 2.0 and 1 / 2.0.

Selecting Left or Right causes only one channel to be affected. The Target channel setting is ignored for monophonic files.

Click OK to confirm the new settings. If the dialog was called up from the main window, Vibrato will be executed.

Click [image] to abort and revert to the old settings.


Chorus

Chorus is used to mix the selected section with a delayed version of itself, with the delay undergoing a periodic variation to create the interference effects typical of choirs.

Right-click Chorus to open its settings dialog:

The Effect level control is used to set the amplitude of the delayed signal relative to the original signal.

The Modulation rate is the number of times that the delay is swept from 0 to Max delay and back in one second.

When the dialog is called up from the main window, the Max delay time is expressed in the main window's time unit.

When the dialog is called up from the script editor, the Max delay time is expressed in milliseconds.

For realistic chorus effects, the Max delay and the Modulation rate should be kept fairly small (a few milliseconds and Hertz, respectively).

Selecting Left or Right causes only one channel to be affected. The Target channel setting is ignored for monophonic files.

You can save all settings to (and restore them from) your own chorus Patches.

Click OK to confirm the new settings. If the dialog was called up from the main window, Chorus will be executed.

Click [image] to abort and revert to the old settings.


Flange

Flange is a cross between Echo and Chorus on steroids. It's used to mix the selected section with an echoed version of itself, with the echo's delay undergoing a periodic variation to create time-varying interference effects.

Right-click Flange to open its settings dialog:

You have the following parameters at your disposal:

•	Effect is the mix level of the echoed sound.

•	Feedback is the amplitude ratio between successive echoes. At 50%, the amplitude will fall by half for each new echo.

The non-linearity introduced by the feedback loop in the echo section is the most important difference between Chorus and Flange. With large feedback values, Flange can create truly warped sounds. With more moderate settings, it's one of the most popular effects among electric guitarists and the core of "grunge" sound.

•	Dry signal is the mix level of the original sound.

•	Delay modulator waveshapes:

Sine wave (choose this modulator and set Feedback = 0 to reduce Flange to Chorus).

Triangle wave.

Up ramp.

Down ramp.

Square wave.

•	Modulation rate is the number of times that the delay in the echo section is swept from Delay offset - Delay variation  to Delay offset + Delay variation and back in one second.

The most interesting flange effects are created with fairly small modulation rates and delay times (a few Hertz and milliseconds, respectively).

When the dialog is called up from the main window, Delay offset and Delay variation times are expressed in the main window's time unit.

When the dialog is called up from the script editor, Delay offset and Delay variation times are expressed in milliseconds.

Selecting Left or Right causes only one channel to be affected. The Target channel setting is ignored for monophonic files.

You can save all settings to (and restore them from) your own flanger Patches.

Click OK to confirm the new settings. If the dialog was called up from the main window, Flange will be executed.

Click [image] to abort and revert to the old settings.


Ring modulate

Ring modulate is used to multiply the selected section with a periodic signal.

A common use is the creation of "robot" voices and other synthetic-sounding effects.

Right-click Ring modulate to open its settings dialog:

The Modulator box lets you choose between the following signal sources:

Sine wave.

Triangle wave.

Up ramp.

Down ramp.

Square wave.

The clipboard. This option allows you to use any synthetic or sampled signal as a modulator.

Set the number of cycles per second in the Rate box. This setting is ignored when the clipboard is the modulator.

Use the Amplitude box to set the amplification factor to be applied to the modulator.

Selecting Left or Right causes only one channel to be affected. The Target channel setting is ignored for monophonic files.

Click OK to confirm the new settings. If the dialog was called up from the main window, Ring modulate will be executed.

Click [image] to abort and revert to the old settings.


Amplitude functions

The Amplitude editing group contains the following functions:

•	Amplify

•	Envelop

•	Maximize

•	Offset

•	Invert

•	Gate

•	Clip

•	Distort

•	Rectify

•	Quantize

•	Interpolate

•	Gated delete

•	Compress / Expand


Amplify

Amplify is used to modify sound levels in the selected section, e.g. for volume adjustment or for the creation of simple fade-in and fade-out effects. Use Envelop to do more advanced amplitude shaping.

Right-click Amplify to open its settings dialog:

The edit boxes let you set Start and End amplification factors individually for each channel. The Start value is the amplification factor applied to the first sample in the selected section. The End value is the amplification factor applied to the last sample in the selected section. Intermediate values are computed by linear interpolation. Negative values (causing phase inversion) are allowed.

The picture shows the settings for a fade-in on the Left channel accompanied by a fade-out on the Right channel.

The Right column is ignored for monophonic files.

Use the arrow buttons to copy amplification factors to neighbouring boxes.

Clicking 1 causes all levels to be reset to 1.00, i.e. no amplification.

Click OK to accept the new settings. If the dialog was called up from the main window, Amplify will be executed.

Click [image] to abort and revert to the old settings.


Envelop

Envelop is used to impose an amplitude envelope on the selected section. Use Amplify for simple volume adjustments, fade-in and fade-out effects.

Right-click Envelop to open its settings dialog:

The envelope shape is entered and edited in the graph. You also have the editor buttons in the bottom box at your disposal.

Use the Y scale box to set the overall amplification scale.

By default, envelope values between nodes are computed by linear interpolation. If a button in the Interpolation box is depressed, two envelope curves will be displayed: the usual, linearly interpolated one (in black) and the selected, non-linear one actually imposed on the data (in red). You can choose between five different types of non-linear interpolation.

The cursor position display in the upper right corner of the Interpolation box is read as "normalized position : amplification factor" (time positions are normalized, i.e. 0.00 denotes the start and 1.00 the end of the selected section). Note that you can use negative amplification factors (phase inversion).

Selecting Left or Right causes only one channel to be affected. The Target channel setting is ignored for monophonic files.

You can save all settings to (and restore them from) your own envelope Patches.

Click OK to accept the new settings. If the dialog was called up from the main window, Envelop will be executed.

Click [image] to abort and revert to the old settings.


Editing envelop graphs
Click any free spot in the graph to insert a new node there. Graph nodes can not overlap.

Place the mouse cursor on any node to highlight it:

When a node is hightlighted it can be

•	dragged to a different position (keep the left mouse button pressed while moving the mouse cursor around) and

•	deleted: right-click to open the Delete node pop-up menu

and click it to confirm deletion. Click anywhere outside the graph to close the pop-up menu and abort deletion.

The leftmost and rightmost nodes in the graph can neither be moved horizontally nor deleted.


Graph editor buttons
Reverses (time-inverts) the graph.

Inverts (changes the sign of) the graph.

Makes the graph time-symmetric (a time-symmetric graph is unaffected by reversal).

Makes the graph time-antisymmetric (reversing a time-antisymmetric graph is equivalent to inverting it).

Lines up all nodes from the graph's lower left corner to its upper right corner.

Deletes all but the leftmost and rightmost nodes and moves those back to the horizontal axis.


Using patches
Click Add to save the current settings to a new patch.

New patches are always called "New". Patch names can be changed just like file names in the standard Windows file dialogs: select an entry in the list, wait a moment and click again to put it in edit mode: . Enter the new name, then hit Enter or click anywhere else in the list to exit edit mode. If you change your mind and want the old name back, you can abort editing by pressing Esc.

Select an entry in the list and click Update to write the current settings to an existing patch.

Use Remove to delete the selected patch.

Double-click any patch to load it. When a patch is selected, double-clicking anywhere in the list will also cause the patch to be loaded.


Types of non-linear interpolation
Acid WAV supports interpolation with cubic splines. A cubic spline is built up of third degree polynomials in such a way that the resulting function and its first two derivatives are continuous everywhere.

Any given set of points can be approximated by an infinite number of different cubic splines. In order to pick out a particular solution, two additional conditions must be specified. These are usually either

•	"natural" boundary conditions: the spline must be flat outside of the interpolation interval

or

•	"correct" boundary conditions: at the ends of the interpolation interval, the spline's slope must coincide with that of the function being interpolated (in practice computed by linear interpolation).

Acid WAV lets you combine the above conditions as follows:

•	Spline #1:	"correct" boundary conditions at both ends.

•	Spline #2:	"natural" boundary condition at the left end, "correct" boundary condition at the right end.

•	Spline #3: "correct" boundary condition at the left end, "natural" boundary condition at the right end.

•	Spline #4: "natural" boundary conditions at both ends.

You can also choose to interpolate all points with a single, higher order Polynomial. Polynomial interpolation tends to suffer from wider oscillations than spline interpolation, but can yield better results in special cases.


Maximize

Maximize is used to amplify the selected section so as to exploit as much as possible of the available dynamic range (-32768 to 32767 for 16 bit files, 0 to 255 for 8 bit files).

If the Statistics window indicates the presence of a DC offset in the sound data, you can make more room for maximization using the Offset function first.

Right-click Maximize to open its settings dialog:

Clicking Left or Right causes only one channel to be maximized, independently of the other channel. If Both channels are maximized, the relation between their levels is preserved (usually meaning that only one of them will be fully maximized).

The Target channel setting is ignored when maximizing monophonic files.

Click OK to confirm the current settings or any button in the Target channel box to update them. If the dialog was called up from the main window, Maximize will be executed.

Click [image] to abort.


Offset

Offset is used to shift all sample values in the selected section by a constant.

Right-click Offset to open its settings dialog:

Selecting Left or Right causes only one channel to be affected. The Target channel setting is ignored for monophonic files.

The Operation box lets you choose between

•	removing any DC component (Center average) present in the sound

•	making equal room between the largest sample value and the "ceiling" (32767 for 16 bit files, 255 for 8 bit files) on one hand and the smallest sample value and the "floor" (-32768 for 16 bit files, 0 for 8 bit files) on the other (Center extrema) - this optimizes the data for a Maximize, but note that it will also introduce a DC component which might become troublesome later on

•	specifying an arbitrary offset (Manual offset - the button must be depressed for the edit box to be enabled).

Click OK to confirm the new settings. If the dialog was called up from the main window, Offset will be executed.

Click [image] to abort and revert to the old settings.


Invert

Invert is used to flip the phase of the selected section. It's equivalent to (but more convenient than) Amplifying with all levels set to -1.00.

Common applications (together with Copy and Paste mix) include removing a known sound component from a mix and extracting differences between sounds.

Right-click Invert to open its settings dialog:

Clicking Left or Right causes only one channel to be inverted.

The Target channel setting is ignored when inverting monophonic files.

Click OK to confirm the current settings or any button in the Target channel box to update them. If the dialog was called up from the main window, Invert will be executed.

Click [image] to abort.


Gate

Gate is used to silence those parts of the selected section where the amplitude falls below a given threshold. Use Compress / Expand to implement more articulate responses to amplitude levels.

A common application is the suppression of background noise in recordings containing (almost) silent sections. Another one is in effects, e.g. gated reverb.

Right-click Gate to open its settings dialog:

Selecting Left or Right causes only one channel to be gated. The Target channel setting is ignored for monophonic files.

The Amplitude threshold box lets you specify the amplitude threshold either in Relative terms (as a percentage of the full amplitude range) or as an Absolute value. You can also offset the threshold, e.g. to compensate for a known DC component (see Statistics). Keep in mind that the max amplitude of an 8 bit file is 128, that of a 16 bit file 32768.

Abrupt clipping when the amplitude crosses the threshold level is avoided by specifying non-zero Attack (fade in) and Decay (fade out) times in the Envelope box.

When the dialog is called up from the main window, durations are expressed in the main window's time unit.

When the dialog is called up from the script editor, durations are expressed in milliseconds.

Click OK to confirm the new settings. If the dialog was called up from the main window, Gate will be executed.

Click [image] to abort and revert to the old settings.


Clip

Clip is used to limit sample values in the selected section.

Right-click Clip to open its settings dialog:

Selecting Left or Right causes only one channel to be clipped. The Target channel setting is ignored for monophonic files.

The Threshold box lets you specify the amplitude threshold either in Relative terms (as a percentage of the full amplitude range) or as an Absolute value.

Note that the threshold is signed, i.e. it's a sample value, not an amplitude. In order to clip on amplitude, you need to apply Clip twice. You could for instance Clip above a 10% threshold and then Clip below a -10% threshold, obtaining a 10% amplitude threshold clipping.

Keep in mind that the max amplitude of an 8 bit file is 128, that of a 16 bit file 32768.

Click OK to confirm the new settings. If the dialog was called up from the main window, Clip will be executed.

Click [image] to abort and revert to the old settings.


Distort

Distort runs each sample in the selected section through a user-defined function.

Right-click Distort to open its settings dialog:

The distortion function shape is entered and edited in the graph. You also have the editor buttons in the bottom box at your disposal.

Note that the graph shows (normalized) sample values, not amplitudes. This allows you to create asymmetric distortion functions behaving differently above and below the silence level. See Compress / Expand for an amplitude-based alternative.

The cursor position display in the upper right corner of the Interpolation box is read as "normalized input sample value : normalized output sample value". Sample values are normalized to the range -1.0 to 1.0 in order to make distortion functions independent of the file format.

Use the Y scale box to set the overall amplification scale.

By default, function values between nodes are computed by linear interpolation. If a button in the Interpolation box is depressed, two curves will be displayed: the usual, linearly interpolated one (in black) and the selected, non-linear one actually applied to the data (in red). You can choose between five different types of non-linear interpolation.

Selecting Left or Right causes only one channel to be affected. The Target channel setting is ignored for monophonic files.

You can save all settings to (and restore them from) your own distortion Patches.

Click OK to accept the new settings. If the dialog was called up from the main window, Distort will be executed.

Click [image] to abort and revert to the old settings.


Rectify

Rectify is used to invert samples with values below the silence level (0 for 16 bit files, 128 for 8 bit files) throughout the selected section.

Right-click Rectify to open its settings dialog:

Clicking Left or Right causes only one channel to be rectified. The Target channel setting is ignored when rectifying monophonic files.

Click OK to confirm the current settings or any button in the Target channel box to update them. If the dialog was called up from the main window, Rectify will be executed.

Click [image] to abort.


Rectification illustrated
Graphically,

becomes


Quantize

Quantize is used to change the number of effective quantization levels in the selected section.

Right-click Quantize to open its settings dialog:

Selecting Left or Right causes only one channel to be quantized. The Target channel setting is ignored for monophonic files.

Set the number of effective quantization levels for the first sample in the Start edit box.

Set the number of effective quantization levels for the last sample in the End edit box.

The number of effective quantization levels for intermediate samples is computed by linear interpolation.

Click an entry in the list to make it the new Start value. Click the arrow to copy the Start value to the End value.

Click OK to confirm the new settings. If the dialog was called up from the main window, Quantize will be executed.

Click [image] to abort and revert to the old settings.


About effective quantization levels
The samples in digital audio files are quantized, i.e. they can not have arbitrary values.

8 bit samples have 256 possible values or quantization levels (all integers between 0 and 255).

16 bit samples have 65536 quantization levels (all integers between -32768 and 32767).

The Quantize function reduces the number of effective quantization levels, i.e. the number of quantization levels which are actually used.

For instance, reducing the number of effective quantization levels of a 16 bit file to 32768 causes every other actual quantization level to go unused. Sample values = 1 are changed to 0, sample values = 3 are changed to 2 and so on. (Trying to do the same to an 8 bit file has no effect: the number of effective quantization levels can never be larger than the number of actual quantization levels.)


Gated delete

Gated delete is used to remove those parts of the selected section which fail an amplitude threshold test.

A common application is the automated removal of leading and trailing silence from recordings.

Right-click Gated delete to open its settings dialog:

Selecting Left or Right causes only one channel to be tested and modified. The resulting difference in duration is compensated by padding the selected channel with silence, leaving the overall file length unchanged.

Selecting Both causes the test to be applied to the average value of both channels and samples from both channels to be removed together.

The Target channel setting is ignored for monophonic files.

The Target samples box lets you choose between the following modes of operation:

•	Leading. Starting from the first sample in the selected section and moving forward, remove all samples that fail the amplitude threshold test and abort at the first sample that passes the test. Typically used to remove leading silence.

•	Trailing. Starting from the last sample in the selected section and moving backward, remove all samples that fail the amplitude threshold test and abort at the first sample that passes the test. Typically used to remove trailing silence.

•	All. Remove all samples that fail the amplitude threshold test. This can be used to create a "ripping" or "scratching" sound effect.

As shown in the picture, Leading and Trailing can be combined.

The Amplitude threshold box lets you specify the amplitude threshold either in Relative terms (as a percentage of the full amplitude range) or as an Absolute value. You can also offset the threshold, e.g. to compensate for a known DC component (see Statistics). Keep in mind that the max amplitude of an 8 bit file is 128, that of a 16 bit file 32768.

If Delete below amplitude threshold is depressed, the threshold test is the same used by the ordinary Gate function, i.e. low samples are deleted. If Delete above amplitude threshold is depressed, high samples are deleted.

Click OK to confirm the new settings. If the dialog was called up from the main window, Gated delete will be executed.

Click [image] to abort and revert to the old settings.


Interpolate

Interpolate is used to replace all sample values in the selected section with a line connecting the start and end samples.

This can be a useful complement to deleting and filtering when removing pops, clicks and scratches from recordings.

Right-click Interpolate to open its settings dialog:

Clicking Left or Right causes only one channel to be interpolated.

The Target channel setting is ignored when interpolating monophonic files.

Click OK to confirm the current settings or any button in the Target channel box to update them. If the dialog was called up from the main window, Interpolate will be executed.

Click [image] to abort.


Interpolation illustrated
Graphically,

becomes


Compress / Expand

Compress / Expand modifies the moving average of amplitudes in the selected section according to a user-defined function. It can be used to compress, limit, expand and gate sounds.

Right-click Compress / Expand to open its settings dialog:

The amplitude function shape is entered and edited in the graph. You also have the editor buttons in the bottom box at your disposal.

The cursor position display in the upper right corner of the Interpolation box is read as "normalized average input amplitude : normalized average output amplitude". Amplitudes are normalized to the range -1.0 to 1.0 in order to make amplitude functions independent of the file format.

Use the Time res. box to set the time resolution, i.e. the length of the moving frame in which average amplitudes are computed. Reducing the time resolution to 1 sample turns Compress / Expand into a close relative of the Distort function (the difference being partly that Distort works on sample values rather than on amplitudes, partly that it doesn't treat stereo channels jointly - see below).

When the dialog is called up from the main window, the time resolution is expressed in the main window's time unit.

When the dialog is called up from the script editor, the time resolution is expressed in milliseconds.

By default, function values between nodes are computed by linear interpolation. If a button in the Interpolation box is depressed, two curves will be displayed: the usual, linearly interpolated one (in black) and the selected, non-linear one actually applied to the data (in red). You can choose between five different types of non-linear interpolation.

Selecting Left or Right causes only one channel to be modified, independently of the other. Select Both to average the amplitudes of left and right channels jointly, applying the same amplification factor to both. This prevents unnatural-sounding effects like large differences in background noise levels between channels.

The Target channel setting is ignored for monophonic files.

You can save all settings to (and restore them from) your own compress / expand Patches.

Click OK to accept the new settings. If the dialog was called up from the main window, Compress / Expand will be executed.

Click [image] to abort and revert to the old settings.


About compressors and expanders
Compressors reduce the dynamic range of signals. In their simplest form, they are implemented as amplifiers with two gain levels. Below a given amplitude threshold, the gain is unity (i.e. the sound is let through unchanged). Above the threshold, the gain is less than unity. The result is to boost low amplitude signals relative to high amplitude signals.

A limiter is an extreme compressor characterized by a maximal output level clamped to the threshold level.

Expanders increase the dynamic range of signals. Like compressors, simple expanders can be implemented as amplifiers with two gain levels. Above a given amplitude threshold, the gain is unity (i.e. the sound is let through unchanged). Below the threshold, the gain is less than unity. The result is to boost high amplitude signals relative to low amplitude signals.

A gate is an extreme expander characterized by total suppression below the threshold level.


Frequency functions

The Frequency editing group contains the following functions:

•	Low pass

•	High pass

•	Band pass

•	Band stop

•	Resonate

•	Notch

•	Equalize

•	Convolve

•	Vocode

•	Resample

•	Modulate

•	Pitch shift

•	Reduce noise


Low pass

Low pass is used to remove frequencies above a given cutoff value from the selected section. It's the opposite of High pass.

See also Band pass, Band stop, Resonate, Notch, Equalize and Convolve.

Right-click Low pass to open its settings dialog:

The graph shows the frequency response of the filter. The vertical line marks the cutoff frequency. The cursor position display in the graph's upper left corner is read as "frequency : amplification factor".

If the dialog is called up from Acid WAV's main window when a file is loaded, frequencies are expressed in Hertz (as in the picture). If the dialog is called up from the script editor or from the main window when no file is loaded, frequencies are normalized: the sampling rate is then 1.0 and the Nyqvist frequency (the highest reproducible frequency, and therefore the right end of the graph) is 0.5.

The cutoff frequency can be set by clicking the graph or directly in the Cutoff box.

The narrowness of the transition band (i.e. how fast the frequency response drops off from full to zero)  depends on the number of Poles. If you don't know what poles are, think of them as filter elements. Adding more elements to the filter makes it more precise. The improvement drops off for each new pole, and the finite precision of computer arithmetics sets an absolute limit at about 50 poles. In most cases, there is little point to going beyond 30 poles.

Use the Gain box to set an overall amplification factor for the filter.

Selecting Left or Right causes only one channel to be filtered. The Target channel setting is ignored when filtering monophonic files.

Click OK to confirm the new settings. If the dialog was called up from the main window, Low pass will be executed.

Click [image] to abort and revert to the old settings.


High pass

High pass is used to remove frequencies below a given cutoff value from the selected section. It's the opposite of Low pass.

See also Band pass, Band stop, Resonate, Notch, Equalize and Convolve.

Right-click High pass to open its settings dialog:

The graph shows the frequency response of the filter. The vertical line marks the cutoff frequency. The cursor position display in the graph's upper left corner is read as "frequency : amplification factor".

If the dialog is called up from Acid WAV's main window when a file is loaded, frequencies are expressed in Hertz (as in the picture). If the dialog is called up from the script editor or from the main window when no file is loaded, frequencies are normalized: the sampling rate is then 1.0 and the Nyqvist frequency (the highest reproducible frequency, and therefore the right end of the graph) is 0.5.

The cutoff frequency can be set by clicking the graph or directly in the Cutoff box.

The narrowness of the transition band (i.e. how fast the frequency response grows from zero to full)  depends on the number of Poles. If you don't know what poles are, think of them as filter elements. Adding more elements to the filter makes it more precise. The improvement drops off for each new pole, and the finite precision of computer arithmetics sets an absolute limit at about 50 poles. In most cases, there is little point to going beyond 30 poles.

Use the Gain box to set an overall amplification factor for the filter.

Selecting Left or Right causes only one channel to be filtered. The Target channel setting is ignored when filtering monophonic files.

Click OK to confirm the new settings. If the dialog was called up from the main window, High pass will be executed.

Click [image] to abort and revert to the old settings.


Band pass

Band pass is used to remove frequencies outside a given frequency band from the selected section. It's the opposite of Band stop.

See also High pass, Low pass, Resonate, Notch, Equalize and Convolve.

Right-click Band pass to open its settings dialog:

The graph shows the frequency response of the filter. The vertical line marks the center of the passband. The cursor position display in the graph's upper left corner is read as "frequency : amplification factor".

If the dialog is called up from Acid WAV's main window when a file is loaded, frequencies are expressed in Hertz (as in the picture). If the dialog is called up from the script editor or from the main window when no file is loaded, frequencies are normalized: the sampling rate is then 1.0 and the Nyqvist frequency (the highest reproducible frequency, and therefore the right end of the graph) is 0.5.

The center of the passband can be set by clicking the graph or directly in the Center box. The width is set in the Width box.

The narrowness of the transition bands (i.e. how fast the frequency response goes from zero to full at the low end and from full to zero at the high end of the passband)  depends on the number of Poles. If you don't know what poles are, think of them as filter elements. Adding more elements to the filter makes it more precise. The improvement drops off for each new pole, and the finite precision of computer arithmetics sets an absolute limit at about 50 poles. In most cases, there is little point to going beyond 40 poles.

Use the Gain box to set an overall amplification factor for the filter.

Selecting Left or Right causes only one channel to be filtered. The Target channel setting is ignored when filtering monophonic files.

Click OK to confirm the new settings. If the dialog was called up from the main window, Band pass will be executed.

Click [image] to abort and revert to the old settings.


Band stop

Band stop is used to remove frequencies inside a given frequency band from the selected section. It's the opposite of Band pass.

Use Notch to remove a narrow set of frequencies. See also High pass, Low pass, Resonate, Equalize and Convolve.

Right-click Band stop to open its settings dialog:

The graph shows the frequency response of the filter. The vertical line marks the center of the stopband. The cursor position display in the graph's upper left corner is read as "frequency : amplification factor".

If the dialog is called up from Acid WAV's main window when a file is loaded, frequencies are expressed in Hertz (as in the picture). If the dialog is called up from the script editor or from the main window when no file is loaded, frequencies are normalized: the sampling rate is then 1.0 and the Nyqvist frequency (the highest reproducible frequency, and therefore the right end of the graph) is 0.5.

The center of the stopband can be set by clicking the graph or directly in the Center box. The width is set in the Width box.

The narrowness of the transition bands (i.e. how fast the frequency response goes from full to zero at the low end and from zero to full at the high end of the stopband)  depends on the number of Poles. If you don't know what poles are, think of them as filter elements. Adding more elements to the filter makes it more precise. The improvement drops off for each new pole, and the finite precision of computer arithmetics sets an absolute limit at about 50 poles. In most cases, there is little point to going beyond 40 poles.

Use the Gain box to set an overall amplification factor for the filter.

Selecting Left or Right causes only one channel to be filtered. The Target channel setting is ignored when filtering monophonic files.

Click OK to confirm the new settings. If the dialog was called up from the main window, Band stop will be executed.

Click [image] to abort and revert to the old settings.


Resonate

Resonate is used to sweep a lowpass filter over the selected section while emphasizing frequencies around the moving cutoff value.

Resonator sweeps are among the most common "analog" synth effects.

See also High pass, Low pass, Band pass, Band stop, Equalize and Convolve.

Right-click Resonate to open its settings dialog:

The graph shows the frequency response of the filter for the Start and End settings. The vertical lines mark the cutoff frequencies (labeled S for Start, E for End). The cutoff frequency for the selected tab is highlighted.

If Loop back is unchecked, the filter will be swept from the Start settings (at the first sample in the selected file section) to the End settings (at the last sample in the selected file section). All settings are linearly interpolated from Start to End. If Loop back is checked, the filter will reach the End settings halfway through the selected file section and then evolve back toward the Start settings.

For the selected tab,

•	the center frequency can be set by clicking the graph or directly in the Center box,

•	the amplification factor at the cutoff frequency is set in the Peak gain box, and

•	the amplification factor at 0 Hz is set in the Zero gain box.

The cursor position display in the graph's upper left corner is read as "frequency : amplification factor".

If the dialog is called up from Acid WAV's main window when a file is loaded, frequencies are expressed in Hertz (as in the picture). If the dialog is called up from the script editor or from the main window when no file is loaded, frequencies are normalized: the sampling rate is then 1.0 and the Nyqvist frequency (the highest reproducible frequency, and therefore the right end of the graph) is 0.5.

Selecting Left or Right causes only one channel to be filtered. The Target channel setting is ignored when filtering monophonic files.

Click OK to confirm the new settings. If the dialog was called up from the main window, Resonate will be executed.

Click [image] to abort and revert to the old settings.


Notch

Notch is used to remove a narrow set of frequencies from the selected section.

Use Band stop to remove a frequency band. See also High pass, Low pass, Band pass, Resonate, Equalize and Convolve.

Right-click Notch to open its settings dialog:

The graph shows the frequency response of the filter. The vertical line marks the center of the frequency range to remove. The cursor position display in the graph's upper left corner is read as "frequency : amplification factor".

If the dialog is called up from Acid WAV's main window when a file is loaded, frequencies are expressed in Hertz (as in the picture). If the dialog is called up from the script editor or from the main window when no file is loaded, frequencies are normalized: the sampling rate is then 1.0 and the Nyqvist frequency (the highest reproducible frequency, and therefore the right end of the graph) is 0.5.

The center frequency can be set by clicking the graph or directly in the Center box.

The width of the frequency range to be removed is controlled with the Resolution box. The highest resolution setting (corresponding to minimum width) is 99.

Use the Gain box to set an overall amplification factor for the filter.

Selecting Left or Right causes only one channel to be filtered. The Target channel setting is ignored when filtering monophonic files.

Click OK to confirm the new settings. If the dialog was called up from the main window, Notch will be executed.

Click [image] to abort and revert to the old settings.


Equalize

Equalize is used to modify the amplitudes of up to 10 x 2 independent frequency bands in the selected section.

See also High pass, Low pass, Band pass, Band stop, Resonate, and Notch.

Right-click Equalize to open its settings dialog:

Use the gauges to set the desired amplification. The button above each gauge resets the gauge to 0 dB (no volume change).

Resets all bands in the channel to 0 dB.

Copies the left channel settings to the right channel.

Copies the right channel settings to the left channel.

  is used to select equalization algorithm:

•	When FFT is depressed, the sound is decomposed using a Fast Fourier Transform. The main disadvantage of this option is that the FFT algorithm can introduce ripples at the ends of sections which start or end abruptly.

•	When FFT is not depressed, the sound is decomposed using a bank of bandpass filters (low- and highpass filters at the low and high frequency ends). This is how hardware equalizers work. The main disadvantage of this option is that it can introduce larger phase delays than the FFT algorithm.

Selecting Left or Right causes only one channel to be equalized. The Target channel setting is ignored when equalizing monophonic files.

You can save all settings to (and restore them from) your own equalizer Patches.

Click OK to confirm the new settings. If the dialog was called up from the main window, Equalize will be executed.

Click [image] to abort and revert to the old settings.


Convolve

Convolve is used to run the selected section through a FIR (Finite Impulse Response) filter approximating a user-defined frequency response.

See also High pass, Low pass, Band pass, Band stop, Resonate, and Equalize.

Right-click Convolve to open its settings dialog:

The desired frequency response is entered and edited in the graph. You also have the editor buttons in the bottom box at your disposal.

The actual frequency response is displayed in red. Apart from editing the desired response, you can affect it in two ways:

•	Choose a different Window type to change the tradeoff between resolution (how closely the response curve follows sharp breaks in the desired curve) and smoothness. In the picture, a Square window is being used: this gives the highest resolution, but also the largest amount of rippling, as illustrated at the left end of the graph.

•	Incrase the number of Points. This is the size of the FIR filter built by Acid WAV. A larger number of points allows a better (but also slower) filter to be created. The improvement drops off as more points are added, reflecting the fundamental limitations of FIR filters. The desired frequency response can usually not be reproduced exactly even with an inifinite number of points; in practice, even the max 2048 points allowed by Convolve are almost always overkill.

If the dialog is called up from Acid WAV's main window when a file is loaded, frequencies are expressed in Hertz (as in the picture). If the dialog is called up from the script editor or from the main window when no file is loaded, frequencies are normalized: the sampling rate is then 1.0 and the Nyqvist frequency (the highest reproducible frequency, and therefore the right end of the graph) is 0.5.

Selecting Left or Right causes only one channel to be filtered. The Target channel setting is ignored when filtering monophonic files.

You can save all settings to (and restore them from) your own convolution Patches.

Click OK to confirm the new settings. If the dialog was called up from the main window, Convolve will be executed.

Click [image] to abort and revert to the old settings.


Vocode

Vocode is used to impose the formant envelope of the clipboard (the modulator) on the selected section (the carrier).

The most common application is to let a human voice modulate a music instrument, making the instrument "speak" (listen to Kraftwerk's "Man Machine" for some classic examples). Many interesting effects can also be created with instruments serving both as carriers and as controllers. For instance, modulating a bass line with the accompanying kick and snare drums can add a lot of rhythmic life to a piece.

Right-click Vocode to open its settings dialog:

In order to understand this dialog, you need to understand how a vocoder works.

A vocoder is essentially a bank of bandpass filters controlling another bank of bandpass filters. The first bank slices up the modulator into frequency bands. The second filter bank slices up the carrier into frequency bands. Each modulator band is fed into a separate envelope follower, and the output of the envelope follower (the momentaneous amplitude of the controller band) is used to amplify (amplitude modulate) the corresponding carrier band.

The grid at the center of the Vocode dialog is where you specify how your modulator and carrier should be sliced. Each column describes a modulator band controlling a carrier band. Center and Width can be set independently for modulator and carrier, so there is nothing preventing you from matching up two completely different spectral regions.

IMPORTANT: 	The modulator is converted to the carrier's format before processing. Therefore, the carrier's sampling rate also determines which modulator filter bands are below the Nyqvist frequency (the highest reproducible frequency).

The Gain parameter allows you to amplify each carrier band by a constant factor. This is like having an equalizer cascaded after (and tuned to) the vocoder.

The number of modulator (and hence of carrier) Bands is set in the Modulator analysis box, where you also set the time resolution (Time res.) of the envelope followers. This value should not be too small (less than a few milliseconds): you want to modulate the carrier with an envelope, not with the amplitudes of individual samples.

In the grid display, you can see if a band column is enabled by looking at its header. If the column is disabled, its number is shown between parentheses, as in "(9)".

Enter a Center value for the modulator band in the rightmost enabled column and click Equidistant (modulator) to get a set of evenly spaced modulator bands covering the spectrum up to that value.

Enter a Center value for the carrier band in the rightmost enabled column and click Equidistant (carrier) to get a set of evenly spaced carrier bands covering the spectrum up to that value.

The Poles box is used to control the number of poles per bandpass filter, i.e. the frequency resolution of the filter banks. Generally speaking, a vocoder using narrow bands requires more poles than one using wide bands. This parameter (as well as Center and Width) works just like its counterpart in the Band pass dialog, so you can view the frequency response for each band there.

When the dialog is called up from the main window, the time resolution is expressed in the main window's time unit.

When the dialog is called up from the script editor, the time resolution is expressed in milliseconds.

Acid WAV's vocoder adds yet another twist to the basic vocoder concept by allowing the modulator to be highpass filtered and mixed into the final result. This can make speech modulating a music instrument more intelligible. You control this feature in the Modulator mix-in box. To shut it off, simply set the Gain to zero. The number of poles used for the bandpass filters does not affect the highpass filter.

Selecting Left or Right causes only one channel to be vocoded. The Target channel setting is ignored for monophonic files.

You can save all settings to (and restore them from) your own vocoder Patches.

Click OK to accept the new settings. If the dialog was called up from the main window, Vocode will be executed.

Click [image] to abort and revert to the old settings.


Resample

Resample is used to change the frequency of the selected section by a constant or linearly varying factor. Use Modulate for more advanced frequency modulation.

Resampling modifies the duration of the sound by the inverse of the applied frequency factor. See Pitch shift for an alternative which leaves the sound's duration unchanged.

Right-click Resample to open its settings dialog:

The frequency factor is linearly interpolated from the Start value (at the first sample in the selected section) to the End value (at the last sample in the selected section). The graphic keyboard can be used to enter Start factors corresponding to multiples of semitone shifts (useful e.g. when creating patches for samplers). Use the x 2 and  / 2 buttons to shift the Start factor by a full octave.

Click [image] to copy the Start factor to the End box.

Selecting Left or Right causes only one channel to be resampled. The resulting difference in duration is compensated by padding the shorter channel with silence, leaving the overall file length unchanged.

The Target channel setting is ignored for monophonic files.

Click OK to confirm the new settings. If the dialog was called up from the main window, Resample will be executed.

Click [image] to abort and revert to the old settings.


Modulate

Modulate is used to impose a variable frequency factor on the selected section. Use Resample for constant or linear frequency changes.

Right-click Modulate to open its settings dialog:

The envelope shape for the frequency factor is entered and edited in the graph. You also have the editor buttons in the bottom box at your disposal.

Use the Y scale box to set the overall scale for the frequency factor.

By default, envelope values between nodes are computed by linear interpolation. If a button in the Interpolation box is depressed, two envelope curves will be displayed: the usual, linearly interpolated one (in black) and the selected, non-linear one actually imposed on the data (in red). You can choose between five different types of non-linear interpolation.

The cursor position display in the upper right corner of the Interpolation box is read as "normalized position : frequency factor" (time positions are normalized, i.e. 0.00 denotes the start and 1.00 the end of the selected section).

Selecting Left or Right causes only one channel to be modulated. The resulting difference in duration is compensated by padding the shorter channel with silence, leaving the overall file length unchanged.

The Target channel setting is ignored for monophonic files.

You can save all settings to (and restore them from) your own modulation Patches.

Click OK to accept the new settings. If the dialog was called up from the main window, Modulate will be executed.

Click [image] to abort and revert to the old settings.


Pitch shift

Pitch shift is used to change the frequency of the selected section while leaving its duration unchanged.

Right-click Pitch shift to open its settings dialog:

Use the Frequency factor box to set the amount of pitch shifting. Values between 0.5 (causing the frequency to be reduced by half) and 2.0 (causing the frequency to be doubled) are allowed. The graphic keyboard can be used to enter frequency factors corresponding to multiples of semitone shifts (useful e.g. when creating patches for samplers).

The Overlapping parameter determines the amount of cross-fading between successive sound chunks (like all functions, the pitch shifter reads and writes sound data in chunks a few kB in length). A setting of 1 / 1 means that the first half of each chunk is cross-faded with the second half of the previous chunk, making all chunks (except for the first and the last one) completely cross-faded with other chunks. A setting of 1 / 2 means that the first and the last quarter of each chunk are cross-faded with other chunks, leaving the central half untouched, and so on. More overlapping tends to improve the result by smoothing out the transition between chunks. It also increases the computation time.

Selecting Left or Right causes only one channel to be pitch-shifted. The Target channel setting is ignored for monophonic files.

Click OK to confirm the new settings. If the dialog was called up from the main window, Pitch shift will be executed.

Click [image] to abort and revert to the old settings.


Reduce noise

Reduce noise is used to subtract the frequency components in the clipboard from the selected section.

The most common application (and the reason for the name) is the removal of background noise (sampled into the clipboard with Copy from a silent section in the file). However, frequency subtraction can also be used to create interesting effects. In principle, any sound can be sculpted out of white noise using this method (subtractive synthesis).

Right-click Reduce noise to open its settings dialog:

The Reduction level can be regarded as an amplification factor applied to the clipboard prior to subtraction. At 100%, the frequency components in the clipboard are fully subtracted from the selected section.

Selecting Left or Right causes only one channel to be affected. The Target channel setting is ignored for monophonic files.

Click OK to confirm the new settings. If the dialog was called up from the main window, Reduce noise will be executed.

Click [image] to abort and revert to the old settings.


Synthesizing new sounds

The Synthesis group contains the following functions:

•	Draw wave

•	Additive synth

•	Analog synth

•	FM synth

•	Karplus-Strong algorithm


Draw wave

Draw wave is used to synthesize a user-defined waveform. The standard insertion rules apply.

Right-click Draw wave to open its settings dialog:

The waveform is entered and edited in the graph. You also have the editor buttons in the bottom box at your disposal.

What you draw in the graph is one cycle. Acid WAV takes care of repeating it to create a sound of the requested Duration and Frequency.

The graphic keyboard can be used to enter frequencies as notes (useful e.g. when creating patches for samplers). Use the x 2 and  / 2 buttons to shift the frequency value by a full octave.

When the dialog is called up from the main window, the duration is expressed in the main window's time unit.

When the dialog is called up from the script editor, the duration is expressed in milliseconds.

The cursor position display in the upper right corner of the Interpolation box is read as "normalized time position : normalized sample value". The time position is normalized to the duration of one cycle (i.e. the wavelength): 0.0 is the start of the cycle, 1.0 is the end. Sample values are normalized to the range -1.0 to 1.0 so as to be independent of the file format.

Use the Gain box to set the (normalized) amplitude scale.

By default, sample values between nodes are computed by linear interpolation. If a button in the Interpolation box is depressed, two  waveforms will be displayed: the usual, linearly interpolated one (in black) and the selected, non-linear one actually used for synthesis (in red). You can choose between five different types of non-linear interpolation.

You can save all settings to (and restore them from) your own waveform Patches.

Click OK to accept the new settings. If the dialog was called up from the main window, Draw wave will be executed.

Click [image] to abort and revert to the old settings.


Additive synth

Additive synth is used to mix the output from up to eight independent, analog-style oscillators. The standard insertion rules apply.

Right-click Additive synth to open its settings dialog:

The amplitude envelope for each oscillator is entered and edited in the graph. You also have the envelope editor buttons at your disposal.

The cursor position display in the upper right corner of the Amplitude envelope box is read as "normalized time position : normalized amplitude". The time position is normalized: 0.0 is the start of the synthesized sound, 1.0 the end. Amplitude values are normalized to the range 0.0 to 1.0.

Use the Generator box to set the waveform for each oscillator:

Sine wave.

Triangle wave.

Up ramp.

Down ramp.

Square wave.

Noise.

The graphic keyboard in the Frequency box can be used to enter oscillator frequencies as notes (useful e.g. when creating patches for samplers). Use the x 2 and  / 2 buttons to shift the frequency value by a full octave.

The settings for the selected oscillator can be copied to any other oscillator using the arrow button:  (select the target oscillator in the drop-down list).

The levels for all oscillators are set in the Mix box. The OSC button below each gauge maximizes the level for that oscillator.

You can also set an overall amplification factor in the Gain box.

When the dialog is called up from the main window, the sound's Duration is expressed in the main window's time unit.

When the dialog is called up from the script editor, the sound's Duration is expressed in milliseconds.

You can save all settings to (and restore them from) your own additive synth Patches.

Click OK to accept the new settings. If the dialog was called up from the main window, Additive synth will be executed.

Click [image] to abort and revert to the old settings.


Synth envelope buttons
Reverses (time-inverts) the envelope.

Inverts the envelope.

Makes the envelope time-symmetric (a time-symmetric envelope is unaffected by reversal).

Makes the envelope time-antisymmetric (reversing a time-antisymmetric envelope is equivalent to inverting it).

Deletes all but the leftmost and rightmost nodes and arranges those diagonally.


Analog synth

Analog synth is used for the creation of "vintage" synthesizer sounds. The standard insertion rules apply.

Right-click Analog synth to open its settings dialog:

Use the Generator box to set the (unmodulated) waveform for the selected oscillator:

Sine wave.

Triangle wave.

Up ramp.

Down ramp.

Square wave.

Noise.

One cycle of the waveform is displayed in the graph (in green). You can modify it by editing the phase curve also displayed in the graph (in black), either directly or using the editor buttons. (Editing is disabled for noise, since noise will remain noise no matter what you do to its phase curve!)

The cursor position display is read as "normalized time position : normalized phase". Both quantities are normalized to the range 0.0 - 1.0.

Use the Filter box to cascade a resonant lowpass filter after the oscillator. The Resonance setting is the ratio between the gain at the Cutoff frequency and the gain at 0 Hz (1.0), expressed as a percentage. You can visualize the frequency response with the Resonate dialog. Note that when the Resonance is 0%, the filter reduces to plain lowpass.

The graphic keyboard in the Frequency box can be used to enter oscillator frequencies as notes (useful e.g. when creating patches for samplers). Use the x 2 and  / 2 buttons to shift the frequency value by a full octave.

The settings for the selected oscillator can be copied to the other oscillator using the arrow button in the Copy OSC box.

When the box labeled Sync lock OSC 2 to OSC 1 is checked, oscillator #2 will be restarted every time oscillator #1 begins a new cycle. When the two oscillators have different frequencies, the resulting abrupt clipping of oscillator #2 can heighten the sound's brightness and introduce other interesting effects.

Use the Mix box to set the relative levels of the two oscillators and the Gain box to set the overall amplification factor.

When the dialog is called up from the main window, the sound's Duration is expressed in the main window's time unit.

When the dialog is called up from the script editor, the sound's Duration is expressed in milliseconds.

You can save all settings to (and restore them from) your own analog synth Patches.

Click OK to accept the new settings. If the dialog was called up from the main window, Analog synth will be executed.

Click [image] to abort and revert to the old settings.


About the phase curve
Imagine a piece of magnetic tape containing a recording of exactly one cycle of a periodic signal. Playing the tape in a loop will recreate the sound. The position of the tape recorder's head over the tape is the phase. The phase curve is a plot of this position over the time required to loop through the tape once (i.e. to play one cycle of the sound).

If the phase curve is a straight diagonal line, the tape is running at constant speed. If the slope varies, different parts of the tape are being played at different speeds, and the resulting waveform is undergoing phase distortion. If the slope is positive, the tape is running forward. If the slope is negative, the tape is running backward (the sound is being reversed).

In audio engineering, phase distortion is usually a problem. It was first turned into a feature in the mid-80s, when the engineers at Casio used it in the CZ synthesizer series to create analog-like waveforms from a sine lookup table. You can use Acid WAV to emulate the old CZ sound by selecting sine waves as your Generator waveforms.


Phase curve editor buttons
Reverses (time-inverts) the phase curve

Inverts the phase curve.

Makes the phase curve time-symmetric (a time-symmetric phase curve is unaffected by reversal).

Makes the phase curve time-antisymmetric (reversing a time-antisymmetric phase curve is equivalent to inverting it).

Deletes all but the leftmost and rightmost nodes and arranges those diagonally.


FM synth

FM synth is used to create sound by frequency modulation. The standard insertion rules apply.

Right-click FM synth to open its settings dialog:

The amplitude envelope for each operator is entered and edited in the graph. You also have the envelope editor buttons at your disposal.

The cursor position display in the upper right corner of the Amplitude envelope box is read as "normalized time position : normalized amplitude". The time position is normalized: 0.0 is the start of the synthesized sound, 1.0 the end. Amplitude values are normalized to the range 0.0 to 1.0.

Use the Generator box to set the (unmodulated) waveform for each operator:

Sine wave. This is the only waveform used in most FM hardware, from cheap sound card chips for PCs to Yamaha's classic DX series synthesizers.

Triangle wave.

Up ramp.

Down ramp.

Square wave.

Noise.

The graphic keyboard in the Frequency box can be used to enter operator frequencies as notes (useful e.g. when creating patches for samplers). Use the x 2 and  / 2 buttons to shift the frequency by a full octave.

The Index setting determines the modulation depth for the operator. At 0%, the operator is unmodulated. At 100%, the modulator input is used undiminished. At higher settings, it's amplified.

The settings for the selected operator can be copied to any other operator using the arrow button:  (select the target operator in the drop-down list).

The drop-down list in the Algorithm box lets you choose between 32 FM signal and modulator routes. The algorithms are the same as in Yamaha's DX-7 synthesizer. All operator diagrams are read from top to bottom: in the picture above, operator #3 is modulating itself (with a Feedback setting of 100%) as well as operator #2. Operator #2 is in turn modulating operator #1. Operators #6 and #5 are unmodulated. Their output is mixed and used to modulate operator #4. The final output of the algorithm is obtained by mixing the outputs from operators #1 and #4.

You can set an overall amplification factor for the FM synth in the Gain box.

When the dialog is called up from the main window, the sound's Duration is expressed in the main window's time unit.

When the dialog is called up from the script editor, the sound's Duration is expressed in milliseconds.

You can save all settings to (and restore them from) your own FM synth Patches.

Click OK to accept the new settings. If the dialog was called up from the main window, FM synth will be executed.

Click [image] to abort and revert to the old settings.


Karplus-Strong algorithm

Karplus-Strong is used to synthesize the sound of a plucked string. The standard insertion rules apply.

The principal attraction of this synthesis method is its partial randomness. Two Karplus-Strong sections created with identical settings are unlikely to ever sound exactly the same.

Right-click Karplus-Strong to open its settings dialog:

The graphic keyboard in the Frequency box can be used to enter frequencies as notes (useful e.g. when creating patches for samplers). Use the x 2 and  / 2 buttons to shift the frequency value by a full octave.

The Start and End gain settings are used to control the overall amplitude and decay rate of the sound. A setting of 1.0 yields full amplitude.

The Smoothing level determines how fast high frequency components are attenuated relative to low frequency components. A higher setting results in faster high frequency attenuation.

When the dialog is called up from the main window, the sound's Duration is expressed in the main window's time unit.

When the dialog is called up from the script editor, the sound's Duration is expressed in milliseconds.

Click OK to accept the new settings. If the dialog was called up from the main window, Karplus-Strong will be executed.

Click [image] to abort and revert to the old settings.


Setting program options

Apart from the settings for individual editing and synthesis functions, Acid WAV lets you customize the following items:

•	Max Open / Reset frame

•	Open settings

•	Output format

•	Record settings

•	Temporary storage

•	Horizontal zoom


Max Open / Reset frame

Right-clicking the Reset button brings up the Max Open / Reset frame window:

Use this window to specify the default frame length for the wave display in terms of the currently selected time unit (set in the time unit box). The default frame length is the max size of the file section shown in the wave display when you open a file or click Reset.

Click OK to use the value displayed in the edit box, [image] to cancel.

The default frame length can also be set in the Open Settings window.


Open settings

Right-clicking the [image] button in the toolbar brings up the Open settings window:

Use the Target channel box to specify which channel(s) you want to be loaded (if not both, the other channel is silenced). This setting is ignored for monophonic files.

Use the Max Open / Reset frame to specify the default frame length for the wave display in terms of the currently selected time unit (set in the time unit box). The default frame length is the max size of the file section shown in the wave display when you open a file or click Reset.

The default frame length can also be set in the Max Open / Reset frame window.

Click OK to make the new settings take effect and load a file, [image] to cancel.


Output format

Right-clicking the [image] button in the toolbar brings up the Output format window:

Click PCM WAV to select plain Pulse Code Modulation (i.e. no encoding). This is the basic format supported by all WAV readers and players.

Click Use source format to revert to the original format of the current file. If the file was synthesized or recorded rather than loaded, the original format is plain PCM.

Click an entry in the ACM codec (coder / decoder) list to select an encoded (usually compressed) WAV format.

Click OK to make the new settings take effect and save the current file, [image] to cancel.


About the Audio Compressin Manager (ACM)
Acid WAV uses the Windows Audio Compression Manager to encode and decode WAV files. For a format to be available, an ACM codec supporting that format must be installed on your system. Several codecs come with Windows. Others are installed by third party applications and add-ons such as Netscape Navigator and NetShow (e.g. Microsoft's MPEG Layer-3 codec).

If an ACM codec supports several formats, it is preceded by a [image] icon in the list displayed by the Output format window. Clicking this icon causes all supported formats to be displayed. You can force Acid WAV to use a specific format, but it's usually best to just select a codec and let the Audio Compression Manager pick the most suitable format based on the word size, number of channels and sampling rate of the file.

ACM codecs can usually only handle certain combinations of word size, number of channels and sampling rate. If the codec you have selected can't handle your file, try modifying the file in a way fitting one of the codec's formats, e.g. by converting from 16 to 8 bits or from stereo to mono. See Changing file properties for details.


Record settings

Right-clicking the [image] button in the toolbar brings up the Record settings window:

If the Left or Right buttons are depressed, recording will only be performed on the selected channel (be careful!). The Target channel setting is ignored when recording monophonic files.

When Display clock is On, a time and filesize box is inset in the wave display while recording:

Click OK to make the new settings take effect and start recording, [image] to cancel.


Temporary storage

Right-clicking the history group [image] in the toolbar (even if it's grayed out) brings up the Temporary storage window:

In this context, "temporary storage" essentially means "editor file". Keeping old editor files is what allows Acid WAV to undo and quickly redo operations when you click the buttons in the history group.

Since editor files can get quite large, you will probably want to limit Acid WAV's historical memory. This is done in the History limits box: you can put a limit on the number of undos (i.e. of old edit buffers to keep) or on disk space (either space available for temporary storage or "headroom", i.e. the minimally acceptable amount of free disk space). You can also combine all three kinds of limits.

In the picture above, Acid WAV is limiting its disk usage for temporary storage to 323576 kilobytes.

The Directory box lets you set the disk and directory to use for temporary storage. By default, Acid WAV uses the TEMP subdirectory in its own home directory.


Unselect after horizontal zoom
Right-clicking the Horizontal zoom button in the selection box (even if it's grayed out) causes the following one-item menu to pop up:

Click the item to check / uncheck it. When it's checked, clicking the Horizontal zoom button causes Acid WAV to unselect the marked file section after fitting the frame length to it.


Automating tasks with scripts

Right-clicking [image] in the toolbar brings up Acid WAV's scripts window:

Use this window to

•	create, copy and delete scripts,

•	edit scripts,

•	set the default script,

•	execute scripts.

Closing the Scripts window with OK causes the selected script (if any) to be executed. Click [image] to exit without executing any script.


Definition of scripts
A script is a file which

•	describes a sequence of Acid WAV operations, complete with all relevant settings, and

•	can be executed as a single command.

Using scripts, you can

•	speed up interactive work with your own Acid WAV "functions" (perform frequently recurring and lengthy tasks with just one click) and

•	let Acid WAV run the same operation sequence on multiple files without your intervention (batch processing).

Script files are denoted by the extension AWS (for Acid WAV Script). Although you can keep them wherever you want, the recommended location is Acid WAV's DATA subdirectory.


Creating, copying and deleting scripts
Click

 to create a new script.

When a script is selected, you can also click

 to copy it,

 to delete it and

 to edit it.


Editing scripts

Clicking [image] in the Scripts window causes the selected script to be opened in Acid WAV's script editor:

In this picture, the title bar tells us that we are editing a script called "New". The familiar asterisk trailing the script's name means that the script has been modified. Nothing is written to disk until OK is clicked. Closing the script editor with [image] causes all changes to be discarded.

Do not be confused by the buttons under the File tab! The leftmost button column is the "palette" where you select operations to Add or Insert into the script. It is not used to load or save scripts.

Also note that  the source files used in batch runs are loaded and saved automatically by Acid WAV. There is no need to put Load and Save operations in scripts for that. The primary purpose of Save, Load (and Erase) in scripts is to supplements the clipboard, i.e. for temporay storage of intermediate results.

Anatomy of a script

The central part of the editor contains the script itself.

Each script line consists of

•	a button labeled with the name of an operation and

•	operation-dependent data fields (text for comment lines, start and end positions for most editing and synthesis functions, file names for Load, Save and Erase).

The first two lines in the picture are comments. The third line contains the first actual operation (Copy).

The operation button in each script line fills two purposes:

•	When it's depressed, it tells the editor where to Add and Insert new lines, as well as which line to Remove (all done with the buttons at the bottom of the editor window):

Only one operation button can be depressed (i.e. only one script line can be selected) at any one time. The number of the selected line (if any) is displayed below the title bar, along with the number of the topmost visible line (below the [image] button).

If no line is selected, new lines are Added after the last one and Inserted before the first one; Remove is grayed out.

•	Right-clicking the operation button brings up the line's settings window (if one exists). Each script line has its own settings. Editing those settings does not affect the settings of other script lines or of the main Acid WAV window.

Most settings windows you will see in the script editor are identical to those you are used to from Acid WAV's main window. The only (minor) exceptions are Load, Save and Insert file.

Start and end positions

The script editor inserts start and end position controls for all operations affected by file section selections:

When a script is executed on a whole file (...current WAV or ...WAV list in the Scripts window) the following rules apply:

Sets the start position to the first sample in the file.

Sets the end position to the last sample in the file.

Positions expressed in samples or milliseconds are relative to the first sample in the file.

Positions expressed as percentages are converted to absolute values by multiplication with the file length / 100.

When a script is executed on a section (...current section in the Scripts window, [image] in the toolbar) Acid WAV tries to recompute all positions relative to that section.


Load

Unlike the ordinary Open settings window, the script editor's Load settings window does not have a Max Open / Reset frame box. At runtime, scripts use the main window's max frame setting.

The source files used in batch runs are loaded automatically by Acid WAV. There is no need to put Load operations in scripts for that purpose.

The primary purpose of Save, Load and Erase in scripts is to supplement the clipboard, i.e. for temporay storage of intermediate results.


Insert file

Apart from the controls also contained in the main window's Insert file dialog, the script editor's counterpart also requires that you specify the name of the file to be inserted:

The file name must be specified, but you may leave out the directory. In that case, Acid WAV will look for the file in whatever directory happens to be the default one when the script is executed.


Output format

Unlike the Output format window brought up by right-clicking [image] in Acid WAV's toolbar, the Output format window displayed by the script editor and by the WAV list window does not have a Use source format button.

If you want to Save from within a script, you must specify the destination format explicitly.

The results of batch runs are saved automatically by Acid WAV.There is no need to put Save operations in scripts for that purpose.

The primary purpose of Save, Load and Erase in scripts is to supplement the clipboard, i.e. for temporay storage of intermediate results.


Interpretation of relative positions
Before the first script operation is executed, the following values are saved:

START 	= source section's start position

LENGTH	= source section's length

DISTANCE	= distance from source section's end position to last sample in file

Then...

Sets the start position to START.

Sets the end position to (last sample in file - DISTANCE).

Positions expressed in samples or milliseconds are relative to START.

Start positions expressed as percentages are converted to absolute values using the formula START + ( percentage * LENGTH / 100).

End positions expressed as percentages are converted to absolute values using the formula (last sample in file - DISTANCE) - (LENGTH * (percentage - 100) / 100).


Default script
Selecting a script in the Scripts window makes it the default script, i.e. the script to be executed on the selected file section when you click [image] in the main window's toolbar.


Executing scripts

The fastest way to execute a script is to click [image] in the main window's toolbar. This causes the default script (the currently selected script in the Scripts window) to be executed on the selected file section.

Executing a script on the selected file section means that all start and end positions contained in the script are interpreted relative to the file section rather than to the entire file. For instance, if the script calls for a function to be applied from a start position of 10 ms, this will be interpreted as "from a start position 10 ms into the selected file section".

If there is no default script, clicking [image] causes the Scripts window to open.

The Scripts window lets you execute scripts in three different ways:

•	To execute the script on the selected file section, click ...current section in the Execute on... box, followed by OK.

•	To execute the script on the entire file (i.e. ignoring start and end markers) click ...current WAV  in the Execute on... box, followed by OK.

•	To execute the script on several files (batch processing) click ...WAV list in the Execute on... box, followed by OK.

For the ...WAV list button to be enabled, you must have provided Acid WAV with a list of source files using the WAV list window.

The WAV list window is opened by clicking [image].


WAV list

Clicking [image] in the Scripts window  brings up the WAV list window:

Use the controls in the WAV files box to select files and Add them to the List. Use the controls in the List box to Remove files from the list. Multiple selections are supported (press the Shift key while clicking to select a range; press Ctrl while clicking to select additional individual files).

Use the Destination format box to set the ACM encoding (if any) to be used in the destination files. When Same as source is depressed, destination files are saved using the same encoding as the corresponding source files. Click the ! button or the encoding display to open the Output format window.

Use the Destination directory box to tell Acid WAV where to put destination files. Click [image] to browse the directories on your hard disk.

Leaving the Destination directory edit box blank causes the source directory to be used as the destination directory, too.

Destination files are given the same name as source files, so make sure to use separate source and destination directories unless you want the source files to be overwritten!


Creating new functions with OpenDSP

[Click here for the OpenDSP Reference]

Acid WAV's repertoire is not limited to its built-in functions. Apart from scripts, which combine sequences of existing Acid WAV functions to perform more complicated tasks, you can also create entirely new functions.

While this is also possible with other high-end sound editors, it typically requires advanced knowledge of C/C++ and of a massive API specification, lots of time and - last but not least - an expensive general-purpose development tool like MS Visual C++.

In contrast, Acid WAV comes with an integrated development environment which provides all you need to create, test, modify and distribute new functions. The OpenDSP specification, which describes how your functions and Acid WAV can talk to each other, is quite simple and allows you to accomplish your goals with a minimum of coding. And you don't need to master object-oriented programming in C++ to use it: any ActiveX Scripting language supported by your system, e.g. JScript or VBScript (available as standard in all recent Windows versions) will do. If you've created simple scripts for your web pages, you already know enough programming to create Acid WAV functions.

Creating a new OpenDSP function involves two basic tasks:

•	You need to configure the function's dialog, i.e. the user interface which allows parameters to be passed in to the function, the code to be executed and optional help information to be displayed at the user's request.

•	You need to write and test your OpenDSP function's program code using Acid WAV's integrated development environment.

When your new function is ready, you may also want to package your OpenDSP files (user interface configuration, program code and optional help file) for distribution (or just for easy backup).


Default OpenDSP dialog Help

This is the default Run sheet Help page for OpenDSP function dialogs. It's shown when you click the Help button in the Run sheet of an OpenDSP function dialog which hasn't been configured to display its own help file, when you press F1 (even if the dialog has its own help file) or if the dialog's help file can't be displayed for some reason.

The Run sheet of an OpenDSP dialog works just like the settings dialog of a native Acid WAV function, i.e. it's used to edit input data affecting the function's execution. Depending on the dialog's configuration, some (or even all) controls in the Run sheet may be disabled to indicate that the corresponding input values are ignored by the function.

Click OK to confirm the current settings. If the dialog was called up from the main Acid WAV window, the associated OpenDSP function will be executed. Click [image] to abort.


Configuring your OpenDSP function's dialog

OpenDSP function dialogs are invoked just like the settings dialogs of native Acid WAV functions, i.e. by right-clicking the corresponding button in the main window's function palette or in the script editor.

To configure an OpenDSP function dialog, select its Configure tab sheet:

No changes made here will be finalized until you click OK, either in the Configure sheet or in the Run sheet. Clicking OK in the Configure sheet causes the configuration to be updated and the OpenDSP dialog to be closed. Clicking OK in the Run sheet does the same and (provided that the dialog was invoked from Acid WAV's main window) immediately executes the function with the new settings.

Click  [image] to reset the Configure sheet to its default (empty) values, as shown in the picture. Click  [image] to close the dialog and abandon all changes.

Basic configuration

A bare-bones configuration requires the following fields to be specified:

•	Engine is the ActiveX Scripting engine responsible for intepreting and executing the program code for the function. All current Windows versions come with JScript and VBScript engines already installed, so Acid WAV knows about them by default. Other engines can be added to the list from Acid WAV's integrated development environment.

You can invoke the integrated development environment by clicking [image].

•	Code is the path to the file containing the program code for the function. While you can put your OpenDSP code files wherever you like, the recommended location is the OpenDSP directory under Acid WAV's home directory.

Click the [image] button next to the Code field to select the code file from a standard Windows Open File dialog.

Click [image] to open the code file in Acid WAV's integrated development environment.

•	Method is the entry point in the code file which will be called by Acid WAV when the OpenDSP function is invoked by the user. By default, the method name is "main", but it can be any method identifier allowed by the programming language of the code. Note that this allows you to put the code for multiple OpenDSP functions (each one with its own dialog) in the same code file, making it easier to share common code sections between different functions.

While it's not required, you will normally also want to specify a Title for your function. Any change made in this field is immediately reflected in the function button which you right-clicked to open the OpenDSP dialog, but (as for all other fields) it won't be finalized until you click OK in the Configure sheet.

Run sheet configuration

The Run sheet of an OpenDSP dialog works just like the settings dialog of a native Acid WAV function, i.e. it's used to edit input data affecting the function's execution. Once a minimal configuration has been provided (specifying engine, code file and method) the Run sheet is automatically selected when the user opens the dialog by right-clicking the corresponding function button.

Moving down the Configure sheet, the first setting which directly affects the Run sheet is the Help field. Here, you specify the path to a file which will be displayed when the user clicks the Run sheet's Help button. This could be a Windows Help file, a plain TXT file, a Word DOC file, or any other kind of file which Windows knows how to handle (even Internet URLs will work if Windows is set up properly). If you don't provide some kind of help file, clicking the Run sheet's Help button will cause the default Help page to be shown.

Click the [image] button next to the Help field to select the help file from a standard Windows Open File dialog.

All Run sheets contain a standard Target channel box (which can be used to indicate the stereo channel to operate on) and a Parameters box (which can be used to pass up to 8 floating point numbers to the function code). However, reading and using these settings is entirely up to the function's program code. The Run sheet configuration should reflect which settings are actually used.

For instance, if the function code ignores the Target channel setting (or if you want to "lock" a certain target channel setting), you should disable the Target channel box by unmarking its Enabled on Run sheet checkbox:

Likewise, if no numerical parameters are required to run the function, or if you want to lock the current parameter settings, you should disable the Parameters box by unmarking the checkbox in its upper right corner.

Note that you can also disable individual parameter settings: scroll through the parameters using the spin buttons  [image] in the Parameters box and use the checkbox next to it.

Each of the fields in the Parameters box can be edited individually for the selected parameter:

•	Name is the descriptive label displayed on the Run sheet, in front of the parameter's edit box.

•	Decimals is an integer between 0 and 10 denoting the precision with which the parameter value is displayed. 0 means the parameter is an integer, 10 that you're probably doing something wrong (such high precision should not be necessary!).

•	Default is the parameter value which will be passed to the function unless otherwise specified. Note that Acid WAV updates the defaults for each function according to the latest settings every time the function is invoked. You can therefore trust the default value set here to remain unchanged only if you prevent the user from editing it on the Run sheet, i.e. if you disable the parameter.

•	Step is the (absolute) change in the parameter value caused by clicking the spin buttons next to the parameter's edit box on the Run sheet.

•	Min is the lowest allowed value for the parameter.

•	Max is the highest allowed value for the parameter.


Using POD (Packed OpenDSP) files

What would you do if you wanted to move an OpenDSP function from one button to another? Or, even worse, from one PC to another?

You could of course read off the configuration from the source dialog's Configure sheet and painstakingly recreate it manually in the destination dialog. If moving to another PC, you would also have to copy the code file and the optional Run sheet help file and modify the file paths in the new configuration accordingly.

Or you could let Acid WAV do the all work for you by using a POD (Packed OpenDSP) file.

A POD combines the configuration data, program code and help file for an OpenDSP function into a single file, which can then be transferred to and unpacked automatically on any system running Acid WAV. POD files are therefore the vehicles of choice for backing up and moving OpenDSP functions around, whether between buttons or between different PCs.

Unpacking a POD file

Bring up the OpenDSP function dialog for the destination button (i.e. the button to which you want to assign the unpacked function) and select the (Un)pack tab sheet:

POD files are unpacked using the controls in the Unpack distribution file box.

You can unpack the code and (optional) help file into any directory. Click [image] next to the Code dir field to select a new destination directory for the code file (this field can't be edited manually; the destination directory must exist). The Help dir field works quite analogously.

While you can put your code and help files anywhere, the recommended location is the OpenDSP directory under Acid WAV's home directory. The primary reason for specifying different destinations is to prevent exisiting files from being overwritten in case of name conflicts.

When you're ready, click [image] to bring up a standard Windows Open File dialog.

Select the POD file to unpack and click Open. If the POD's creator left any comments for you to see (as described in the next section) they will be shown in a message dialog like this:

Click OK to continue.

If all goes well, the files will be unpacked and you will be returned to the OpenDSP dialog's Configure sheet to review the new settings. Click OK in the Configure sheet to accept the new configuration. You can also edit the configuration or abort and revert to the previous settings as described in the section on configuring OpenDSP dialogs.

Special case: automatic unpacking of POD files

If you ever clear all your OpenDSP function dialogs and want them to stay clear, remove all POD files from Acid WAV's OpenDSP directory!

When all OpenDSP dialogs are unassigned, Acid WAV will automatically unpack any POD files it finds in the OpenDSP directory at startup.

Creating a POD file

Bring up the OpenDSP dialog for the function which you want to pack and select the (Un)pack tab sheet.

Use the edit box under Create packed distribution file to enter any comments which you want to be displayed when the POD file is unpacked. If you don't want any comments to be displayed, leave this edit box empty.

When you're ready, click [image] to bring up a standard Windows Save File dialog.

Enter the name of your new POD (the name of the code file is suggested by default) and click Save. If all goes well, you will see the following message:

The POD file is now ready for distribution.


The OpenDSP development environment

[Click here for the OpenDSP Reference]

Acid WAV's OpenDSP IDE (Integrated Development Environment) is used to create, test and modify the program code of OpenDSP functions. It's also used to add ActiveX Scripting egines to (and remove them from) Acid WAV.

Please read the following topic first:

Getting to know the OpenDSP IDE

Once you've done so, you know just about everything you need in order to start using the IDE. To fill in the gaps, browse through the IDE window's menu and try the available commands.

However, whatever you do, do not touch the Engine menu until you've read the following topic:

Managing ActiveX Scripting engines


Getting to know the OpenDSP IDE

The OpenDSP IDE is invoked by clicking [image] in the Configure sheet of an OpenDSP dialog.

Several parameters are passed from the dialog to the IDE at startup:

•	If an ActiveX Scripting engine is selected in the OpenDSP dialog, the IDE attempts to connect to that engine. If no engine is selected, the IDE tries to connect to the engine used in the previous session.

•	If a program code file is specified in the OpenDSP dialog, the IDE attempts to load that file into the code editor.

•	If a method name is specified in the OpenDSP dialog, it becomes the IDE's default method name (see below).

•	The state of the Target channel buttons and the numerical input parameters specified in the OpenDSP dialog's Run sheet are available to the code and to the IDE through the indata object, as described in the OpenDSP Reference.

Here's an example of what the IDE might look like immediately after startup:

The parent OpenDSP dialog of this IDE window was configured to call the method "main" in a code file called "hello.js", to be executed by the "JScript" engine.

Going through the picture from top to bottom...

•	The name of the code file ("hello.js") is shown in the window's title bar. As usual in Acid WAV, making changes will cause an asterisk to be appended to the filename ("hello.js*") until you save your work.

•	The default method's name ("main") is shown in the drop-down list below the window's menu bar. Clicking the arrow button next to the list will cause this method to be executed. For good measure, you can also trigger execution of the default method by clicking Engine | Run in the menu, by pressing F9, by double-clicking the method name in the list or by pressing Enter when the list has focus.

The IDE keeps the latest 20 executed, unique method names in the list (also between sessions).

•	The code file is loaded and ready to be modified in the code editor below the drop-down list.

Note the syntax highlighting. Not all ActiveX Scripting engines support this feature (since the IDE is language-neutral, it must rely on the engine to tell it what's an operator, what's a constant and so on, and not all engines provide this information) but if it's available, you can customize it from the Fonts menu. The IDE maintains a separate highlighting scheme for each engine.

Occasionally, the engine might get confused when you're editing a piece of code. If the syntax highlighting starts looking funny, click Edit | Highlight in the menu or press Ctrl-H to force a refresh.

•	The name of the ActiveX Scripting engine ("JScript") is shown below the code editor, as part of a command-line prompt where you can enter expressions for interactive execution and evaluation (just type your expression after the prompt and press Enter). This can be a very useful debugging tool. Among other things, it allows you to query OpenDSP interface object properties and to execute OpenDSP interface methods.

Note that the command-line field can be resized by dragging the bar which separates it from the code editor. When you start using interactive execution, you will probably want to see more lines than the single one shown in the picture.

•	The left panel in the window's status bar shows that the ActiveX Scripting engine is ready to execute the code ("Connected"). The engine's current state is always displayed in this panel. The right panel is used to display miscellaneous information about code execution.

If you got this far, you know just about everything you need to start using the IDE. To fill in the gaps, browse through the IDE window's menu and try the available commands.

However, whatever you do, do not touch the Engine menu until you've read the following topic:

Managing ActiveX Scripting engines


Managing ActiveX Scripting engines

The OpenDSP specification and IDE are language-neutral, i.e. they are not tied to a specific programming language. Any ActiveX Scripting language will do, as long as its implementation satisfies a minimal list of requirements (most importantly, COM object support and interactive execution).

Understanding ActiveX Scripting engines

The implementation of ActiveX Scripting languages is encapsulated in ActiveX Scripting engines.

You can think of ActiveX Scripting egines as Windows plug-ins, or installable modules. When you install an ActiveX Scripting engine on a Windows system, it becomes possible for any application running on that system to connect to the engine and let it execute program code. Applications which connect to ActiveX Scripting engines in this manner are known as ActiveX Scripting hosts. Acid WAV is such a host.

All recent Windows releases include engines for JScript (Microsoft's extended implementation of the European Computer Manufacturer's Association script language specification, or ECMAscript for short, which in turn inherited its basic features from JavaScript) and for VBScript (a partial implementation of Visual Basic), also freely available for users of older releases of Windows 95 and NT. Additional engines supporting other languages are available from third parties, e.g. ActiveState's free PerlScript engine.

The Engine menu

With the exception of syntax highlighting, all IDE commands related to ActiveX Scripting engines are available from the Engine menu:

The top items list all ActiveX Scripting engines known to Acid WAV (here, the default JScript and VBScript engines). The currently connected engine is marked. Clicking another item in this list causes the current engine to be disconnected and a new connection to be established to the selected engine.

Since the engine is responsible for maintaining runtime status information, including variables (but excluding the OpenDSP interface objects, which are maintained by Acid WAV), selecting a new engine also causes an implied Reset. Click Reset to clear all runtime status information (again, except for the OpenDSP interface objects) without switching to a new engine. Note that this also causes the command-line box below the code editor to be cleared.

The last command in the menu should not require any explanation: it causes the default method in the code editor to be executed, as explained in the IDE overview.

The three commands above Run are the dangerous ones! They are used to add, delete and edit  Acid WAV's engine records.

•	Click Delete to disconnect the currently selected engine and remove it from the list of available engines.

This a very dangerous command! Once removed from the list, the engine is no longer available anywhere in Acid WAV, and any OpenDSP functions configured to use it will cease to work. Also, all settings for the engine (associated filename extensions, syntax highlighting etc.) will be lost.

Note that this command does not cause the engine to be uninstalled from Windows. It just causes Acid WAV to forget all about it.

•	Click Edit to modify the currently selected engine's record.

Note that syntax highlighting is controlled separately, from the Fonts menu.

•	Click Add to tell Acid WAV about a new engine.


Adding a new ActiveX Scripting engine

The Add engine dialog is opened by clicking Add in the OpenDSP IDE's Engine menu:

Please note that this dialog is only used to tell Acid WAV about available ActiveX Scripting engines, not to install them on your system. In other words, new engines should be properly installed under Windows before being added here. Installation instructions should be provided in the manufacturer's documentation, along with the engine's GUID (Globally Unique ID):

•	Engine GUID

Every ActiveX Scripting engine is identified by a GUID, sometimes referred to as its Class ID. For instance, the GUIDs of the standard JScript and VBScript engines are

{F414C260-6AC0-11CF-B6D1-00AA00BBBB58}

(JScript) and

{B54F3741-5B07-11CF-A4B0-00AA004A55E8}

(VBScript). ActiveX Scripting hosts need to know these GUIDs in order to connect to the appropriate engine. Without them, they might find themselves trying to feed JScript code to a VBScript engine, or vice versa.

Once you've deteremined the engine's GUID and entered it in the dialog, the rest is easy.

•	Menu entry is the engine's label in the list heading the IDE's Engine menu.

Note that the ampersand character "&" acts as a special character in this context: in the menu, it turns the next character into an underlined accelerator character, allowing the menu item which contains it to be selected from the keyboard (press Alt and the accelerator character). Enter two ampersands ("&&") to display a plain ampersand in the menu.

•	Description is the equivalent of Menu entry in just about all other contexts. It's used to identify the engine in the IDE's command-line prompt, in the engine lists of OpenDSP function dialogs, in various messages etcetera.

•	File filter determines which files are shown in Open File and Save File dialogs for code files associated with the engine. Multiple filen types can be combined using semicolons, as in "*.pl; *.pls" (which would make an appropriate filter for ActiveState's PerlScript engine).

Click OK to add the engine to Acid WAV's list. Click [image] to abort, leaving the list of availabe engines unchanged.

Once the engine has been added, you can select it in the IDE's Engine menu and proceed to customize its syntax highlighting scheme using the IDE's Fonts menu (provided of course that the engine supports syntax highlighting - not all do).


Editing ActiveX Scripting engine records

The Edit engine record dialog is opened by clicking Edit in the OpenDSP IDE's Engine menu (an engine must be currently selected in the IDE for this command to be available):

As when adding new engines, keep in mind that this dialog only affects Acid WAV. Engines should be properly installed under Windows before you start telling Acid WAV about them.

Also note that syntax highlighting for the currently selected engine is set up separately, from the OpendDSP IDE's Fonts menu.

The available fields are:

•	Engine GUID

Every ActiveX Scripting engine is identified by a GUID, sometimes referred to as its Class ID. For instance, the GUIDs of the standard JScript and VBScript engines are

{F414C260-6AC0-11CF-B6D1-00AA00BBBB58}

(JScript) and

{B54F3741-5B07-11CF-A4B0-00AA004A55E8}

(VBScript). ActiveX Scripting hosts need to know these GUIDs in order to connect to the appropriate engine. Without them, they might find themselves trying to feed JScript code to a VBScript engine, or vice versa.

In essence, modifying this field means changing the target ActiveX Scripting engine. You should rarely, if ever, have to do so. If you have a new engine to add, use the Engine | Add command in the OpenDSP IDE.

•	Menu entry is the engine's label in the list heading the IDE's Engine menu.

Note that the ampersand character "&" acts as a special character in this context: in the menu, it turns the next character into an underlined accelerator character, allowing the menu item which contains it to be selected from the keyboard (press Alt and the accelerator character). Enter two ampersands ("&&") to display a plain ampersand in the menu.

•	Description is the equivalent of Menu entry in just about all other contexts. It's used to identify the engine in the IDE's command-line prompt, in the engine lists of OpenDSP function dialogs, in various messages etcetera.

•	File filter determines which files are shown in Open File and Save File dialogs for code files associated with the engine. Multiple filen types can be combined using semicolons, as in "*.pl; *.pls" (which would make an appropriate filter for ActiveState's PerlScript engine).

Click OK to accept the changes. This also causes an implicit Engine | Reset in the IDE, i.e. the engine is restarted, losing all runtime status information (apart from the OpenDSP interface objects).

Click [image] to abort, leaving the engine record unchanged.


OpenDSP Reference

OpenDSP functions and data are accessed through interface objects created and managed by Acid WAV. Do not try to create or destroy these interface objects explicitly in your code. That's taken care of transparently for you by Acid WAV.

The following interface objects are available to OpenDSP functions:

•	indata

Used to read wave display settings, input parameters and input sound data.

•	outdata

Used to control wave display settings and to read/write output sound data.

•	clipdata

Provides read/write access to Acid WAV's clipboard.

•	acidshell

Provides basic message presentation and user querying support.

•	acidconst

Provides access to constants used with the other objects.


indata interface

[Click here for the OpenDSP Reference index]

The indata interface is used by OpenDSP functions to read wave display settings, input parameters and input sound data.

All fields in this interface are read-only properties:

rate	The input WAV's sampling rate.

bits	The input WAV's word size.

channels	The number of channels in the input WAV.

last	The last sample's position in the input WAV.

top	The highest sample value supported by the input WAV's word size.

bottom	The lowest sample value supported by the input WAV's word size.

silence	The "silence" sample value for the input WAV's word size.

start	The start position of the selected section in the input WAV.

end	The end position of the selected section in the input WAV.

cross	The cross-hair's vertical position in the input wave display.

viewstart	The first visible sample position in the intput wave display.

viewend	The last visible sample position in the output wave display.

doleft	True iff the Left or the Both button is depressed in the OpenDSP dialog.

doright	True iff the Right or the Both button is depressed in the OpenDSP dialog.

dochannel	Like doleft and doright, by channel number.

parameter	The numerical parameters set by the user in the OpenDSP dialog.

left	The input WAV's left channel, by sample position.

right	The input WAV's right channel, by sample position.

sample	Like left and right, by channel number.


indata.rate
long indata.rate

readonly property

Returns the sampling rate of the input WAV in Hertz (1 to 100 000).

Returns -1 (acidconst.ERROR_NOT_READY) if there is no input WAV.

See also indata.bits, indata.channels, indata.last.


indata.bits
long indata.bits

readonly property

Returns the word size of the input WAV (8 or 16 bits).

Returns -1 (acidconst.ERROR_NOT_READY) if there is no input WAV.

See also indata.rate, indata.channels, indata.last.


indata.channels
long indata.channels

readonly property

Returns the number of channels in the input WAV (1 or 2).

Returns -1 (acidconst.ERROR_NOT_READY) if there is no input WAV.

See also indata.rate, indata.bits, indata.last.


indata.last
long indata.last

readonly property

The position (measured in samples) of the last sample in the input WAV.

The first position in a WAV file is 0, so indata.last = (number of samples in the input WAV) - 1.

Returns -1 (acidconst.ERROR_NOT_READY) if there is no input WAV.

See also indata.rate, indata.bits, indata.channels.


indata.top
long indata.top

readonly property

Returns the highest sample value supported by the input WAV's word size (255 for an 8 bit WAV, 32767 for a 16 bit WAV).

Returns 0 if there is no input WAV.

See also indata.bottom, indata.silence.


indata.bottom
long indata.bottom

readonly property

Returns the lowest sample value supported by the input WAV's word size (0 for an 8 bit WAV, -32768 for a 16 bit WAV).

Returns 0 if there is no input WAV.

See also indata.top, indata.silence.


indata.silence
long indata.silence

readonly property

Returns the "silence" sample value (halfway between indata.top and indata.bottom) for the input WAV's word size (128 for an 8 bit WAV, 0 for a 16 bit WAV).

Returns 0 if there is no input WAV.


indata.start
long indata.start

readonly property

The start position (measured in samples) of the selected section in the input wave display.

The first position in a WAV file is 0.

Returns 0 if no start position is marked in the wave display.

Returns -1 (acidconst.ERROR_NOT_READY) if there is no input WAV.

See also indata.end, indata.cross, indata.viewstart, indata.viewend.


indata.end
long indata.end

readonly property

The end position (measured in samples) of the selected section in the input wave display.

The first position in a WAV file is 0.

Returns indata.last if no end position is marked in the wave display.

Returns -1 (acidconst.ERROR_NOT_READY) if there is no input WAV.

See also indata.start, indata.cross, indata.viewstart, indata.viewend.


indata.cross
long indata.cross

readonly property

The cross-hair's vertical position in the input wave display.

Returns 0 if there is no input WAV.

Returns indata.silence if no start position is marked in the input wave display.

See also indata.start, indata.end, indata.viewstart, indata.viewend.


indata.viewstart
long indata.viewstart

readonly property

The first visible sample position (measured in samples) in the input wave display.

The first position in a WAV file is 0.

Returns 0 if there is no input WAV.

See also indata.start, indata.end, indata.cross, indata.viewend.


indata.viewend
long indata.viewend

readonly property

The last visible sample position (measured in samples) in the input wave display.

The first position in a WAV file is 0.

Returns 0 if there is no input WAV.

See also indata.start, indata.end, indata.cross, indata.viewstart.


indata.doleft
VARIANT_BOOL indata.doleft

readonly property

True iff (if and only if) the Left or the Both button is depressed in the OpenDSP dialog's Target channel box.

See also indata.doright, indata.dochannel, indata.parameter.


indata.doright
VARIANT_BOOL indata.doright

readonly property

True iff (if and only if) the Right or the Both button is depressed in the OpenDSP dialog's Target channel box.

See also indata.doleft, indata.dochannel, indata.parameter.


indata.dochannel
VARIANT_BOOL indata.dochannel(long channelNumber)

readonly property

Returns the status of the buttons in theOpenDSP dialog's Target channel box by channel number:

indata.dochannel(0) = indata.doleft

indata.dochannel(1) = indata.doright

Useful when performing identical operations on both channels in a loop.

See also indata.parameter.


indata.parameter
double indata.parameter(long parameterNumber)

readonly property

Returns the numerical parameters set by the user in the OpenDSP dialog, by parameter number.

The first parameter is number 1, the last parameter is number 8.

Returns 0 for any parameter number outside this range.

See also indata.doleft, indata.doright, indata.dochannel.


indata.left
long indata.left(long samplePosition)

readonly property

Returns a sample value from the input WAV's left channel, by sample position (measured in samples).

The first position in a WAV file is 0.

Returns indata.silence for positions preceding 0 or trailing indata.last.

Returns 0 if there is no input WAV.

If an input WAV is monophonic (indata.channels = 1) it's considered to have a left channel but no right channel, so this is also the function to use with monophonic input WAVs.

See also indata.right, indata.sample.


indata.right
long indata.right(long samplePosition)

readonly property

Returns a sample value from the input WAV's right channel, by sample position (measured in samples).

The first position in a WAV file is 0.

Returns indata.silence for positions preceding 0 or trailing indata.last, or if there is no right channel (i.e. if indata.channels does not equal 2).

Returns 0 if there is no input WAV.

See also indata.left, indata.sample.


indata.sample
long indata.sample(long channelNumber, long samplePosition)

readonly property

Returns a sample value from the input WAV by channel number and sample position (measured in samples).

indata.sample(0, samplePosition) = indata.left(samplePosition)

indata.sample(1, samplePosition) = indata.right(samplePosition)

Returns indata.silence for any other channel number.

Useful when performing identical operations on both channels in a loop.


outdata interface

[Click here for the OpenDSP Reference index]

The outdata interface is used by OpenDSP functions to control wave display status and to read/write output sound data.

Methods

create	Creates the output WAV. Must be called first!

close	Closes the output WAV. Must be called if create was called!

setleft	Writes a value to the output WAV's left channel, by sample position.

setright	Writes a value to the output WAV's right channel, by sample position.

setsample	Like setleft and setright, by channel number.

Read/write properties

start	The start position of the selected section in the output wave display.

end	The end position of the selected section in the output wave display.

cross	The cross-hair's vertical position in the output wave display.

viewstart	The first visible sample position in the output wave display.

viewend	The last visible sample position in the output wave display.

Read-only properties

rate	The output WAV's sampling rate.

bits	The output WAV's word size.

channels	The number of channels in the output WAV.

last	The last sample's position in the output WAV.

top	The highest sample value supported by the output WAV's word size.

bottom	The lowest sample value supported by the output WAV's word size.

silence	The "silence" sample value for the output WAV's word size.

left	The output WAV's left channel, by sample position.

right	The output WAV's right channel, by sample position.

sample	Like left and right, by channel number.


outdata.create
long outdata.create(long rate, long bits, long channels)

function

Creates the output WAV with the desired rate (see outdata.rate), bits (see outdata.bits) and channels (see outdata.channels).

Also initializes outdata.start, outdata.end, outdata.cross, outdata.viewstart, outdata.viewend to their default values.

If an output WAV is already open, it's closed and deleted before the new output WAV is created.

Returns 0 (acidconst.ERROR_OK) if the output WAV is succefully created or one of the following error codes:

acidconst.ERROR_INVALID_RATE	rate > 100 000 or rate < 1

acidconst.ERROR_INVALID_BITS	bits not 8 or 16

acidconst.ERROR_INVALID_CHANNELS	channels not 1 or 2

acidconst.ERROR_CANT_CREATE	unable to create new file

acidconst.ERROR_CANT_WRITE	unable to write to new file

acidconst.ERROR_OUT_OF_MEMORY	out of memory

acidconst.ERROR_NOT_READY	unable to initialize file access

If you create an output WAV, you must call outdata.close when you're done with it!

Closing the output WAV is your responsibility.


outdata.close
long outdata.close(VARIANT_BOOL keep)

function

Closes the output WAV.

If keep is true, the output WAV is loaded into the WAV editor, using the current values of outdata.start, outdata.end, outdata.cross, outdata.viewstart, outdata.viewend.

If keep is false, the output WAV is deleted and the WAV editor's status is left unchanged.

Returns 0 (acidconst.ERROR_OK) if the output WAV is succefully closed or one of the following error codes:

acidconst.ERROR_NOT_READY	No output file to close! Did you really open it?

acidconst.ERROR_EMPTY_WAV	You tried to keep an empty file.

acidconst.ERROR_OUT_OF_MEMORY	Out of memory.

acidconst.ERROR_CANT_WRITE	Unable to update the file.

acidconst.ERROR_CANT_LOAD	Unable to load the output WAV into Acid WAV.

acidconst.ERROR_CANT_DELETE	Unable to delete the file.

If you create an output WAV with outdata.create, you must call outdata.close when you're done with it!

Closing the output WAV is your responsibility.


outdata.setleft
long outdata.setleft(long samplePosition, long sampleValue)

function

Writes a sample value to the output WAV's left channel, by sample position (measured in samples).

The first position in a WAV file is 0.

If samplePosition extends beyond the current outdata.last position, the output WAV is padded with outdata.silence up to the desired length.

The sampleValue is automatically limited so that outdata.bottom <= sampleValue <=outdata.top.

If an output WAV is monophonic (outdata.channels = 1) it's considered to have a left channel but no right channel, so this is also the function to use with monophonic output WAVs.

Returns -1 (acidconst.ERROR_NOT_READY) if there is no open output WAV, i.e. before outdata.create and after outdata.close has been called, or if samplePosition < 0.

Returns 0 (acidconst.ERROR_OK) otherwise.

See also outdata.setright, outdata.setsample, outdata.left, outdata.right, outdata.sample.


outdata.setright
long outdata.setright(long samplePosition, long sampleValue)

function

Writes a sample value to the output WAV's right channel, by sample position (measured in samples).

The first position in a WAV file is 0.

If samplePosition extends beyond the current outdata.last position, the output WAV is padded with outdata.silence up to the desired length.

The sampleValue is automatically limited so that outdata.bottom <= sampleValue <=outdata.top.

Returns -1 (acidconst.ERROR_NOT_READY) if there is no open output WAV, i.e. before outdata.create and after outdata.close has been called, if samplePosition < 0 or if there is no right channel in the output WAV (i.e. if outdata.channels is not 2).

Returns 0 (acidconst.ERROR_OK) otherwise.

See also outdata.setleft, outdata.setsample, outdata.left, outdata.right, outdata.sample.


outdata.setsample
long outdata.setsample(long channelNumber, long samplePosition, long sampleValue)

function

Writes a sample value to the output WAV by channel number and sample position (measured in samples).

outdata.setsample(0, samplePosition, sampleValue) = outdata.setleft(samplePosition, sampleValue)

outdata.setsample(1, samplePosition, sampleValue) = outdata.setright(samplePosition, samplevalue)

Returns -1 (acidconst.ERROR_NOT_READY) for any other channel number.

Useful when performing identical operations on both channels in a loop.


outdata.start
long outdata.start

read/write property

The start position (measured in samples) of the selected section in the output wave display.

The first position in a WAV file is 0.

The default value is -1 (acidconst.ERROR_NOT_READY) i.e. no start position is marked in the output wave display.

Attempting to set a start value exceeding outdata.last causes the actual position of the last sample to be used instead.

See also outdata.end, outdata.cross, outdata.viewstart, outdata.viewend.


outdata.end
long outdata.end

read/write property

The end position (measured in samples) of the selected section in the output wave display.

The first position in a WAV file is 0.

The default value is -1 (acidconst.ERROR_NOT_READY) i.e. no end position is marked in the output wave display.

Attempting to set an end value exceeding outdata.last causes the actual position of the last sample to be used instead.

Note that no section can be selected unless a start position preceding or coinciding with the end position is marked (outdata.start <= outdata.end).

See also outdata.cross, outdata.viewstart, outdata.viewend.


outdata.cross
long outdata.cross

read/write property

The cross-hair's vertical position in the output wave display.

The default value is outdata.silence.

Values are automatically limited so that outdata.bottom <= outdata.cross <=outdata.top.

Note that a start position must be marked in the output wave display (outdata.start >= 0) for the cross position to have any meaning.

See also outdata.end, indata.viewstart, indata.viewend.


outdata.viewstart
long outdata.viewstart

read/write property

The first visible sample position (measured in samples) in the output wave display.

The first position in a WAV file is 0. This is also the default value.

Attempting to set a value exceeding outdata.last causes the actual position of the last sample to be used instead.

Setting a value exceeding outdata.viewend causes the viewend value to be updated too, so that outdata.viewend = outdata.viewstart.

See also outdata.start, outdata.end, outdata.cross.


outdata.viewend
long outdata.viewend

read/write property

The last visible sample position (measured in samples) in the output wave display.

The first position in a WAV file is 0.

The default value is -1 (acidconst.ERROR_NOT_READY). Any negative value causes Acid WAV to set outdata.viewend = outdata.last when the output WAV is closed.

Attempting to set a value exceeding outdata.last causes the actual position of the last sample to be used instead.

Setting a (non-negative) value preceding outdata.viewstart causes the viewstart value to be updated too, so that outdata.viewstart = outdata.viewend.

See also outdata.start, outdata.end, outdata.cross.


outdata.rate
long outdata.rate

readonly property

Returns the sampling rate of the output WAV in Hertz (1 to 100 000).

Returns -1 (acidconst.ERROR_NOT_READY) if there is no open output WAV, i.e. before outdata.create and after outdata.close has been called.

See also outdata.bits, outdata.channels, outdata.last.


outdata.bits
long outdata.bits

readonly property

Returns the word size of the output WAV (8 or 16 bits).

Returns -1 (acidconst.ERROR_NOT_READY) if there is no open output WAV, i.e. before outdata.create and after outdata.close has been called.

See also outdata.rate, outdata.channels, outdata.last.


outdata.channels
long outdata.channels

readonly property

Returns the number of channels in the output WAV (1 or 2).

Returns -1 (acidconst.ERROR_NOT_READY) if there is no open output WAV, i.e. before outdata.create and after outdata.close has been called.

See also outdata.rate, outdata.bits, outdata.last.


outdata.last
long outdata.last

readonly property

The position (measured in samples) of the last sample in the output WAV.

The first position in a WAV file is 0, so outdata.last = (number of samples in the output WAV) - 1.

Returns -1 (acidconst.ERROR_NOT_READY) if there is no open output WAV, i.e. before outdata.create and after outdata.close has been called.

See also outdata.rate, outdata.bits, outdata.channels.


outdata.top
long outdata.top

readonly property

Returns the highest sample value supported by the output WAV's word size (255 for an 8 bit WAV, 32767 for a 16 bit WAV).

Returns 0 if there is no open output WAV, i.e. before outdata.create and after outdata.close has been called.

See also outdata.bottom, outdata.silence.


outdata.bottom
long outdata.bottom

readonly property

Returns the lowest sample value supported by the output WAV's word size (0 for an 8 bit WAV, -32768 for a 16 bit WAV).

Returns 0 if there is no open output WAV, i.e. before outdata.create and after outdata.close has been called.

See also outdata.top, outdata.silence.


outdata.silence
long outdata.silence

readonly property

Returns the "silence" sample value (halfway between outdata.top and outdata.bottom) for the output WAV's word size (128 for an 8 bit WAV, 0 for a 16 bit WAV).

Returns 0 if there is no open output WAV, i.e. before outdata.create and after outdata.close has been called.


outdata.left
long outdata.left(long samplePosition)

readonly property

Returns a sample value from the output WAV's left channel, by sample position (measured in samples).

The first position in a WAV file is 0.

Returns outdata.silence for positions preceding 0 or trailing outdata.last.

Returns 0 if there is no output WAV, i.e. before outdata.create and after outdata.close has been called.

If the output WAV is monophonic (outdata.channels = 1), it's considered to have a left channel but no right channel, so this is also the function to use with monophonic output WAVs.

See also outdata.right, outdata.sample, outdata.setleft, outdata.setright, outdata.setsample.


outdata.right
long outdata.right(long samplePosition)

readonly property

Returns a sample value from the output WAV's right channel, by sample position (measured in samples).

The first position in a WAV file is 0.

Returns outdata.silence for positions preceding 0 or trailing outdata.last, or if there is no right channel (i.e. if outdata.channels does not equal 2).

Returns 0 if there is no output WAV, i.e. before outdata.create and after outdata.close has been called.

See also outdata.left, outdata.sample, outdata.setleft, outdata.setright, outdata.setsample.


outdata.sample
long outdata.sample(long channelNumber, long samplePosition)

readonly property

Returns a sample value from the output WAV by channel number and sample position (measured in samples).

outdata.sample(0, samplePosition) = outdata.left(samplePosition)

outdata.sample(1, samplePosition) = outdata.right(samplePosition)

Returns outdata.silence for any other channel number.

Useful when performing identical operations on both channels in a loop.

See also outdata.setleft, outdata.setright, outdata.setsample.


clipdata interface

[Click here for the OpenDSP Reference index]

The clipdata interface is used by OpenDSP functions to read from and write to Acid WAV's clipboard.

Methods

open	Opens the clipboard WAV. Either open or create must be called first!

create	Creates a new clipboard WAV.

close	Closes the clipboard WAV. Mandatory after open and create!

setleft	Writes a value to the clipboard WAV's left channel, by sample position.

setright	Writes a value to the clipboard WAV's right channel, by sample position.

setsample	Like setleft and setright, by channel number.

Read-only properties

rate	The clipboard WAV's sampling rate.

bits	The clipboard WAV's word size.

channels	The number of channels in the clipboard WAV.

last	The last sample's position in the clipboard WAV.

top	The highest sample value supported by the clipboard WAV's word size.

bottom	The lowest sample value supported by the clipboard WAV's word size.

silence	The "silence" sample value for the clipboard WAV's word size.

left	The clipboard WAV's left channel, by sample position.

right	The clipboard WAV's right channel, by sample position.

sample	Like left and right, by channel number.


clipdata.open
long clipdata.open()

function

Opens the current clipboard WAV for read-write access.

If the clipboard WAV is already open, it's closed and then reopened.

Returns 0 (acidconst.ERROR_OK) if theclipboard WAV is succefully opened or one of the following error codes:

acidconst.ERROR_EMPTY_WAV	the clipboard exists but contains no data

acidconst.ERROR_OUT_OF_MEMORY	out of memory

acidconst.ERROR_NOT_READY	unable to initialize (clipboard does not exist?)

If you open a clipboard WAV, you must call clipdata.close when you're done with it!

Closing the clipboard WAV is your responsibility.


clipdata.create
long clipdata.create(long rate, long bits, long channels)

function

Creates a new clipboard WAV with the desired rate (see clipdata.rate), bits (see clipdata.bits) and channels (see clipdata.channels).

If a clipboard WAValready exists, its's deleted before the new clipboard WAV is created.

Returns 0 (acidconst.ERROR_OK) if the clipboard WAV is succefully created or one of the following error codes:

acidconst.ERROR_INVALID_RATE	rate > 100 000 or rate < 1

acidconst.ERROR_INVALID_BITS	bits not 8 or 16

acidconst.ERROR_INVALID_CHANNELS	channels not 1 or 2

acidconst.ERROR_CANT_CREATE	unable to create new file

acidconst.ERROR_CANT_WRITE	unable to write to new file

acidconst.ERROR_OUT_OF_MEMORY	out of memory

acidconst.ERROR_NOT_READY	unable to initialize file access

If you create a clipboard WAV, you must call clipdata.close when you're done with it!

Closing the clipboard WAV is your responsibility.


clipdata.close
long clipdata.close(VARIANT_BOOL keep)

function

Closes the clipboard WAV, deleting it if keep is false.

Returns 0 (acidconst.ERROR_OK) if the clipboard WAV is succefully closed or one of the following error codes:

acidconst.ERROR_NOT_READY	No clipboard file to close! Did you open or create it?

acidconst.ERROR_EMPTY_WAV	You tried to keep an empty file.

acidconst.ERROR_OUT_OF_MEMORY	Out of memory.

acidconst.ERROR_CANT_WRITE	Unable to update the file.

acidconst.ERROR_CANT_DELETE	Unable to delete the file.

If you open or create an output WAV with clipdata.open or clipdata.create, you must call outdata.close when you're done with it!

Closing the clipboard WAV is your responsibility.


clipdata.setleft
long clipdata.setleft(long samplePosition, long sampleValue)

function

Writes a sample value to the clipboard WAV's left channel, by sample position (measured in samples).

The first position in a WAV file is 0.

If samplePosition extends beyond the current clipdata.last position, the clipboard WAV is padded with clipdata.silence up to the desired length.

The sampleValue is automatically limited so that clipdata.bottom <= sampleValue <=clipdata.top.

If a clipboard WAV is monophonic (clipdata.channels = 1) it's considered to have a left channel but no right channel, so this is also the function to use with monophonic clipboard WAVs.

Returns -1 (acidconst.ERROR_NOT_READY) if there is no open clipboard WAV, i.e. before clipdata.open or clipdata.create and after clipdata.close has been called, or if samplePosition < 0.

Returns 0 (acidconst.ERROR_OK) otherwise.

See also clipdata.setright, clipdata.setsample, clipdata.left, clipdata.right, clipdata.sample.


clipdata.setright
long clipdata.setright(long samplePosition, long sampleValue)

function

Writes a sample value to the clipboard WAV's right channel, by sample position (measured in samples).

The first position in a WAV file is 0.

If samplePosition extends beyond the current clipdata.last position, the clipboard WAV is padded with clipdata.silence up to the desired length.

The sampleValue is automatically limited so that clipdata.bottom <= sampleValue <=clipdata.top.

Returns -1 (acidconst.ERROR_NOT_READY) if there is no open clipboard WAV, i.e. before clipdata.open or clipdata.create and after clipdata.close has been called, if samplePosition < 0, or if there is no right channel in the clipboard WAV (i.e. if clipdata.channels is not 2).

Returns 0 (acidconst.ERROR_OK) otherwise.

See also clipdata.setleft, clipdata.setsample, clipdata.left, clipdata.right, clipdata.sample.


clipdata.setsample
long clipdata.setsample(long channelNumber, long samplePosition, long sampleValue)

function

Writes a sample value to the clipboard WAV by channel number and sample position (measured in samples).

clipdata.setsample(0, samplePosition, sampleValue) = clipdata.setleft(samplePosition, sampleValue)

clipdata.setsample(1, samplePosition, sampleValue) = clipdata.setright(samplePosition, sampleValue)

Returns -1 (acidconst.ERROR_NOT_READY) for any other channel number.

Useful when performing identical operations on both channels in a loop.


clipdata.rate
long clipdata.rate

readonly property

Returns the sampling rate of the clipboard WAV in Hertz (1 to 100 000).

Returns -1 (acidconst.ERROR_NOT_READY) if there is no open clipboard WAV, i.e. before clipdata.open or clipdata.create and after clipdata.close has been called.

See also clipdata.bits, clipdata.channels, clipdata.last.


clipdata.bits
long clipdata.bits

readonly property

Returns the word size of the clipboard WAV (8 or 16 bits).

Returns -1 (acidconst.ERROR_NOT_READY) if there is no open clipboard WAV, i.e. before clipdata.open or clipdata.create and after clipdata.close has been called.

See also clipdata.rate, clipdata.channels, clipdata.last.


clipdata.channels
long clipdata.channels

readonly property

Returns the number of channels in the clipboard WAV (1 or 2).

Returns -1 (acidconst.ERROR_NOT_READY) if there is no open clipboard WAV, i.e. before clipdata.open or clipdata.create and after clipdata.close has been called.

See also clipdata.rate, clipdata.bits, clipdata.last.


clipdata.last
long clipdata.last

readonly property

The position (measured in samples) of the last sample in the clipboard WAV.

The first position in a WAV file is 0, so clipdata.last = (number of samples in the clipboard WAV) - 1.

Returns -1 (acidconst.ERROR_NOT_READY) if there is no open clipboard WAV, i.e. before clipdata.open or clipdata.create and after clipdata.close has been called.

See also clipdata.rate, clipdata.bits, clipdata.channels.


clipdata.top
long clipdata.top

readonly property

Returns the highest sample value supported by the clipboard WAV's word size (255 for an 8 bit WAV, 32767 for a 16 bit WAV).

Returns 0 if there is no open clipboard WAV, i.e. before clipdata.open or clipdata.create and after clipdata.close has been called.

See also clipdata.bottom, clipdata.silence.


clipdata.bottom
long clipdata.bottom

readonly property

Returns the lowest sample value supported by the clipboard WAV's word size (0 for an 8 bit WAV, -32768 for a 16 bit WAV).

Returns 0 if there is no open clipboard WAV, i.e. before clipdata.open or clipdata.create and after clipdata.close has been called.

See also clipdata.top, clipdata.silence.


clipdata.silence
long clipdata.silence

readonly property

Returns the "silence" sample value (halfway between clipdata.top and clipdata.bottom) for the clipboard WAV's word size (128 for an 8 bit WAV, 0 for a 16 bit WAV).

Returns 0 if there is no open clipboard WAV, i.e. before clipdata.open or clipdata.create and after clipdata.close has been called.


clipdata.left
long clipdata.left(long samplePosition)

readonly property

Returns a sample value from the clipboard WAV's left channel, by sample position (measured in samples).

The first position in a WAV file is 0.

Returns clipdata.silence for positions preceding 0 or trailing clipdata.last.

Returns 0 if there is no open clipboard WAV, i.e. before clipdata.open or clipdata.create and after clipdata.close has been called.

If the clipboard WAV is monophonic (clipdata.channels = 1), it's considered to have a left channel but no right channel, so this is also the function to use with monophonic clipboard WAVs.

See also clipdata.right, clipdata.sample, clipdata.setleft, clipdata.setright, clipdata.setsample.


clipdata.right
long clipdata.right(long samplePosition)

readonly property

Returns a sample value from the clipboard WAV's right channel, by sample position (measured in samples).

The first position in a WAV file is 0.

Returns clipdata.silence for positions preceding 0 or trailing clipdata.last, or if there is no right channel (i.e. if clipdata.channels does not equal 2).

Returns 0 if there is no open clipboard WAV, i.e. before clipdata.open or clipdata.create and after clipdata.close has been called.

See also clipdata.left, clipdata.sample, clipdata.setleft, clipdata.setright, clipdata.setsample.


clipdata.sample
long clipdata.sample(long channelNumber, long samplePosition)

readonly property

Returns a sample value from the clipboard WAV by channel number and sample position (measured in samples).

clipdata.sample(0, samplePosition) = clipdata.left(samplePosition)

clipdata.sample(1, samplePosition) = clipdata.right(samplePosition)

Returns clipdata.silence for any other channel number.

Useful when performing identical operations on both channels in a loop.

See also clipdata.setleft, clipdata.setright, clipdata.setsample.


acidshell interface

[Click here for the OpenDSP Reference index]

The acidshell interface provides basic message presentation and user querying support for OpenDSP functions.

Methods

beep	Generates a beep using the PC speaker.

echo	Displays a Windows message box.

popup	Displays an optionally time-limited Windows message dialog.


acidshell.beep
void acidshell.beep()

function

Generates a beep using the PC speaker.

The sound produced is system-dependent. Some PCs do not know how to beep.

See also acidshell.echo, acidshell.popup.


acidshell.echo
void acidshell.echo(BSTR text)

function

Displays a Windows message box containing the text string. Note that multiple lines can be displayed by inserting newline characters in the string.

The caption of the message box is "OpenDSP: " followed by the title of the OpenDSP function being executed.

To close the message box and resume execution, the user must click the OK button or press Enter.

See also acidshell.beep, acidshell.popup.


acidshell.popup
long acidshell.popup(BSTR text, long wait, BSTR caption, long flags)

function

Displays a Windows message dialog containing the text string. Multiple lines can be displayed by inserting newline characters in text.

If caption is empty, the caption of the message dialog is "OpenDSP: " followed by the title of the OpenDSP function being executed. Otherwise, the message dialog is headed by the caption string.

If wait > 0, the message dialog is automatically closed after the specified number of seconds.

The meaning of the flags argument is as in the Win32 API MessageBox function, i.e. it determines which icon and which combination of buttons to show. It's assembled by combining one of the following icon codes,

acidconst.MB_ICONASTERISK	same as MB_ICONINFORMATION

acidconst.MB_ICONERROR	in Windows 9x, same as MB_ICONHAND

acidconst.MB_ICONEXCLAMATION	exclamation point

acidconst.MB_ICONHAND	same as MB_ICONSTOP

acidconst.MB_ICONINFORMATION	lowercase "i" in a circle

acidconst.MB_ICONQUESTION	question mark

acidconst.MB_ICONSTOP	stop sign

acidconst.MB_ICONWARNING	in Windows 9x, same as MB_ICONEXCLAMATION

(or none at all for no icon) with one or more of the following button codes using a binary OR:

acidconst.MB_OK	Show OK button.

acidconst.MB_OKCANCEL	Show OK and Cancel buttons.

acidconst.MB_RETRYCANCEL	Show Retry and Cancel buttons.

acidconst.MB_ABORTRETRYIGNORE	Show Abort, Retry and Ignore buttons

acidconst.MB_YESNO	Show Yes and No buttons.

acidconst.MB_YESNOCANCEL	Show Yes, No and Cancel buttons.

acidconst.MB_DEFBUTTON1	Default. First button is the default button.

acidconst.MB_DEFBUTTON2	Second button is the default button.

acidconst.MB_DEFBUTTON3	Third button is the default button.

acidconst.MB_DEFBUTTON4	Fourth button is the default button.

acidconst.MB_RIGHT	Windows 9x: right-justify text.

acidconst.MB_RTLREADING	Windows 9x: use right-to-left reading order on Hebrew and Arabic systems.

acidconst.MB_SERVICE_NOTIFICATION	NT-specific. See Win 32 API.

acidconst.MB_DEFAULT_DESKTOP_ONLY	Default desktop must have input focus.

acidconst.MB_SETFOREGROUND	Make message dialog the foreground window.

acidconst.MB_APPLMODAL	Default. See Win32 API.

acidconst.MB_TASKMODAL	Similar to MB_APPLMODAL. See Win 32 API.

acidconst.MB_SYSTEMMODAL	Suspend all applications. See Win 32 API.

Returns 0 if no button was clicked within wait (> 0) seconds. Returns one of the following codes if a button was clicked:

acidconst.IDABORT	the user clicked Abort

acidconst.IDCANCEL	the user clicked Cancel

acidconst.IDNO	the user clicked No

acidconst.IDOK	the user clicked OK

acidconst.IDRETRY	the user clicked Retry

acidconst.IDYES	the user clicked Yes

See also acidshell.beep, acidshell.echo.


acidconst interface

[Click here for the OpenDSP Reference index]

The acidconst interface provides OpenDSP functions access to constants used with the other OpenDSP interface objects.

See the descriptions of individual methods and properties in the other OpenDSP interface objects for details.


Ordering overview

The freely distributable Acid WAV Evaluation Package lets you use all Acid WAV functions, but not all at the same time. For unlimited functionality, you need to purchase a personal key from Polyhedric Software. The key comes in the form of a small binary file and is delivered either as an e-mail attachment (this is the fastest and least expensive option) or on a standard 3.5 inch diskette (recommended only if you don't have e-mail access or if your e-mail system can't handle binary attachments).

Please refer to the License Agreement for legal details regarding the use and distribution of Acid WAV and Acid WAV keys.

An Acid WAV key is only $45!

Polyhedric Software is letting two specialized order processing firms handle order taking for Acid WAV.

RegSoft is located in Duluth, Georgia. Orders can be submitted to RegSoft through an online form, by phone (toll-free in the US), by fax or by postal mail. The online form is the fastest route, postal mail the slowest. RegSoft accepts checks and money orders (payable in US dollars) as well as credit cards (VISA, MasterCard, American Express, Discover).

ShareIt! is located in Koeln (Germany) and has a US branch in Greensburg, PA. Orders can be submitted to ShareIt! through an online form, by e-mail, by fax, by phone (toll-free in the US) or by postal mail. The online form is the fastest route, postal mail the slowest. ShareIt! accepts cash (US dollars), US checks, DM-denominated EuroCheques, wire transfers and credit cards (Visa, Eurocard / Mastercard, American Express and Diners Club).

Order your key through RegSoft	Order your key through ShareIt!

Please direct questions about ordering our products to sales@polyhedric.com.


About RegSoft
Regsoft.com, Inc.

PMB 291

10820 Abbotts Bridge Rd

Suite 220

Duluth, GA 30097

USA

Phone: +1 770 319 2718

Fax: +1 770 497 9234

http://www.regsoft.com

info@regsoft.com


About ShareIt!
element 5 AG

 Sachsenring 69

  D-50677 Koeln

Germany

Phone: +49-221-2407279

Fax: +49-221-2407278

ShareIt! Inc.

   P.O. Box 844

Greensburg, PA 15601-0844

USA

Phone: 724-850-8186

Fax: 724-850-8187

http://www.shareit.com

info@shareit.com


Ordering through RegSoft

   Ordering your Acid WAV key online

To order online, you need a credit card  (VISA, MasterCard, American Express or Discover). Secure forms are available for browsers with SSL support (e.g. recent versions of Netscape Navigator and Internet Explorer). All data submitted through a secure form is encrypted before it's sent over the Internet.

SSL order form for Acid WAV key by e-mail

SSL order form for Acid WAV key by postal mail

Non-SSL order form for Acid WAV key by e-mail

Non-SSL order form for Acid WAV key by postal mail

   Ordering your Acid WAV key by phone

To submit your order by phone, please make sure to have your credit card data and one of the following product ID numbers ready:

Product ID number for Acid WAV key by e-mail: 30853

Product ID number for Acid WAV key by postal mail: 30854

If you are in the US, you can call 1-877-REGSOFT (1-877-734-7638) toll-free. The international order number is +1-770-319-2718.

    Ordering your Acid WAV key by fax

To order by fax, fill in the appropriate form and fax it to RegSoft (the number is listed in the form):

Fax order form for Acid WAV key by e-mail

Fax order form for Acid WAV key by postal mail

   Ordering your Acid WAV key by postal mail

To order by postal mail, fill in the appropriate form and mail it to RegSoft (the address is listed in the form):

Post order form for Acid WAV key by e-mail

Post order form for Acid WAV key by postal mail


Ordering through ShareIt!

   Ordering your Acid WAV key online

To submit your order online, you need a browser with support for secure transactions (e.g. a recent version of Netscape Navigator or Internet Explorer). All data you enter is encrypted before it's sent over the Internet.

Order online (e-mail delivery)

Order online (postal mail delivery)

   Ordering your Acid WAV key by phone

To submit your order by phone, please make sure to have your credit card data and one of the following program ID numbers ready:

Program ID number for Acid WAV key by e-mail: 102665

Program ID number for Acid WAV key by postal mail: 102673

If you are in the US, you can call 1-800-903-4152 toll-free (weekdays 9 AM to 5 PM). The international order number is +49-221-2407279.

    Ordering your Acid WAV key by e-mail, postal mail or fax

To submit your order by e-mail, postal mail or fax, fill in the appropriate form,

Order form for Acid WAV key by e-mail

Order form for Acid WAV key by postal mail

and send it to one of the following addresses:

•	register@shareit.com

•	ShareIt! Inc.

P.O. Box 844

Greensburg, PA 15601-0844

USA

Fax: 724-850-8187

•	element 5 AG

Sachsenring 69

D-50677 Koeln

Germany

Fax: +49-221-2407278