home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d5xx / d579 / octamed.lha / OctaMED / OctaMED.lzh / Docs / Synthsounds / Synthsounds
Text File  |  1991-04-30  |  20KB  |  663 lines

  1. Synthetic sound editor
  2. ======================
  3.  
  4. This is the editor, which is used to design simple pieces of waveforms
  5. and to "program" the volume and pitch altering sequences. Synthetic sounds
  6. don't take much memory (that's the main advantage of them). They can use the
  7. whole 5-octave range. Although they are quite simple, they usually sound
  8. quite "cool" (and remind me of the good old C-64).
  9.  
  10. Getting started
  11. ===============
  12. First load MED, select the Instr-panel, click the Synth-gadget to initialize
  13. a new synthsound. The click the Synth-display selection gadget to display the
  14. synthsound editor. Please turn editing off. You can play the current sound
  15. with keyboard, like ordinary samples.
  16.  
  17. Waveform editing
  18. ================
  19. There are two waveform displays, the left one is the "master waveform display"
  20. and the right one is for intermediate editing (it also serves as a copy buffer).
  21. Between the waveform displays are some gadgets, that are used for transferring
  22. waveforms between displays.
  23.  
  24. First there are two copy gadgets. If you press the left copy gadget, the
  25. right waveform will be copied to the left one (and vice versa). Gadget "<-
  26. EXCHANGE ->" exchanges the waveforms on the left and right. "<- MIX" mixes the
  27. left waveform to the right waveform. It is a powerful tool that can be
  28. needed quite often. "<-ADD" is similar to the mix, but it doesn't produce
  29. any average between the wforms (= waveforms, from now on). The wforms are
  30. simply added together. It's possible, that the waveforms exceed the upper
  31. and lower limits (in that case, they are truncated). Two "<- EDIT" "EDIT->"
  32. gadgets allow you to select either of the displayed wforms as a current
  33. waveform, which is then used in some editing functions. Sometimes they're
  34. automatically set (when you draw the wform with mouse, for example). "UNDO"
  35. undoes your last editing operation. It can be quite useful. "RANGE ALL"
  36. selects the current wform, so that any editing operations affect the whole
  37. wform.
  38.  
  39. Freehand drawing
  40. ================
  41. A very simple way to create wforms is to draw them from scratch. This is
  42. easily done. Just press the left mouse button and draw... There are two
  43. drawing modes. The default is "pixel". The other is "line". This can be used
  44. for drawing straight lines. There's also a mix-mode, that works in both
  45. "line" and "pixel" -mode. It mixes the drawed pixels or lines with the
  46. already existing data. Mode-selection gadgets are located below "RANGE ALL".
  47.  
  48. Waveform length
  49. ===============
  50. Each waveform in synthsound can be 2 - 128 bytes long (it must be even,
  51. though). The shorter the waveform, the higher the pitch (it also depends on
  52. the wform itself). Usually, to make the pitches compatible with other
  53. instruments, you should use length 2, 4, 8, 16, 32, 64 or 128. The length
  54. can be changed with "LEN:" gadgets below the left wform, by typing in a new
  55. value or by clicking the single-step gadgets.
  56.  
  57. Multiple waveforms
  58. ==================
  59. Each synthsound can consist of more than one wform (the maximum is actually
  60. 64). On the left, below the left wform, there's a set of gadgets:
  61.  
  62. curr. wform #
  63.    |
  64.    0  < > / 00
  65.       |/    \|
  66. next/prev    number of the last waveform
  67.  
  68. The arrow gadgets select the next/previous waveform. As this is a operation
  69. that is needed often, there are keyboard shortcuts:
  70.     Alt-cursor left  = previous
  71.     Alt-cursor right = next
  72.  
  73. There are two Add gadgets that allow you to increase the number of waveforms.
  74. "Last" adds a new waveform after the last wform.
  75. "Here" inserts a new wform here, and shifts the others.
  76.  
  77. Del gadgets:
  78. "Last" deletes the last wform.
  79. "Here" deletes the current wform.
  80.  
  81. Preset waveforms
  82. ================
  83. There are some simple, often needed preset waveforms available at a single
  84. click. First make sure, that the destination wform is the current wform
  85. (selected with the EDIT <-/-> gadgets). Then just click the preset waveform
  86. icon. The icons are located at the bottom of the editor.
  87. The available waveforms are: sine, saw down, pulse, random, triangle, saw up.
  88. The CLR-gadget clears the current wform.
  89. The ALL-gadget clears the whole synthsound (so be careful..)
  90.  
  91. Range operations
  92. ================
  93. These are some basic operations, that are applied to the selected range
  94. (highlighted white). You can select the range by dragging the mouse over the
  95. wform and holding the right mouse button down. You can select the whole wform
  96. by clicking "RANGE ALL". The Range start/Range end gadgets at the lower right
  97. corner of the synthsound editor can be used to make small corrections to the
  98. area.
  99.  
  100. When there's no range selected, there's a single horizontal white line. This
  101. is the cursor. Some editing operations need it. The cursor position can be
  102. set by clicking the right mouse button on the wform area. There are also
  103. three narrow gadgets (on the left of the preset wform gadgets) for
  104. positioning the cursor:
  105.  
  106. cursor to     cursor to end
  107. start   |     |
  108.     <  +  >
  109.            |
  110.       cursor to the middle (of the wform)
  111.  
  112. On the middle of the screen, there's a word "RNG", followed by a strip of
  113. gadgets:
  114.     RNG  Cut  Copy  Paste  Clr  Dbl  Rev  <  >
  115.  
  116. Cut    (works only on left wform). It "cuts" the selected area, which is then
  117.     moved to the right wform display.
  118. Copy    copies the selected range to the right wform, but doesn't cut it away.
  119. Paste    copies the contents of the right wform to the position pointed by
  120.     the cursor.
  121. Clr    clears the range.
  122. Dbl    "doubles" the range, making it play one octave higher.
  123. Rev    reverses the range.
  124. < or >    shift the ranged data to left or right.
  125.  
  126. There are two other editing operations: stretch and volume change.
  127.  
  128. Stretch allows you to stretch a point of the wform towards some other point
  129. (understand?? no?? then try this:)
  130. For example, select a sine wave. Then position the cursor on the middle of
  131. the waveform (there's a gadget for this purpose, see above). Now activate
  132. the "STRETCH:"-gadget (on the left lower corner of the synthsound ed). Type
  133. in the amount of moving, e.g. 32. This should demonstrate it... If the number
  134. you type in is negative, the point is stretched to left.
  135.  
  136. Volume change allows you to increase/decrease the volume of selected range:
  137. First select a range. Then activate the "VOL.CHG:"-gadget. Now you must enter
  138. the amount of volume change (in %'s). For example, to halve the volume, you
  139. should type 50. If you want to double the volume, type 200. The volume will
  140. be changed when you press Return.
  141.  
  142. Transformation
  143. ==============
  144. This is a quite powerful feature. It allows you to change a waveform to
  145. another smoothly (by creating the waveforms between them). Demonstration:
  146. Allocate 9 new waveforms (click Add/Last 9 times). Now you have 10 wforms.
  147. Move to wform 00, and select a pulse waveform, for example. Then click
  148. Transform: Start to mark the beginning of transformation range. Move to wform
  149. 09 (the last one). Put here a sine wform. Click Transform: Do, and the magic
  150. is done. If you view the wforms 01 - 08, you'll notice that there's now a
  151. smooth transition from the pulse wave to the sine wave.
  152. -----------------------------------------------------------------------------
  153.  
  154. THE PROGRAMMING LANGUAGE
  155. ========================
  156.  
  157. Note: please read this section carefully before experimenting, because you
  158.       can lock up your machine with the synthsound programming language (as
  159.       with any other language)
  160.  
  161. The programming language is used for controlling the volume/pitch/vibrato/
  162. waveforms/arpeggio/etc... of the synthsound. It consist of simple keywords
  163. which some have an argument.
  164.  
  165. The programming is done using two lists of commands/numbers. These lists
  166. are displayed through a small window below the right waveform display.
  167. First there are line numbers (on the leftmost column). The middle column
  168. contains the volume sequence, while the rightmost is the waveform/pitch
  169. sequence.
  170.  
  171.     volume ctrl seq
  172.        |
  173. line   |    waveform ctrl seq
  174.   |    |    |
  175.   00   40   00
  176.   01  END  END
  177.  
  178. These lists are both max. 127 ($7F) entries long. The list is always
  179. terminated with "END" instruction (it's automatically there so you don't have
  180. to do that). You can scroll the list with cursor up/down -keys. The cursor
  181. can be moved horizontally using the cursor left/right -keys. There are six
  182. possible cursor locations (3 for both lists). When entering commands, the
  183. cursor should be on the leftmost position of that list. Values are entered by
  184. pointing the cursor over the value to be changed and entering a new value.
  185. Commands and numbers are entered with keyboard. You can insert entries to the
  186. list with the Return-key (or clicking Ins-gadget), and delete using Del (or
  187. clicking Del-gadget). JMP commands are renumbered when entries are inserted or
  188. deleted.
  189.  
  190. Golden rule: ALL NUMBERS IN THE SEQUENCE LISTS ARE HEXADECIMAL.
  191. Just remember this, and you have no problems (fingers crossed :^)
  192.  
  193. First, let's examine some example sequences:
  194.  
  195. This is a volume sequence:
  196.     
  197.     00  40 <= set initial volume to 64 (hex $40, did you already forget?)
  198.     01 CHD <= command, that means "Set volume change down speed"
  199.     02  03 <= argument (speed = 3)
  200.     03 END
  201.  
  202. Here's another:
  203.  
  204.     00  00 <= initial volume = 0
  205.     01 CHU <= Command: Set volume change up
  206.     02  07 <= speed = 7
  207.     03 WAI <= Command: Wait
  208.     04  10 <= wait 10 pulses
  209.     05 CHU <= Set volume change up
  210.     06  00 <= speed = 0 -> stop changing volume
  211.     07 WAI <= Wait
  212.     08  70 <= 70 pulses
  213.     09 CHD <= Cmd: Set volume change down
  214.     0A  01 <= speed = 1 (slow)
  215.     0B END
  216.  
  217. Third:
  218.  
  219.     00  40 <= vol = $40
  220.         01  30 <= vol = $30 (without command, the values are volume changes)
  221.     02  20 <= vol = $20
  222.     03 END
  223.  
  224. And fourth, finally:
  225.  
  226.     00  40    <= vol = $40
  227.     01 CHD <+ <= change down speed..
  228.     02  01  | <= ..= 1
  229.     03 WAI  | <= Wait..
  230.     04  20  | <= ..20
  231.     05 CHU  | <= change up
  232.     06  01  | <= ..1
  233.     07 WAI  | <= Wait..
  234.     08  20  | <= ..20 again
  235.     09 JMP  | <= Jump (= goto)
  236.     0A  01 -+ <= to line number 01
  237.     0B END
  238.  
  239. Now some wform/pitch sequences. Wform/pitch sequence is the "mastersequence"
  240. while the volume sequence is a kind of "slave sequence".
  241.  
  242. First: (the simplest case)
  243.     00  00 <= set waveform #00
  244.     01 END
  245.  
  246. A bit more complex:
  247.     00 VBS <= set vibrato speed
  248.     01  40 <= speed = $40
  249.     02 VBD <= set vibrato depth
  250.     03  02 <= depth = 2
  251.     04  00 <= waveform #00
  252.     05 END
  253.  
  254. And very complex:
  255.     00 ARP <= start arpeggio sequence
  256.     01  00 \
  257.     02  03  arpeggio values 0, 3, 7 (minor chord)
  258.     03  07 /
  259.     04 ARE <= end arpeggio sequence
  260.     05 VBD <= vibrato depth
  261.     06  06 <= 6
  262.     07 VBS <= vibrato speed
  263.     08  40 <= $40
  264.     09  00 <= set waveform #0
  265.     0A  01 <= set waveforms 01 - 0A (one timing pulse/waveform)
  266.     0B  02    | |
  267.     0C  03   \   /
  268.     0D  04    \_/
  269.     0E  05
  270.     0F  06
  271.     10  07
  272.     11  08
  273.     12  09
  274.     13  0A and back to #01...
  275.     14  08
  276.     15  07
  277.     16  06
  278.     17  05
  279.     18  04
  280.     19  03
  281.     1A  02
  282.     1B  01
  283.     1C JMP <= jump
  284.     1D  09 <= to position 09 (restart waveform changing)
  285.     1E END
  286.  
  287. -----------------------------------------------------------------------------
  288. You can learn a lot by examining the example synthsounds and by
  289. experimenting.
  290.  
  291. Now, some reference...
  292.  
  293. About timing
  294. ============
  295. For both sequence lists, most of the commands are fetched, executed, and the
  296. next command is immediately fetched. There are also some commands that wait
  297. for the next timing pulse, this is important because the computer would
  298. otherwise send all its time executing the sequence lists (and would hang up).
  299. You should take care that all loops contain a command, that waits for the
  300. next timing pulse. These commands are WAI (Wait), vol chg (plain number in
  301. the volume list) and set waveform (plain number in pitch/wform list).
  302.  
  303. For example, the following loops will hang up your computer:
  304.  
  305.     00 JMP        00  CHU <-+ command CHU doesn't wait
  306.     01  00        01   02   |
  307.         ...        02  JMP   |
  308.             03   00 --+
  309.  
  310. While the following would not:
  311.  
  312.     00  20        00  WAI
  313.     01 JMP        01   02
  314.     02  00        02  JMP
  315.             03   00
  316.  
  317. Executing speed
  318. ===============
  319. The synthsound handling routine is called once every interrupt. This means
  320. that the handling is done 6 times/note (can be changed with secondary tempo,
  321. see main docs). Both lists have an execution speed, that is the speed of the
  322. operation. When the speed is 1, the next command is fetched/pitch changed
  323. etc. on every interrupt. If the speed was 2, it would happen every second
  324. interrupt (runs two times slower). The initial execution speed can be set
  325. with the two speed gadgets. During executing, the speed can be changed with
  326. command SPD.
  327.  
  328.  
  329. VOLUME SEQUENCE LIST COMMANDS
  330. =============================
  331.  
  332. 1.    Set volume
  333.     Command: ---
  334.     Keyboard: --- (key needed to enter the command)
  335.  
  336.     This is the default command (no command identifier). It sets the
  337.     absolute volume of the synthsound. It should be 00 - 40. Note that
  338.     the relative track volumes are not used in synthsounds (mostly
  339.     because of performance reasons).
  340.  
  341.     Example:
  342.     00  30 ;volume = $30
  343.     01  10 ;volume = $10
  344.     ...
  345.  
  346. 2.    End sequence
  347.     Command: END
  348.     Keyboard: ---
  349.  
  350.     This command terminates the volume sequence list. It's always there
  351.     and automatically inserted. You can't insert commands past this one.
  352.  
  353. 3.    Set volume change down speed
  354.     Command: CHD
  355.     Keyboard: D
  356.  
  357.     This command sets the speed, in which volume is decreased each timing
  358.     pulse. The volume starts changing automatically after this command.
  359.     To stop automatic volume sliding, issue this command with speed 00.
  360.  
  361.     Example:
  362.     00  CHD
  363.     01   05 ;speed = 5
  364.     ...
  365.     10  CHD
  366.     11   00 ;speed = 0 -> stop sliding
  367.  
  368. 4.    Set volume change up speed
  369.     Command: CHU
  370.     Keyboard: U
  371.  
  372.     This command is like CHD, except it sets the volume change up.
  373.  
  374. 5.    Wait
  375.     Command: WAI
  376.     Keyboard: W
  377.  
  378.     This command waits for specified amount of timing pulses (pause).
  379.  
  380.     Example:
  381.     03  WAI
  382.     04   10 ;wait for 16 ($10) pulses to occur
  383.  
  384. 6.    Jump
  385.     Command: JMP
  386.     Keyboard: J
  387.  
  388.     Causes an immediate jump to another position of the volume list.
  389.  
  390.     Example:
  391.     05  JMP
  392.     06   0A ;jump forward to line 0A
  393.  
  394. 7.    Jump waveform sequence
  395.     Command: JWS
  396.     Keyboard: Shift-J
  397.  
  398.     This command causes a jump in the waveform sequence. This can be used
  399.     for example, to trigger a pitch change at the end of the vol seq
  400.     list. Note that this DOESN'T cause a jump TO waveform sequence.
  401.  
  402.     Example:
  403.     04  JWS
  404.     05   0F    ;Cause jump in waveform sequence list
  405.  
  406.  
  407. 8.    Halt
  408.     Command: HLT
  409.     Keyboard: H
  410.  
  411.     This has the same effect with command END (halt execution), but it
  412.     can be inserted in the middle of the sequence list.
  413.  
  414.     Example:
  415.     03  HLT
  416.     04   04 ;some other code (can be accessed with JMP instruction, for
  417.     ...     example)
  418.  
  419. 9.    Set speed
  420.     Command: SPD
  421.     Keyboard: S
  422.  
  423.     Sets the execution speed.
  424.  
  425.     Example:
  426.     0A  SPD
  427.     0B   01 ;speed = 1 (fastest)
  428.     ...
  429.  
  430.  
  431. WAVEFORM/PITCH SEQUENCE LIST COMMANDS
  432. =====================================
  433.  
  434. 1.    Set waveform
  435.     Command: ---
  436.     Keyboard: ---
  437.  
  438.     This command is used to indicate the waveform number (starting from
  439.     00). After this instruction, the execution stops until next timing
  440.     pulse occurs. Don't use waveform numbers that are higher than the
  441.     actual number of the last wform.
  442.  
  443.     Example:
  444.     00  00 ;wform 00
  445.     01  01 ;wform 01
  446.     ...
  447.  
  448. 2.    End sequence
  449.     Command: END
  450.     Keyboard: ---
  451.  
  452.     This command terminates the wform/pitch sequence list. It's always
  453.     there and automatically inserted. You can't insert commands past this
  454.     one.
  455.  
  456. 3.    Set pitch change down speed
  457.     Command: CHD
  458.     Keyboard: D
  459.  
  460.     This command sets the sliding speed for sliding pitch down. The
  461.     sliding automatically starts after this command and stops, when
  462.     speed is set to zero.
  463.  
  464.     Example:
  465.     00 CHD
  466.     01  03 ;set speed to 3
  467.     ...
  468.  
  469. 4.    Set pitch change up speed
  470.     Command: CHU
  471.     Keyboard: U
  472.  
  473.     Just like previous, but slides pitch up.
  474.  
  475. 5.    Wait
  476.     Command: WAI
  477.     Keyboard: W
  478.  
  479.     This command waits for specified amount of timing pulses (pause).
  480.  
  481.     Example:
  482.     03  WAI
  483.     04   02 ;wait for 2 pulses to occur
  484.  
  485. 6.    Jump
  486.     Command: JMP
  487.     Keyboard: J
  488.  
  489.     Causes an immediate jump to another position of the wform/pitch list.
  490.  
  491.     Example:
  492.     05  JMP
  493.     06   0A ;jump forward to line 0A
  494.  
  495. 7.    Jump volume sequence
  496.     Command: JVS
  497.     Keyboard: Shift-J
  498.  
  499.     This command causes a jump to happen in the volume sequence. Can be
  500.     used e.g. for triggering volume changes after some wform event.
  501.  
  502.     Example:
  503.     09  JVS
  504.     0A   00 ;start volume sequence from the beginning
  505.  
  506. 8.    Halt
  507.     Command: HLT
  508.     Keyboard: H
  509.  
  510.     This has the same effect with command END (halt execution), but it
  511.     can be inserted in the middle of the sequence list.
  512.  
  513.     Example:
  514.     03  HLT
  515.     04   04 ;some other code (can be accessed with JMP instruction, for
  516.     ...     example)
  517.  
  518. 9.    Set speed
  519.     Command: SPD
  520.     Keyboard: S
  521.  
  522.     Sets the execution speed.
  523.  
  524.     Example:
  525.     0A  SPD
  526.     0B   01 ;speed = 1 (fastest)
  527.     ...
  528.  
  529. 10.    Begin arpeggio definition
  530.     Command: ARP
  531.     Keyboard: A
  532.  
  533.     This command starts the arpeggio sequence. The following values are
  534.     the arpeggio offsets from the base note. The arpeggio sequence
  535.     is terminated with ARE-command. The arpeggio starts automatically
  536.     after the sequence is defined.
  537.  
  538.     Example:
  539.     03  ARP ;start arpeggio
  540.     04   00 ;offset values
  541.     05   04
  542.     06   07
  543.     07   0A
  544.     08  ARE ;end arpeggio definition
  545.  
  546. 11.    End arpeggio definition
  547.     Command: ARE
  548.     Keyboard: E
  549.  
  550.     Ends an arpeggio definition. See above.
  551.  
  552. 12.    Set vibrato depth
  553.     Command: VBD
  554.     Keyboard: V
  555.  
  556.     This command is used to set the vibrato depth (00 - 7F).
  557.  
  558.     Example:
  559.     02  VBD
  560.     03   04 ;set depth to 4
  561.  
  562. 13.    Set vibrato speed
  563.     Command: VBS
  564.     Keyboard: Shift-V
  565.  
  566.     This command sets the vibrato speed (00 - 7F). Both speed and depth
  567.     must be nonzero for vibrato to occur.
  568.  
  569.     Example:
  570.     02  VBD
  571.     03   04 ;depth = 4
  572.     04  VBS
  573.     05   30 ;speed = 30
  574.  
  575. 14.    Reset pitch
  576.     Command: RES
  577.     Keyboard: R
  578.  
  579.     This command resets the pitch of the note to its initial pitch.
  580.  
  581. =============================================================================
  582.  
  583. Synthsound handling commands in the songs:
  584.  
  585. Command E in the songs controls the MIDI pan, if used with MIDI, but
  586. with synthsounds, it is used to trigger a jump in the wform/pitch sequence
  587. list.
  588.  
  589. For example, if you wanted to decrease the pitch of the sound after a
  590. certain point, your wform/pitch sequence could look like this:
  591.  
  592.     00  VBS
  593.     01   40
  594.     02  VBD
  595.     03   06
  596.     04   00    ;play wform 00
  597.     05  HLT
  598.     06  CHD    ;pitch changing entry point
  599.     07   02
  600.     08  END
  601.  
  602. Now you could compose a track like this:
  603.  
  604.     C-2 3000  ;this is the previous synthsound
  605.     --- 0000
  606.     --- 0000
  607.     --- 0E06  ;cause a jump to position 06 (pitch starts to slide down)
  608.     --- 0000
  609.     ...
  610.  
  611. With command JVS, you could make the command affect volume sequence too.
  612.  
  613. Hold/Decay:
  614. ===========
  615. Hold/Decay work well with synthsounds too. The decay value in synthsounds
  616. is, however, a jump address in the volume sequence list. When the decay
  617. should start, the execution will jump to this entry in the vol seq list.
  618. This means that you can handle the decay on any way you like. You can also
  619. make it affect the pitch/wforms using the command JWS.
  620.  
  621. Example volume sequence list:
  622.  
  623.     00  40    ;volume
  624.     01 HLT  ;end
  625.     02 CHD    ;decay handling (entry point) -> cause decay
  626.     03  03
  627.     04 END
  628.  
  629. The decay value for this synthsound should be 2. When you save/load
  630. synthsounds, the decay values are saved/loaded with the instrument.
  631.  
  632. =============================================================================
  633.  
  634. Saving/loading synthsounds
  635. ==========================
  636. Synthsounds  are  saved  using the filerequester panel, "save sample".  They
  637. take  very  little  disk  space.  Synthsounds can be loaded just like normal
  638. samples (filerequester, sample list, typing sample name).
  639.  
  640. =============================================================================
  641.  
  642. HYBRID SOUNDS
  643. =============
  644. Hybrid  sounds  are much like synthsounds, except that there are no waveform
  645. pieces.   Instead,  there's a normal sample.  All commands of the synthsound
  646. handling  programming language can be used with hybrid sounds.  There's only
  647. one  thing you should know:  Don't use "Set waveform".  Because there's only
  648. a single waveform, there's no need for that (and it wouldn't work anyway).
  649.  
  650. =============================================================================
  651. =============================================================================
  652. =============================================================================
  653.  
  654.     Final note:
  655.  
  656. Don't be afraid if you didn't understand everything described in this file
  657. (I hardly understand it myself...) All this information is not necessary
  658. for using the synthsounds (only for designing them).
  659.  
  660. If you've created interesting, useful synthsounds, please send them to me.
  661. This way I could maintain some kind of library of synthsounds, and could
  662. spread them forward to users who need them.
  663.