THE SYNTHETIC SOUND EDITOR: The SYNTHETIC SOUND EDITOR can design waveforms and program the volume and waveform sequences of synthetic sounds. USING SYNTHETIC SOUNDS: The three main advantages of synthetic sounds are they do not require much memory, they can use a five octave range, and they can be programmed for a variety of special effects. If you attempt to duplicate the effects possible with sampled sounds you may be disappointed in the results. Synthetic sounds have their own unique quality and can sound great. If you do not have an appropriate synthetic instrument for your purposes, the first step is to design a waveform with the tools found in the SYNTHETIC SOUND EDITOR. After you finish creating the waveform, you write a simple program that instructs the sound how to use the waveform. Finally, use the sound in your song as you would any instrument. There is a loop command, however, that is unique to synthetic instruments. WAVEFORM EDITING: To set up the SYNTHETIC SOUND EDITOR: From the MENU PANEL select the INSTRUMENT PANEL. Click the TYPE: SYNTH button to initialize a new synthetic sound. From MENU PANEL select the SYNTHETIC SOUND EDITOR. Turn off the Edit Mode from the STATUS BAR. There are two graphic waveform displays. The one on the left is the master display. While you are designing the instrument, the waveform on this side is the current instrument and you may play it from the Amiga keyboard. The right display is for intermediate editing, and it can serve as a copy buffer. 77 Between the waveform displays is the Waveform Display Control Panel. On it are buttons for transferring and mixing waveforms between displays. +--------+---------+ | <--- | ---> | | < COPY | COPY > | +--------+---------+ | < EXCHANGE > | +--------+---------+ | < MIX | < ADD | +--------+---------+ | < EDIT | EDIT > | +--------+---------+ | UNDO | +------------------+ | RANGE ALL | +------------------+ Waveform Display Control Panel < COPY copies the right waveform to the left waveform display. COPY > copies the left waveform to the right waveform display. EXCHANGE swaps the two waveform displays from one side to the other. MIX combines the two waveforms and creates an average mix in the left waveform display. ADD is similar to MIX, but it does not average the waveforms, it adds them together. If the waveforms exceed the upper or lower limits, the editor truncates them. < EDIT selects the left waveform display to be edited. EDIT > selects the right waveform display to be edited. UNDO undoes the last editing operation. RANGE ALL selects the entire current waveform as the range for editing operations. 78 DRAWING A FREEHAND WAVEFORM: One of the easiest ways to create a waveform is just to draw it. If you press and hold the left mouse button with the cursor inside a waveform display, you can draw a waveform by dragging the mouse. There are three drawing modes, PIXEL, LINE and MIX. +-------+------+-----+ | PIXEL | LINE | MIX | +-------+------+-----+ Draw Mode Selector PIXEL puts a pixel wherever the mouse points. LINE draws a straight line between the point where you click the mouse and where you release it. MIX Mode mixes new pixels or lines with the existing data. These mode selection buttons are below the RANGE ALL button. MULTIPLE WAVEFORMS: You can splice together up to sixty-four waveforms to construct a synthetic sound. Below the left waveform display, there is a set of buttons for moving between these waveforms: Next waveform Previous waveform | | +---+---+---+---+ +----+ WF:| 0 |$00| - | + | / | 00 | <- Number of +---+---+---+---+ +----+ waveforms | | Waveform number in decimal and hexadecimal 79 Below these, there are four buttons to increase or reduce the number of waveforms. +------+------+ ADD: | HERE | LAST | +------+------+ DEL: | HERE | LAST | +------+------+ Delete and Add Waveforms ADD LAST adds a new waveform at the end of the waveform list. ADD HERE inserts a new waveform at the current location, shifting the others. DEL HERE deletes the current waveform. DEL LAST deletes the last waveform in the list. WAVEFORM LENGTH: Synthetic sound waveforms can be any length of even numbered bytes from 2 to 128. To make the pitches harmonically compatible with other instruments use byte lengths of 2, 4, 8, 16, 32, 64 or 128. You can change the length with LEN: + and - buttons below the left waveform display. You may also click the string gadget and type in a value. Basic waveforms types are available by clicking on their icons located at the bottom of the editor. The waveforms provided are: sine, saw up, saw down, pulse, random and triangle. When you select one it will appear in the current waveform display. CLR clears the current waveform. ALL clears all the information about waveforms in the SYNTHETIC SOUND EDITOR. 80 DEFINING A RANGE: You can select just a part of the waveform, a range, that you want to confine an edit operation to. One way you can define a range is by dragging the mouse over the waveform display while pressing the right mouse button. The range will be highlighted in white. You can select the whole waveform display as a range by clicking RANGE ALL. RANGE START and RANGE END buttons in the lower right corner can make precise corrections to the ranged area. Left end RANGE START | Center +---+---+---+ | | Right end |000| - | + | | | | +---+---+---+ +---+---+---+ RANGE END | < | + | > | +---+---+---+ +---+---+---+ |000| - | + | Range Cursor +---+---+---+ Range Ends Range Cursor buttons help to define and clear ranges. Use them to set precisely the beginning or end of a range. This < puts the Range Cursor to the left end of the waveform and sets the RANGE START and RANGE END string gadgets to 000. This + puts the Range Cursor in the center of the waveform and sets the RANGE START and RANGE END string gadgets to half the length of the waveform This > puts the Range Cursor to the right end of the waveform and sets the RANGE START and RANGE END string gadgets to the length of the waveform. After you set one end of the range with the Range Cursor buttons, set the other end by clicking the appropriate RANGE START and RANGE END buttons. If there is an existing range, selecting any Range Cursor button will clear it. 81 RANGE OPERATIONS: In the middle of the screen is this strip of buttons: +-----+------+-------+-----+-----+-----+---+---+ RNG: | CUT | COPY | PASTE | CLR | DBL | REV | < | > | +-----+------+-------+-----+-----+-----+---+---+ CUT works only on the left waveform. It cuts the selected area and moves it to the right waveform display. COPY copies the selected range to the right waveform display, but does not cut it. PASTE copies the range to the right waveform at the cursor position. CLR clears the range. DBL doubles the frequency by duplicating the range and compressing it horizontally to fit within the range width. REV reverses the range. < or > shifts the ranged data left or right. STRETCH: stretches a section of the waveform from the Range Cursor position to one end of the waveform. For example: Select a sine wave. Position the cursor on the middle of the waveform. Make STRETCH active. Enter the amount to stretch. A positive number stretches the point to the left. If the number is negative, it will stretch to the right. VOL.CHG.: increases or decreases the volume of the selected range. First, select a range. Then click VOL.CHG.: Enter the percentage of volume change and press Return. For example, to cut the volume by 50% (one half) you should enter 50. To double the volume, enter 200. 82 TRANSFORM: creates a smooth transition between waveforms by generating the intervening waveforms. START marks the beginning of a transformation. DO!! sets the end of a transformation and executes it. To demonstrate: Allocate nine new waveforms by clicking ADD: LAST 9 times. Now you have ten waveforms. Move to waveform 00, and select a pulse waveform. Click TRANSFORM: START to mark the beginning of the range. Move to the last waveform, 09. Select a sine waveform. Click TRANSFORM: DO!! to set the end and start the transformation. Click the + and - buttons and look at waveforms 00 through 08. You will notice there is now a smooth transition from the pulse wave to the sine wave. SPEED: +---+---+ VOL | 2 | ^ | +---+---+ WF | 6 | v | +---+---+ SPEED: lets you set two synthetic sound arguments, the rate at which the sound fades and the rate at which the sound plays. Select the number to the right of the argument you want to change and use the arrow buttons to increase or decrease the value. VOL sets the speed at which the sound decays after sounding. The larger the number, the slower the decay speed. WF sets the speed at which the waveform plays. The higher the number, the slower the sound. 83 THE SYNTHETIC SOUND PROGRAMMING LANGUAGE: Please read this section carefully. When you use any programming language improperly, it is possible to lock up your computer. This is also true of OctaMED-Pro's Synthetic Sound Programming Language. The Synthetic Sound Programming Language can control the volume, pitch, vibrato, arpeggio, and other arguments of synthetic sounds. The language uses keyword commands, often with an additional argument. Programming uses two lists of command numbers. The lists are displayed in a window below the right waveform display. In the two leftmost columns there are program line numbers in decimal and hexadecimal. The third column contains the Volume Control Sequence, and the rightmost column is the Waveform Control Sequence. Volume Waveform Control Control Sequence Sequence | | +-----+----+-----+-----+ +-----+-----+-------+ | 000 | 00 | 40 | 00 | +-| INS | DEL | G.TRN | | 001 | 01 | END | END | | +-----+-----+-------+ | 002 | 02 | | |--+ | 003 | 03 | | | +-----+----+-----+-----+ DEC HEX | | Line numbers Synthetic Sound Program Editor The maximum length of the lists is 127 ($7F) entries. Both lists always terminate with an END instruction. You can scroll the list up and down or move left and right with the cursor keys. There are six possible cursor locations, three for each list. All instruction arguments are hexadecimal numbers. 84 When entering commands, the cursor should be on the leftmost position of the list. Change the values by putting the cursor over the number you want to change and entering a new value. Enter commands and numbers from the keyboard. INS inserts entries to the list. You can also use the Return key. DEL deletes entries. The editor renumbers Jump commands when you insert or delete an entry. G.TRN (generate transform) automates transformations in the Sequence List. For example, if the following lines are already in the Waveform List, you can create a slide from 00 to 06 by placing the cursor on line 01 and click G.TRN. A smooth transition from 00 to 0F will be generated. +-----+----+-----+-----+ | 000 | 00 | 40 | 00 | | 001 | 01 | END | 0F | | 002 | 02 | | END | +-----+----+-----+-----+ Below are some examples using the Synthetic Sound Commands. You should also look in the appendix for details and examples for each Synthetic Sound Command. VOLUME CHANGE SEQUENCE EXAMPLES: Example 1 +-----+----+- | 000 | 00 | 40 Initialize the volume at 64 (hex $40) | 001 | 01 | CHD Command: Volume Change Down | 002 | 02 | 03 Argument: (speed = 3) | 003 | 03 | END Command: End 85 Example 2 +----+----- | 00 | 00 | Initialize the volume at 0 | 01 | CHU | Command: Volume Change Up | 02 | 07 | Argument: (speed = 7) | 03 | WAI | Command: Wait | 04 | 10 | Argument: (wait 10 pulses) | 05 | CHU | Command: Volume Change Up | 06 | 00 | Argument: (speed = 0) stop changing volume | 07 | WAI | Command: Wait | 08 | 70 | Argument: (wait $70 pulses) | 09 | CHD | Command: Volume Change Down | 0A | 01 | Argument: (speed = 1) slow | 0B | END | Command: End Example 3 +----+-----+ | 00 | 40 | Command: Volume = 64 (hex $40) | 01 | 30 | Command: Volume = 48 (hex $30) without a command, | 20 | 20 | Command: Volume = 32 (hex $20) the values are | 03 | END | Command: End volume changes Example 4 | 00 | 40 | Initialize the volume at 64 (hex $40) | 01 | CHD | Command: Volume Change Down | 02 | 01 | Argument: (speed = 1) | 03 | WAI | Command: Wait | 04 | 20 | Argument: (wait $20 pulses) | 05 | CHU | Command: Volume Change Up | 06 | 01 | Argument: (speed = 1) | 07 | WAI | Command: Wait | 08 | 20 | Argument: (wait $20 pulses) again | 09 | JMP | Command: Jump (go to) | 0A | 01 | Argument: (jump to line number 01) | 0B | END | Command: End 86 WAVEFORM SEQUENCE EXAMPLES: The Waveform Sequence is the master sequence while the volume sequence is a kind of slave sequence. Example 1 (the simplest case) +----+-----+ | 00 | 00 | Command: Set waveform number 00 | 01 | END | Command: End Example 2 +----+-----+ | 00 | VBS | Command: Set Vibrato Speed | 01 | 40 | Argument: (speed = $40) | 02 | VBD | Command: Set Vibrato Depth | 03 | 02 | Argument: (depth = 2) | 04 | 00 | Command: Set Waveform Number 00 | 05 | END | Command: End Most commands are processed and then the next command is immediately fetched. However, some commands wait for the next timing pulse. Otherwise, the computer would do nothing but execute sequence lists and hang up. Be sure that all loops contain a command that waits for the next timing pulse. These commands are WAI (Wait), VOL CHG (plain number in the Volume List) and a Set Waveform Sequence (does not use a keyword). 87 Example 3 +----+-----+ | 00 | ARP | Command: Start Arpeggio Sequence | 01 | 00 | Argument: Root note | 02 | 03 | Argument: A third from the root (a minor) | 03 | 07 | Argument: A seventh from the root (chord ) | 04 | ARE | Command: Arpeggio End Sequence | 05 | VBD | Command: Set Vibrato Depth | 06 | 06 | Argument: (depth = 6) | 07 | VBS | Command: Vibrato Speed | 08 | 40 | Argument: (speed = $40) | 09 | 00 | Command: Set Waveform Number | 0A | 01 | Command: Set Waveforms 01-0A (one timing pulse) | 0B | 02 | " " " 02 (per waveform ) | 0C | 03 | " " " 03 | 0D | 04 | " " " 04 | 0E | 05 | " " " 05 | 0F | 06 | " " " 06 | 10 | 07 | " " " 07 | 11 | 08 | " " " 08 | 12 | 09 | " " " 08 | 13 | 0A | start sliding back to number 01... | 14 | 08 | " " " 08 | 15 | 07 | " " " 07 | 16 | 06 | " " " 06 | 17 | 05 | " " " 05 | 18 | 04 | " " " 04 | 19 | 03 | " " " 03 | 1A | 02 | " " " 02 | 1B | 01 | " " " 01 | 1C | JMP | Command: Jump | 1D | 09 | Argument: (go to position 09 restart waveform change) | 1E | END | Command: End 88 The following loop would hang the computer: +----+-----+ | 00 | CHU | Command: The CHU command does not wait | 01 | 02 | Argument: (speed = 2) | 02 | JMP | Command: Jump | 03 | 00 | Argument: (go to to position 00 -> HANG While this one would not: +----+-----+ | 00 | WAI | Command: Wait | 01 | 02 | Argument: (wait 2 pulses) | 02 | JMP | Command: Jump | 03 | 03 | Argument: (go to 03) EXECUTION SPEED: The synthetic sound handling routine is called once on every timer pulse, usually 6 times a note. You can change this by adjusting the Secondary Tempo on the PLAY PANEL.When the speed argument is 1, a command is processed on every interrupt. If the speed is 2, the process happens every second pulse and it runs at half the speed.You can set the initial speed of execution with the two SPEED: buttons.During program execution you can change the speed with the SPD command. SAVING AND LOADING SYNTHETIC SOUNDS: Load and save synthetic sounds using the file requester and buttons on the FILES PANEL or with SAMPLE LIST EDITOR, as you would any instrument. When you save synthetic sounds, the decay values are saved with the instrument. When they are loaded, information about the sound will be displayed on the MESSAGE LINE. HYBRID SOUNDS: Hybrid sounds are sampled sounds that use the same program language as synthetic sounds. You can use all synthetic sound program commands with hybrid sounds except Set Waveform. The waveform is always the sampled sound, which you can edit with the SAMPLED SOUND EDITOR. You can add more synthetic waveforms for use with EN1, EN2, or VWF commands. 89