home *** CD-ROM | disk | FTP | other *** search
/ Meeting Pearls 3 / Meeting_Pearls_III.iso / Pearls / midi / Editors_and_Tools / OberSuite-1.03 / OberSuite.DOC < prev    next >
Text File  |  1993-01-23  |  24KB  |  741 lines

  1.                 O B E R S U I T E
  2.                 =================
  3.  
  4. This documentation file was last revised on:    January 23, 1993.
  5.  
  6.     OberSuite is a set of CLI programs for transferring patches between 
  7. your Amiga and an Oberheim Xpander or Matrix-12 synthesizer via MIDI.
  8.  
  9. Author:        Daniel J. Barrett
  10.         62 Summer Street
  11.         Amherst, MA  01002-1122
  12.  
  13. E-Mail:        Internet:    barrett@cs.umass.edu
  14.         Compuserve:    >internet:barrett@cs.umass.edu
  15.  
  16.         If you like these programs, you are welcome to send a
  17.         financial contribution to the author, but it is not
  18.         necessary.
  19.  
  20. No Copyright:    The source code and executable programs for ObGet 1.03,
  21.         ObPut 1.03, ObExtract 1.03, and ObType 1.03 are all in the
  22.         PUBLIC DOMAIN.  Please share them with other people!
  23.  
  24.         You are welcome (and encouraged) to use the source code,
  25.         in whole or part, in your own programs.  If you do, I ask
  26.         that you please give me credit for my work.  This is not
  27.         necessary, but it is a polite thing to do.
  28.  
  29. Copyright:    All versions before 1.00 ARE copyrighted:
  30.  
  31.             Copyright 1991 by Daniel J. Barrett.
  32.             All rights reserved.
  33.  
  34.         and MAY NOT BE DISTRIBUTED without the author's WRITTEN
  35.         permission.  These are incomplete, buggy pre-release 
  36.         versions!  If you have a copy with version number earlier
  37.         than 1.00 (for example, 0.85 or 0.9), I encourage you to get 
  38.         a more recent version.
  39.  
  40. Disclaimer:    These programs are provided without warranty or guarantee
  41.         of any kind.  Use them at your own risk.  The author bears
  42.         no responsibility for any damage done or data lost due to
  43.         the use or misuse of these programs.
  44.  
  45.         I have used these programs successfully and believe that
  46.         they are helpful and reliable.  Otherwise, I would not
  47.         distribute them!
  48.  
  49.  
  50. A QUICK INTRODUCTION FOR EXPERTS
  51. --------------------------------
  52.  
  53.     If you are a Amiga MIDI expert, and you don't feel like reading
  54.     this documentation (yet), here's a quick way to get started.
  55.     From the CLI, type the name of the program (any of them)
  56.     followed by a question mark.  You will see usage information
  57.     for that program.  The programs are called ObGet, ObPut, ObType,
  58.     and ObExtract.
  59.  
  60.     If your MIDI interface is not connected to your Amiga's internal
  61.     serial port, read "Using An Alternate MIDI Interface," below.
  62.  
  63.     I do recommend that you read this entire document at some point.
  64.  
  65.     
  66. TABLE OF CONTENTS
  67. -----------------
  68.  
  69.     I.    What are the programs?
  70.  
  71.     II.    Features.
  72.         A.    General use
  73.         B.    Getting help
  74.         C.    Examples
  75.  
  76.     III.    Detailed usage instructions.
  77.         A.    Some Conventions
  78.         B.    Using Command-Line Options
  79.         C.    ObGet
  80.         D.    ObPut
  81.         E.    ObType
  82.         F.    ObExtract
  83.         G.    Using an alternate MIDI interface
  84.  
  85.     IV.    HELP!!!  The programs don't work!
  86.  
  87.     V.    Technical details about the programs.
  88.         A.    Reliability.
  89.         B.    Programming considerations.
  90.         C.    Source code.
  91.  
  92.     VI.    Changes from previous versions.
  93.  
  94.     
  95. WHAT ARE THE PROGRAMS?
  96. ----------------------
  97.  
  98.     These are programs for transferring patch data between an Oberheim
  99. Xpander/Matrix-12 and a Commodore Amiga.  You need a MIDI interface on
  100. the Amiga.  If you don't have all these things, these programs are probably
  101. not useful to you (except perhaps as a C source code example).
  102.  
  103.     ObGet:        Get patches from an Xpander/Matrix-12 and store them 
  104.             in a file.  You can grab:
  105.  
  106.             o    1 single patch
  107.             o    1 multi patch
  108.             o    All single patches (100)
  109.             o    All multi patches (100)
  110.  
  111.     ObPut:        Send patches from a file to the Xpander/Matrix-12.
  112.             The "opposite" of ObGet.
  113.  
  114.     ObType:        Identify the contents of files created by ObGet.
  115.  
  116.     ObExtract:    Extract individual patches from files created by
  117.             ObGet, and:
  118.  
  119.             o    Store them in individual files.
  120.             o    Send them to the Xpander/Matrix-12.
  121.             o    Both of the above.
  122.  
  123.  
  124. FEATURES
  125. --------
  126.  
  127. GETTING HELP:
  128.  
  129. o    Typing the program name by itself prints a short "help" message.
  130.     For example:
  131.  
  132.         1>  obget
  133.  
  134. o    Typing the name of the program followed by a QUESTION MARK prints
  135.     a long, informative "help" message.  For example:
  136.  
  137.         1>  obput ?
  138.  
  139. o    To quit any OberSuite program, type control-C (hold down the CTRL
  140.     key and press C).  In some situations, you might also have to
  141.     press RETURN afterwards.
  142.  
  143. GENERAL USE:
  144.  
  145. o    Programs run from the command-line only, not the Workbench.
  146.  
  147. o    Patches may be transferred 1 at a time or 100 at a time.
  148.  
  149. o    All programs make no changes to the patch data.  Whatever they
  150.     receive from the Oberheim is exactly what is stored in the file.
  151.     This makes the files most compatible with other MIDI software,
  152.     at the expense (perhaps) of greater flexibility within the
  153.     OberSuite programs.
  154.  
  155. o    You don't have to touch the Xpander/Matrix-12 front panel during
  156.     operation.
  157.  
  158. o    The programs automatically distinguish between Xpanders and
  159.     Matrix-12's and adjust their behavior accordingly.
  160.  
  161. o    All programs access the serial port (or other MIDI device) in
  162.     "shared" mode, so other MIDI programs can be active simultaneously.
  163.  
  164. o    By default, the programs assume that your MIDI interface is 
  165.     connected to your Amiga's internal serial port.  You may override 
  166.     this by specifying an environment variable (using the AmigaDOS 
  167.     SetEnv command).
  168.  
  169. o    Transfer speed can be increased by 25-30% by turning off screen
  170.     output (-q or -Q options).
  171.  
  172. EXAMPLES
  173.  
  174.     The file "EXAMPLES", included with this distribution,
  175.     contains many samples of using the OberSuite commands.
  176.  
  177.     
  178. DETAILED USAGE INSTRUCTIONS
  179. ---------------------------
  180.  
  181. SOME CONVENTIONS
  182.  
  183.     Below, I will explain the syntax of the OberSuite programs.
  184.     In doing so, I will use the following conventions:
  185.  
  186.     o    "1>" is the CLI/Shell prompt.
  187.  
  188.     o    When I want to indicate an OPTIONAL piece of syntax, I
  189.         will enclose it in square brackets, like this:
  190.  
  191.             [optional thing]
  192.  
  193.         For example, the syntax description:
  194.  
  195.             ObWhatever [Patch] Filename
  196.  
  197.         would indicate that the first argument "Patch" is
  198.         optional.
  199.         
  200.     
  201. USING COMMAND-LINE OPTIONS
  202.  
  203.     All of the OberSuite programs use command-line options to affect
  204.     their behavior.  These options are single letters preceded by
  205.     a dash.
  206.  
  207.     Command-line options may be specified individually, like this:
  208.  
  209.         1>  ObWhatever -a -b -c -d  ...
  210.  
  211.     or together after 1 dash, like this:
  212.  
  213.         1>  ObWhatever -abcd  ...
  214.  
  215.  
  216. OBGET
  217.  
  218.     ObGet will grab 1 or 100 patches from the Oberheim and save them
  219.     in a file.  Here is an example:
  220.  
  221.         1>  obget s45 trumpet
  222.  
  223.     This grabs single patch 45 and saves it in a file called "trumpet"
  224.     in the current directory.  If you wanted multi patch 45, the "s"
  225.     would have been an "m":
  226.  
  227.         1>  obget m45 trumpet
  228.  
  229.     To grab ALL 100 multi patches and save them in a file called
  230.     "Hundred-Multis", type:
  231.  
  232.         1>  obget m Hundred-Multis
  233.  
  234.     The general syntax is:
  235.  
  236.         1>  ObGet  [options]  Patch  FileName
  237.  
  238.     "Patch" begins with the letter "s" (for single) or "m" (for multi).
  239.     (You may use upper or lower case letters.)  If you follow the letter
  240.     with a number, ObGet grabs that particular patch.  If you omit the
  241.     number, ObGet grabs ALL 100 patches of that type.
  242.  
  243.     Options are:
  244.  
  245.         -q        Quiet; no screen output except for error
  246.                 messages.
  247.         -Q        COMPLETELY quiet -- not even error messages.
  248.         -l        Long screen output.  This is the default.
  249.         -a        Overwrite existing files without asking
  250.                 your permission (as if you had typed
  251.                 "All" at the "Overwrite?" prompt).
  252.  
  253.     You may not specify -q, -Q and -l together.
  254.  
  255.     "Quiet" transfers are about 25% faster than "long" transfers.  If
  256.     you want "Quiet" to be the default, you can always make an alias:
  257.  
  258.         1>  alias ObGet ObGet -q 
  259.  
  260.     If you attempt to save a patch in a file that already exists,
  261.     ObGet will ask you if you want to overwrite the existing file.
  262.  
  263.         File "trumpet" already exists.
  264.         OVERWRITE it? [Yes/No/All, RETURN=No]:
  265.  
  266.     Any response beginning with capital or small "Y" or "A" ("all")
  267.     means "yes"; anything else means "no".  [The "A" might seem
  268.     strange, but it useful when multiple files are being created, as
  269.     in ObExtract, below.]
  270.  
  271.     NOTE:  You will not be prompted like this if you have specified
  272.     the "-a" option on the command line.  Thus, for a totally quiet
  273.     (and perhaps dangerous) program, you would specify both the -Q 
  274.     and -a options.
  275.     
  276.  
  277. OBPUT
  278.  
  279.     ObPut is the opposite of ObGet:  it sends patch data from a file
  280.     (presumably created by ObGet) back to the Oberheim.  Its syntax
  281.     is slightly different from that of ObGet:  you don't have to specify
  282.     whether a file is a single patch or a multi patch.  (The Oberheim
  283.     can tell the difference.)  Thus, you don't put an "s" or "m" before
  284.     the patch number.
  285.  
  286.     For example, suppose you have a multi patch in the file "Zappo",
  287.     and you want to send it to patch location 65 in the Oberheim.
  288.     Type:
  289.  
  290.         1>  obput 65 Zappo
  291.  
  292.     The general syntax is:
  293.  
  294.         1>  ObPut  [options]  [PatchNumber]  FileName
  295.  
  296.     Note that the PatchNumber is OPTIONAL.  This because every patch
  297.     file has its ORIGINAL patch number contained inside it.  So, if you
  298.     want to send a patch back to its original patch location, just omit
  299.     the patch number on the command line:
  300.  
  301.         1>  obput Zappo
  302.  
  303.     [If you want to see a file's original patch number, use ObType.]
  304.  
  305.     If the file contains 100 patches, once again you omit the Patch
  306.     Number -- it has no meaning.  (However, if you accidentally type
  307.     a number, ObPut will ignore it.)
  308.  
  309.         1>  obput HundredPatchFile
  310.  
  311.     When ObPut is successful, it prints the name of each patch as
  312.     it is sent to the synthesizer.
  313.  
  314.     Options are mostly the same as in ObGet:
  315.  
  316.         -q        Quiet; no screen output except for error
  317.                 messages.
  318.         -Q        COMPLETELY quiet -- not even error messages.
  319.         -l        Long output.  This is the default.
  320.  
  321.     You may not specify -q, -Q and -l together.
  322.     Using -q or -Q speeds up transfer speed about 25%.
  323.     
  324.     
  325. OBTYPE
  326.  
  327.     ObType identifies the Oberheim patch data contained a file (or
  328.     several files).  The usage is:
  329.  
  330.         1>  ObType  [options]  File1  File2  File3 ...
  331.  
  332.     There are 4 different output formats for ObType.  I have chosen
  333.     what I consider to be the "most useful" format as the default.
  334.     Here are 3 of the 4 formats:
  335.  
  336.         -s    Short output.
  337.         -m    Medium output.    (The default.)
  338.         -l    Long output.
  339.  
  340.     SHORT output prints only the patch name(s), one per line.
  341.     This is most useful, perhaps, when the output of ObType is meant
  342.     to be processed by another program, or perhaps a Shell script or
  343.     ARexx script.  Example:
  344.  
  345.         1>  obtype -s MyFile
  346.         TRUMPET6
  347.  
  348.     MEDIUM output prints the name and number of each patch in (what
  349.     the author considers) a "useful" format.  If a file contains 1
  350.     multi patch, the numbers of its component single patches are
  351.     printed as well.  If a file contains 100 patches, their names
  352.     and numbers are printed in 20 columns of 10 each (fits on a
  353.     full-size screen).
  354.  
  355.     THIS MODE IS THE DEFAULT.  Example:
  356.  
  357.         1>  obtype MyFile
  358.         Xpander/Matrix-12 single patch 12: TRUMPET6
  359.  
  360.     LONG output prints the filename as well as the patch names and
  361.     numbers.  All output is 1-patch-per-line.  This mode is most
  362.     useful when you specify multiple files on 1 command line.
  363.  
  364.         1>  obtype -l MyFile AnotherFile
  365.         File MyFile:
  366.         Xpander/Matrix-12 single patch 12: TRUMPET6
  367.         File AnotherFile:
  368.         Matrix-12 multi patch 71: BLAATT
  369.  
  370.     The fourth format option is:
  371.  
  372.         -q    Quiet; no screen output except for error messages.
  373.  
  374.     Why in the world do you want "no output" from a program that is
  375.     DESIGNED to do nothing but give output?  Simple -- you can use
  376.     it for verifying the integrity of the data in the file.  If the
  377.     data is OK, then you will see an error message; otherwise, nothing
  378.     is printed (the data is OK).
  379.  
  380.     Note that ObType has no -Q (totally quiet) option -- it really makes
  381.     no sense to have one.  It would cause ObType to have absolutely no
  382.     function whatsoever.
  383.  
  384.     
  385. OBEXTRACT
  386.  
  387.     Suppose you have a 100-patch dump in one file, and you want to
  388.     send only SOME of these files to the Oberheim?  Or what if you
  389.     want to save SOME of the patches in individual files?  This is
  390.     the purpose of ObExtract.
  391.  
  392.     For example, to send patches 2, 6, 7, 8, 9, and 14 from file
  393.     HundredPatches to the Oberheim:
  394.  
  395.         1>  ObExtract -o 2 6-9 14 HundredPatches
  396.  
  397.     Or you could extract these patches and save them in individual
  398.     files:
  399.  
  400.         1>  ObExtract -f 2 6-9 14 HundredPatches
  401.  
  402.     In this case, assuming that "HundredPatches" contains multi
  403.     patches, ObExtract would save the individual patches in files
  404.     named:
  405.  
  406.         HundredPatches.M02    HundredPatches.M06
  407.         HundredPatches.M07    HundredPatches.M08
  408.         HundredPatches.M09    HundredPatches.M14
  409.  
  410.     If you prefer, you may choose to name these files with the
  411.     ACTUAL PATCH NAMES contained in the data.  In the above example,
  412.     the file names might have come out like this:
  413.  
  414.         trumpets.M02        baboons.M06
  415.         string_1.M07        string_2.M08
  416.         _drums.M09        squilch.M14
  417.  
  418.     In general, when you use ObExtract, you must answer 3 questions:
  419.  
  420.         (a)    Which patches do I want to extract?
  421.         (b)    Where do I want them to go -- to the synth,
  422.             to individual files, or both?
  423.         (c)    If the patches are being extracted to individual
  424.             files, what should those file names be?
  425.  
  426.     We will see below how to answer these questions.
  427.  
  428.     The general syntax of ObExtract is:
  429.  
  430.         1>  ObExtract  [options]  PATCH [PATCH...] HundredFileName
  431.  
  432.     The MANDATORY options (yes, I know that is paradoxical) are:
  433.  
  434.         -f    Save data in individual files.
  435.         -o    Send data directly to the Oberheim.
  436.  
  437.     You MUST specify at least one of these options.  You may even
  438.     specify both; this sends the data both to the Oberheim and 
  439.     individual files.
  440.  
  441.     The other "optional" options are:
  442.  
  443.         -a    Overwrite existing files without asking
  444.              your permission (as if you had typed
  445.              "All" at the "Overwrite?" prompt).
  446.             May be used ONLY with the -f ("file") option.
  447.  
  448.         -r    Use "real names" for patch files.
  449.             May be used ONLY with the -f ("file") option.
  450.  
  451.         -q    Quiet; no screen output except for error messages.
  452.         -Q    COMPLETELY quiet -- not even error messages.
  453.         -l    Long output.  This is the default.
  454.  
  455.     Now let's see how to answer the 3 questions (a)-(c) that we
  456.     described above.
  457.  
  458.     (a)    Which patches do I want to extract?
  459.     -------------------------------------------
  460.  
  461.     After the options, you must specify one or more PATCH values.
  462.     These values can be either:
  463.  
  464.     o    A single number between 0 and 99, inclusive; or,
  465.     o    A range of numbers like 34-67 or 10-1.
  466.  
  467.     Ranges may be increasing (like 1-10) or decreasing (like 10-1),
  468.     and are allowed to overlap.  Even crazy lists of ranges like this
  469.     are OK:
  470.  
  471.         1>  ObExtract -f 2-5 99 17-4 54-54 25-80 HundredPatchFile
  472.  
  473.     ObExtract will figure out that you mean patches 2-17, 25-80, and 99.
  474.  
  475.     For example, let's send patches 43 to 76 to the Oberheim, using
  476.     Quiet output.  Here are several EQUIVALENT ways to do it:
  477.  
  478.         1>  ObExtract -q -o 43-76  MyHundredPatchFile
  479.         1>  ObExtract -o -q 43-76  MyHundredPatchFile
  480.         1>  ObExtract -o -q 76-43  MyHundredPatchFile
  481.         1>  ObExtract -oq 50 75 43 44-76  MyHundredPatchFile
  482.  
  483.     Now let's extract all patches to individual file names:
  484.  
  485.         1>  ObExtract -f 0-99 MyHundredPatchFile
  486.  
  487.     (This may be a very slow operation if you are using floppies.)
  488.  
  489.     (b)    Do I want them to go to the synth, to files, or both?
  490.     -------------------------------------------------------------
  491.  
  492.     This question is answered by using either the -f option for files,
  493.     the -o option for Oberheim, or both.
  494.  
  495.     (c)    What file names (if any) should be created?
  496.     ---------------------------------------------------
  497.  
  498.     When extracting patches and saving them in individual files (-f
  499.     option), ObExtract usually creates names for the individual files
  500.     by concatenating:
  501.  
  502.         1)    The name of the 100-patch file;
  503.         2)    A period;
  504.         3)    The letter "S" or "M", for single or multi patch
  505.             data, respectively;
  506.         4)    The patch number, with a leading zero (like 03)
  507.             if the patch number is 1 digit long.
  508.  
  509.     For example, if you extract single patch 8 from file Hundred,
  510.     then it will be stored in the file "Hundred.S08".
  511.  
  512.     If you prefer, you can use the -r ("real names") option to make
  513.     ObExtract use the actual patch name instead of the 100-patch-file
  514.     name.  In the above example, if single patch 83 were named "Brazz",
  515.     then it would be stored in the file "Brazz.S83".
  516.  
  517.     When using -r, you should be aware that patch names are not converted
  518.     exactly into filenames.  Some characters that appear in patch names
  519.     become very inconvenient when used in file names.  Some examples are
  520.     '#' and '?' (AmigaDOS wildcards), ':' (used in volume names), '/'
  521.     (used for directories), and others.  To avoid this problem, ObExtract
  522.     converts any "unusual" patch name characters into underscore ('_')
  523.     characters in the file name.  Anything that is neither a letter nor
  524.     a number is considered "unusual."  In addition, ObExtract
  525.     removes blank spaces (if any) from the end of the file name, and
  526.     converts all letters to lower case.
  527.  
  528.     Here's an example of the conversions that -r does.  If multi patch
  529.     35 has the true name (without the quotes; I include them so you can
  530.     see the blank spaces at the beginning and end):
  531.  
  532.             " $ WOW! "
  533.  
  534.     As a file name, this becomes
  535.  
  536.             ___wow_.M35
  537.  
  538.     Why?  The first 3 characters become underscores, the exclamation
  539.     point becomes an underscore, and the final space is stripped off.
  540.  
  541.     (d)    Miscellaneous other facts about ObExtract
  542.     -------------------------------------------------
  543.  
  544.     If ObExtract is asked to overwrite a file that already exists,
  545.     it prompts you:
  546.  
  547.         File "MyHundredPatchFile.S23" already exists.
  548.         OVERWRITE it? [Yes/No/All, RETURN=No]:
  549.  
  550.     Any response beginning with "y" or "Y" means yes, and the file
  551.     is overwritten.  Any response beginning with "a" or "A" means
  552.     all, and ObExtract will overwrite any other existing files without
  553.     asking you first.  Any other response means no.
  554.  
  555.     NOTE:  You will not be prompted like this if you have specified
  556.     the "-a" option on the command line.  Thus, for a totally quiet
  557.     (and perhaps dangerous) program, you would specify both the -Q 
  558.     and -a options.
  559.  
  560.     When -f is used, patches are extracted into your current
  561.     directory.  If you want the files to be created in another
  562.     directory, first "cd" to that other directory, and then run
  563.     ObExtract.  For example, suppose the file HundredPatches is in
  564.     RAM:, and you want the files to be extracted into the directory
  565.     DF1:patches.
  566.  
  567.         1> cd df1:patches
  568.         1> obextract -f 0-99 RAM:HundredPatches
  569.  
  570.     What happens if you use ObExtract on a file that contains only
  571.     1 patch?  If you try to extract patch 0, it will work, essentially
  572.     making a copy of the data.  If you try to extract any other patch,
  573.     ObExtract will print a message that it cannot find enough data.
  574.  
  575.     ObExtract can be used evade bad data in a 100-patch dump file.
  576.     If a patch is bad (use ObType to figure this out), use ObExtract
  577.     to send all OTHER patches to the Oberheim, and then use ObGet
  578.     to save the 100 Oberheim patches in a new file.
  579.  
  580.     
  581. USING AN ALTERNATE MIDI INTERFACE
  582.  
  583.     By default, the OberSuite programs assume that your MIDI interface
  584.     is connected to your Amiga's internal serial port.  If this is
  585.     not the case, you can override this by using an Amiga environment
  586.     variable and the SetEnv command.  (See your Amiga documentation for
  587.     full details about SetEnv.)
  588.  
  589.     The name of the environment variable is OBERHEIM_DEVICE, and its
  590.     value must be of the following format:
  591.  
  592.         1)    The name of the MIDI device driver, located in the
  593.             DEVS: directory of your system disk.  It should be
  594.             something like "midi.device" or "serial2.device".
  595.  
  596.         2)    One colon character (':').
  597.  
  598.         3)    The unit number for the device.  If you have only
  599.             1 port using the device, your unit number is probably
  600.             zero.
  601.  
  602.     Example:    midi.device:2
  603.  
  604.     Suppose you want to set up OberSuite to use unit 3 of the device
  605.     "AltMidi.device".  Type:
  606.  
  607.         1>  SetEnv OBERHEIM_DEVICE AltMidi.device:3
  608.  
  609.     To check that the value was set correctly, type:
  610.  
  611.         1>  GetEnv OBERHEIM_DEVICE
  612.  
  613.     If you are using a MIDI interface attached to your internal
  614.     serial, port, YOU MAY IGNORE ALL OF THIS STUFF.  By default,
  615.     OberSuite uses unit 0 of the device "serial.device".
  616.  
  617.     I cannot guarantee that OberSuite will work with whatever
  618.     alternate device driver you choose.  But I have tested the
  619.     environment variable mechanism itself, and it works.
  620.  
  621.     
  622. HELP!!!  THE PROGRAMS DON'T WORK!
  623. ---------------------------------
  624.  
  625.     I have tested these programs fairly well on my own equipment:
  626. Amiga 1000 running Kickstart/Workbench 1.3, Golden Hawk MIDI Gold 
  627. interface, and a Matrix-12.  If the programs don't work for you, first 
  628. check:
  629.  
  630. (?)    On your Oberheim, do you have SYSTEMX turned on?  If not, then
  631.     the Oberheim will ignore incoming System Exclusive data
  632.     (such as patch data and patch requests).  Look on the
  633.     MASTER/MIDI/ENABLES page and find the word SYSTEMX.
  634.     It must be underlined.  If not, then press the button
  635.     below SYSTEMX to enable it.
  636.  
  637. (?)    Is your Oberheim's MEMORY PROTECT switch turned to "off"?
  638.     If not, then the Oberheim will ignore incoming patch data.
  639.     The switch is on the back panel.
  640.  
  641. (?)    Is the file "serial.device" in the DEVS: directory of your system
  642.     disk?  If not, most OberSuite programs will refuse to run, and
  643.     you will see an error message like one of these:
  644.  
  645.         Cannot create a message port.
  646.         Cannot create an extended I/O request.
  647.         Cannot open the MIDI device.
  648.         Cannot set the serial parameters.
  649.  
  650.     Boot your Amiga with an original Workbench disk and try again.
  651.  
  652. (?)    Are you running a version of the Amiga operating system that is
  653.     older than 1.3?  OberSuite should work with some or all earlier
  654.     versions, but I have not tested this.
  655.  
  656.     Unfortunately, I do not have version 2.0 of the operating system,
  657.     so I cannot test OberSuite under it.
  658.  
  659. (?)    Are your MIDI cables connected properly?  Remember that MIDI OUT
  660.     must always be connected to MIDI IN, and vice-versa.
  661.  
  662.         OBERHEIM            COMPUTER
  663.         --------            --------
  664.         MIDI IN     <------------------->    MIDI OUT
  665.         MIDI OUT <------------------->    MIDI IN
  666.  
  667. (?)    Are you using the program correctly?  Double-check the instructions
  668.     above.
  669.  
  670. (?)    Are you running another program that uses the serial port, such as
  671.     a communications program, printing program, or another MIDI program?
  672.     If so, this other program may be using the serial port.  (OberSuite
  673.     programs use the serial port in "shared" mode so they don't hog
  674.     the serial port.)  Exit your other programs and try again.  If it
  675.     still doesn't work, reboot to make sure that your other programs
  676.     didn't accidentally leave the serial port "locked".
  677.  
  678.     Some programs allow you to "release" their hold on the serial port
  679.     without exiting.  (Example:  Music-X.)  This may be enough to allow
  680.     OberSuite programs to run.
  681.  
  682. (?)    Are you running any other programs simultaneously with OberSuite
  683.     programs?  It is possible that a badly-written program could
  684.     interfere with the operation of other programs.  Boot your Amiga
  685.     with an original Workbench disk and try again.
  686.  
  687. (?)    Is your synthesizer turned on?  Seriously.  This has happened
  688.     to me.  :-)
  689.  
  690. If you are doing everything right, then there may be a bug in OberSuite.
  691. For example, the OberSuite programs should NEVER crash your Amiga.  If
  692. you believe that there is a bug, please contact me (electronic mail is
  693. preferred).  But first, try to reproduce the bug consistently.  Can you
  694. find a particular set of actions, keystrokes, etc., that ALWAYS make
  695. the program crash?  If you can, then I will be able to find the bug
  696. faster.
  697.     
  698.  
  699. TECHINCAL DETAILS ABOUT THE PROGRAMS
  700. ------------------------------------
  701.  
  702. RELIABILITY:
  703.  
  704. o    All programs may be exited safely by typing ^C (control-C).
  705.  
  706. o    If a patch transfer fails, it is retried up to 10 times before the
  707.     program gives up.
  708.  
  709. o    All programs detect data errors to the fullest extent possible with
  710.     these Oberheim synthesizers.  (Which is not much, I'm afraid; the
  711.     Oberheim does not transmit checksums to validate the data.  I could
  712.     request each patch twice and compare the results, but that would slow
  713.     down the program by 50%.  Maybe this will be an option in a later
  714.     version of the program.)
  715.  
  716. o    Files are not created until after your data is verified.  This means
  717.     that you won't wipe out an existing file if a data transfer fails.
  718.  
  719. o    Existing files are not overwritten unless you give your permission.
  720.  
  721.  
  722. PROGRAMMING CONSIDERATIONS:
  723.  
  724. o    Files are read entirely into memory before they are processed, and
  725.     patches are collected in memory before they are written to disk.
  726.     This method results in much quicker operation (especially for users
  727.     with floppy drives), but it uses more RAM.  In the future, the
  728.     programs may be smarter about their memory use.
  729.  
  730. o    Uses "asynchronous" MIDI input/output for friendly multitasking
  731.     operation.
  732.  
  733.  
  734. SOURCE CODE:
  735.  
  736. o    Written in ANSI C.
  737. o    Compiles under Manx Aztec C version 5.2a.
  738. o    Version 1.03 is in the Public Domain.  Other versions may 
  739.     also be in the Public Domain; check the source code itself
  740.     to be sure.
  741.