This document describes the program "Midi Performance Manager", called "MPM".

MPM documentation: Contents
***************************

Copyright
*********

The program Midi Performance Manager, from now on called MPM, is

(C) in 1992/93
by
Andreas Jung
Dudweiler
Klosterstrasse 21
D-66125 Saarbrücken
Federal Republic of Germany
Phone +49-6897-71959
EMail: ajung@cs.uni-sb.de

MPM is published under the GNU public license. Please refer to the file COPYING for further details.

The programs are provided "as is" without warranty of any kind, either expressed or implied, including, but not limited to the implied warranties of merchantability and fitness for a particular purpose.  The entire risk as to the results and performance of any program is assumed by you.  Should the program prove defective, you (and not Commodore or its dealers or the author of MPM) assume the entire cost of all necessary servicing, repair, or correction.  Further, neither Commodore nor the author of MPM warrants, guarantees, or makes any representations regarding the use of, or the results of the use of, the program in terms of corrections, accuracy, reliability, currentness, or otherwise; and you rely on the program and results solely at your own risk.

Further copyrights:

Midilib is © 1987,1988 by Pregant Badger Music Bill Barton ReqTools, PPLib is © by Nico Francois Nofrag.library is © by Jan van den Baard AmigaGuide, AmigaGuide.info, amigaguide.library, Installer and Installer project icon © Copyright 1991-93 Commodore-Amiga, Inc.  All rights reserved.  Reproduced and distributed under license from Commodore. AMIGAGUIDE AND INSTALLER SOFTWARE IS PROVIDED "AS-IS" AND SUBJECT TO CHANGE; NO WARRANTIES ARE MADE.  ALL USE IS AT YOUR OWN RISK.  NO LIABILITY OR RESPONSIBILITY IS ASSUMED.

Introduction and tutorial
*************************

Requirements
============

MPM runs on all Amiga models with at least 1 MB Ram.  MPM requires Kickstart 2.x (V 37+).  It will not run under Kickstart 1.2/1.3. MPM supports the ECS and AGA chips (if available) but they are not required.  A hard disk is not required but it would make working with MPM much easier and faster.

MPM run on all processors of the 680X0 family of Motorla.  MPM was tested on a slow Amiga 500 and a fast Amiga 2000 with A2630 turboboard.  It is clear that MPM runs faster on an accelerated Amiga than a slow Amiga.

Installation
============

The installation runs automatically. Start the installation procedure with a double-click of the icon Install English. After the Installer program of Commodore is loaded it will ask where to install the programs and its files. The Installer program has an online help function that you can use if you should have problems.

The following files must be in the drawer LIBS:

reqtools.library, powerpacker.library, midi.library, amigaguide.library, nofrag.library
     They are part of the MPM package and are installed by the Installer.

icon.library, workbench.library, commodities.library, rexxsyslib.library
     These libraries are part of Workbench 2.0 or higher and are normally already placed in the LIBS: directory

locale.libary
     The locale.library ist part of Workbench 2.1 or higher. Currently MPM does not support it in the whole. The system messages are already localized but not the gadget and menu texts. If you don't have this library you are not able to use MPM with your mother language.

You must have a logical assign for EnvArc: on your boot- or harddisk. In the normal case this is done by the startup-sequence. This assign must exist because MPM will save its preferences files there.

After installing and starting MPM you have to select the preferences menus and adjust them to your system.

Your synthesizers and midi devices must be plugged to your Amiga with the help of a MIDI interface.

Tutorial
========

MPM offers you a lot of possibilities to manage your synthesizer equipement. Suppose you have an Amiga and some synthesizers that are attached to your Amiga with a Midi interface. Programming more than one synthesizer is very difficult and takes a lot of time. Therefore MPM was written. MPM automatizes a lot of things for you.

A setup is created for all settings. It contains all operations that are neccessary to control the synthesizers. Operations are program changes, controller messages and many more. You can perform all operations by pressing a single button.

MPM has a synthesizer editor to integrate MPM in your synthesizer enviroment.

With help of the dump editor it is possible to send and receive dumps from any midi device or synthesizer.

MPM has an ARexx port. So MPM is able to communicate with other programs. Also other programs can control the work of MPM.

Beneath the editors MPM offers some modules that run independant of MPM and use the multitasking facilities of the Amiga. The user interface is easy use and was programmed in respect to the Commdore User Interface Style Guide

MPM offers an online help system.  It uses the AmigaGuide system that is included in this MPM package.  Pressing the HELP button affects that MPM will give you a context sensitive help.  You can browse through the whole documentation by pressing the buttons on the wished topics.

Operations, subsetups, setups and setuplists
============================================

In this section you will learn the meaning of some concepts realized by MPM.  It is neccessary that you understand them.  You need them for working with MPM.

Let's suppose you are a keyboarder in a band and you would perform live.  For every song you must take lots of adjustments like program changes, controller settings and so on.  This takes a lot of time and is susceptible for errors. MPM allows you to create a setup that contains all settings for a song.  A setup consists of 16 sub-setups4, one for every MIDI channel.  A sub-setup consists of operations that are atomic things like program changes, controller messages, dumps etc.  All operations are bound to one MIDI channel.

A list of setups is called a setup-list. To remain at our example, imagine you have setups called "Song 1", "Song 2" etc. You can save and load a setup-list and perform the setups with just one "key pressure".

First steps
===========

To ease you the use of MPM I will give you an example that shows some important functions of MPM. Start MPM and take care that your synthesizers are correctly attached to your Amiga. Press the Easy dump-editor button in the main window. MPM will now open the window of the easy dump-editor. Now repeat the following steps:

- Press the button Get dump. This makes MPM to wait for an incoming dump. Can can return to the easy dump-editor by pressing the Stop button.

- Now let your synthesizer send a dump. You must a look at the manual for you synthesizer because this different on every synthesizer.

- MPM will close the window with the Stop button when it received the dump. The length of the dump is shown in the window Size.

- The dump is now in the memory of the Amiga. Now you can save the dump by pressing the Save dump button-

- You can load a dump from disk by pressing the button Load dump. A file-requester will appear where you can select a dump file.

- You can send a dump by using the Send dump option.  MPM will send the dump that is currently in the memory of your Amiga.

Now I hope you have learned to send and receive dumps. However this example shows only some minor features of MPM. MPM will play one's trump card if you have configured the attached synthesizers. Please read the next sections of the tutorial as well.

How to use the synthesizer- and dump editor
===========================================

In this section you learn to use the dump- and the synthesizer editor.  You synthesizer must be able to send and receive dumps to do the following steps. You also have to take the manual of your synthesizer because you will need to enter some interal datas.

- Start MPM and press the Synthesizer-Editor button.

- Press New to create a new synthesizer file. Enter the name of you synthesizer. The name will appear in the field over the button.

- Search in your synthesizer manual the section about dump requests.  A dump request is a series of bytes that arranges your synthesizer to send a dump.

- Press Add dump request. A requester will appear to enter an alias-name for the dump-request. Enter something like "Get bank". After pressing the return button you must enter the series of bytes. Seperate the bytes with a comma. You can mix both decimal and hexadecimal numbers. Hexadecimal examples are marked with a leading 'H'.

Example   240,20,30,40,247    or   HF0,H14,H1E,H28,HF7
or   HF0,20,H1E,40,HF7

The list on the right side of the window shows the alias-names of the dump-requests.

- Select Parameters to do further adjustments.  Adjust the slider SysEx Channel Byte to that byte that contains the information of the channel to send a dump to. (Refer to Synth-Editor). This value is very very important for working with MPM.

- Press Save to save the settings of the synthesizer to disk.

- Leave the synthesizer-editor by pressing Done

Now you have returned to the main window of MPM.  Start the dump-editor by pressing the button Dump-Editor.  The window of the dump-editor show two lists in the upper half of the window.  The left list shows all synthesizer files, the right one shows the alias-names of the selected synthesizer files. Select a synthesizer file in the left list (single click on a entry).

- Select a dump-request from the right list with a mouse-click.

- If you have choosen the SysEx dumps are channel specific Synthesizer-Parameters in the window you must adjust the slider Channel to send to the receive channel of your synthesizer.

- Press the Get dump button. MPM will now send the dump request to your synthesizer and wait after that you the synthesizer to send the requested done. Use the Stop button to interrupt the operation.

- Now you can save or send the received dump. Refer to the corresponding chapters in this manual for detailed informations.

How to use the setup editor
===========================

A setup is the central point of MPM and contains all commands that are neccessary to initialize your synthesizer.  A setup consits of 16 sub-setups, one for each for the 16 MIDI channels.  All operations belong to one sub-setup. Operations are standard MIDI messages like program changes or controller messages. Operations are also synthesizer specific messages like SysEx data. The following example gives you an overview over the setup-editor and its features.

     Press the Add button to create a new setup.  MPM asks you to enter a name for the setup.

     Select the created setup by clicking on the entry in the list.  Then press the Edit button to start the setup-editor.

     Within the window of the setup-editor there are the two fields Setup: <Name> and Synth:  <none>.

     Press the Synth button to select a synthesizer file.

     Press the Add midi operation button.  MPM will now open a window that contains buttons for all supported MIDI messages.  Select Prog change for a program change.  Now enter the number of a program.

     Repeat the last step as long as you want.

     Select Save to save the setup.

     Press the Test setup button.  MPM will now execute all entered operations

I hope you have learned how to work with setup-editor. A description of all buttons is given in Setup-Editor.

Main window
***********

You will see the main window after starting MPM.  MPM uses its own screen. The list on the left side of the window will show all loaded setups. This list is called setup list. You can save the setup list with help of the Project menu.

Explanation of the buttons:

Add
     Create a new setup. You give a name for the created setup

Remove
     Remove the selected setup from the setup-list.

Load
     Load a setup from disk. A filerequester will appear where you can select any saved setup.

Edit
     Start the setup editor (See Setup-Editor).

Sort
     Sort all setups of the setup list.

Buttons on the right side of the main window:

Top
     Move selected setup to the top of the setup list.

Up
     Move selected setup one position up.

Down
     Move selected setup one position down.

Bottom
     Move selected setup to the end of the setup list.

Perform first
     Perform all operations of the first setup in the setup list.

Perform last
     Perform all operations of the last setup in the setup list.

Perform next
     Perform all operations of the next selected setup in the setup list.  Use this button to execute all setups one after the other.

Perform previous
     Perform all operations of the previous selected setup in the setup list.  Use this button to execute all setups one after the other.

Perform selected
     Perform all operations of the selected setup in the setup list.

Dump-Editor
     Start the dump editor (See Dump-Editor).

Synth-Editor
     Start the synthesizer editor (See Synth-Editor).

Easy Dump-Editor
     Start the easydump editor (See Easydump-Editor).

Menus of the main window:

Project/Info/About MPM
     Show version and copyright requester.

Project/Info/Usage
     Show some system informations

Project/Info/Thanks
     Tells you about the people that are involved in the development of MPM.

Project/Info/Registration
     Show informations about the user

Project/New
     Remove all setups and initialize setup list.

Project/Load setuplist
     Load a setup list from disk.

Project/Append setuplist
     Append a setup-list from disk to current setup list.

Project/Save setuplist
     Save setup list under the name default.sl.

Project/Save setuplist as
     Save setup list Save setuplist with the help of an file requester.

Project/Iconify
     Iconify the window of MPM.  MPM will show an icon on the workbench that is called MPM (iconified).  Click this icon to reopen the window of MPM

Project/Quit
     Quit MPM

Tools/Midi Monitor
     Start the MIDI monitor of MPM (See Midi-Monitor)

Tools/Midi Controller Mixer
     Start the controller mixer of MPM (See Midi-Mixer)

Preferences/System
     Common perferences

Preferences/Monitor
     Perferences for the MIDI monitor of MPM

Preferences/Hotkeys
     Select the hotkeys for MPM

Preferences/ARexx
     Perferences for the ARexx port of MPM.

Preferences/Palette
     Screen colours of MPM

Preferences/Screen
     Screen mode of MPM

Preferences/Load preferences
     Load preferences from Envarc:MPM/mpm.pref

Preferences/Load preferences as
     Load a custom perferences file

Preferences/Save preferences
     Save pthe references to file Envarc:MPM/mpm.pref

Preferences/Save preferences as
     Save the perferences to a custom file

Preferences/Edit controllers
     Edit the names of controllers

Preferences/Edit program names
     Edit the names of the programs

Command/Open ARexx command shell
     Start the ARexx command shell (See MPM_and_ARexx).

Command/Execute ARexx script
     Execute an ARexx script

Command/Execute AmigaDOS command
     Execute an Amiga file or an AmigaDOS command

Misc/Files/Delete file
     Delete a file

Misc/Files/Rename file
     Rename a file

Misc/Files/Clone file
     Copy a file

Misc/Files/Create directory
     Create a new directory

Editors
*******

Synthesizer editor
==================

Before working with MPM you must configure all attached synthesizers. The settings in this window are important for working with the dump editor. MPM must know the dump requests of your synthesizers when it should be able to send and receive dumps automatically.

On the right side of the window MPM shows the dump-requests and the synthesizer operations. You can select and operation/dump request with a click on the item. Then select a button on the left side. They are descrided below.

Load
     Load a synthesizer file from disk

Save
     Save the actual synthesizer file to disk.

New
     Remove the current synthesizer file from the editor and initialize all data.

The following functions are available on dump rquests and operations:

Add dump request
     Add a new dump request.  First you have to enter an alias name like Get bank or Reset synthesizer to GS mode.  Second you must enter the request itself.  The request is a sequence of numbers like 192,10,20 or hc0,ha0,h14.  Hexadecimal number are marked with a leading 'H'.  Take a look at the included synthesizer files.  A dump request is displayed as DR:  <alias name>

Add operation
     Add a new synthesizer operation. The input that you have to made is the same like in Add dump request. Synthesizer operations are used in the setup editor. A operation is displayed as OP: <alias name>

Test request/operation
     Pressing this button initiates MPM to send the current selected dump-request or operation.

Edit
     Select this if you want to change an existing dump request/operation. First MPM will display the alias name and then the dump request/operation itself.

Remove
     Remove a dump request/operation.

Clone
     Duplicate the current operation/dump request

Parameters
     Press this button to open the window for the Synthesizer-Parameters.

Synthesizer parameters
----------------------

The settings that you make in this window are very significant for the work of MPM.  You have to know some internal things about your synthesizer.  It is neccessary for you to know how your synthesizer sends dumps.  You will find the requested informations in the manual of your synthesizers.

SysEx dumps are channel specific

     Set this flag if the dumps for your Synthesizer contains channel specific datas. Dumps of some synthesizers contain a special bit that contains the receive or send channel of the synthesizer. Refer to the manual of your synthesizer for further informations.

SysEx Channel Byte

     You must set this slider to that byte that contains the receive channel. This is only neccessary if you have set the flag above. The SysEx Channel Byte ist normally a part of header. Take a look at the following example. It shows the header of a SysEx dump from the Kawai K1-II synthesizer:

                 Byte 0: Status     hF0    System exclusive
                 Byte 1: Kawai ID   h40
          ---->  Byte 2: Channel    h0x    h00 <= x <= h0f

     In this example you have to set the slider to the value 2 because byte #2 contains the number of the channel.

Default channel

     The  Default channel is equal to the receive channel of you synthesizer. This flag is only available and neccessary if SysEx dumps are channel specific is set.

Multiple dumps
     Set this if a dump of the synthesizer consists of more than one SysEx block.

Slow send mode for dumps
     Set this flag if there are some timing problems with the synthesizers.  If set MPM will make a break between sending a multiple dumps.

Delay
     If the flag above is set you change select the time between transmitting two SysEx blocks.  The delay is shown in milli seconds.  Maximum is ten seconds.

Dump editor
===========

With the help of the dump editor it is possible to send and receive dumps from the attached synthesizers. Before using the dump editor you must select the synthesizer editor and enter the dump request for the synthesizers. Without dump requests the use of the dump editor makes no sense.

The list on the left side of the window show all available synthesizer files. You can selected such a synthesizer file by clicking on a synthesizer entry. The dump requests of the selected synthesizer are displayed in the list on the right side of the window.

Update list
     Update the list of available synthesizers. Use this button when you start the synthesizer editor from the dump editor and when you created a new synthesizer file. MPM will reread the directory containing the synthesizer files and refresh and the left list.

Synth editor
     Start synthesizer editor (See Synth-Editor)

Load dump
     Load a dump from disk. Crunched dumps are decrunched automatically.

Save dump
     Save the current dump to disk. MPM is able to crunch dumps. This will reduce the size of a dump. The efficiency depends on your choices that you made in the Preferences.

Get dump
     First select a dump request from the list of the right list. Press the Get dump to send the dump request and wait for the dump after that. Press the Stop button to break this operation.

Send dump
     Send synthesizer to the synthesizer.

Ascii view
     See View_Dump

Hex view
     See View_Dump

Edit dump
     If you want to wish to edit the dump then press this button.  You can choose your favourite editor from the preferences Files.

Free buffer
     Remove the dump from memory of your Amiga and release allocated memory.

Comment
     You can save a dump with a comment. The comment is saved as an AmigaDos comment. The AmigaDos command "list" will display the comment.

Channel to send
     Some synthesizers are only able to receive a dump on one channel (receive channel). See Synthesizer-Parameters for further informations on this item. Adjust this slider to the receive channel of your synthesizer.

View dump
---------

With the functions Ascii view or Hex view you can show the contents of the dump.  Ascii view shows the dumps in ASCII code, Hex view shows both ASCII and hexadecimal code.

Use the cursor keys to scroll through the dump:

     cursor up/down: scroll one line up/up

     Shift + cursor up/down: Scroll one page up/down

     Ctrl + cursor up/down: Jump to top/bottom of dump

Easydump editor
===============

     The easydump-editor is easier to use than the normal dump-editor because you don't have to create any synthesizer files with dump requests and so on. This editor allows you to load, save, send and to receive dumps.

Load dump
     Load a dump from disk into the memory of your Amiga

Save dump
     Save a dump to disk.

Send dump
     Send dump to synthesizer

Get dump
     Receive a dump from a synthesizer. But you must initiate the transfer at your synthesizer. Take a look at your synthesizer manual.

Multiple dumps
     Setting this flag allows MPM receive a dump consiting of several SysEx blocks. Normally MPM finishs the Get dump operations when a SysEx block was received. Press the STOP button when the synthesizer has transmitted all data.

Slow send mode
     If you have send a dump that contains more than one SysEx block some synthesizers have timing problems receiving these data. They are sometimes to slow to collect the incoming data. The result is something like a overflow or a MIDI data error. When setting the Slow send dump flag MPM will make a break of 300 ms between after sending a SysEx block. This should be enough for most synthesizers. Notice that this option slows down sending a dump.

Setup editor
============

Every setups consists of 16 sub-setups, one for each of the 16 MIDI channels. On left side of the window there is a a gadget with buttons numbered from 1 to 16. Use this gadgets to edit a sub-setup. The operations for a sub-setup are displayed in the middle of the window. The gadgets Setup displays the name of the current setup. Synth show the name of the synthesizer file for the current sub-setup.

On the right side of the windows there are three sections with buttons. The buttons are arranged for working with setups, sub-setups and operations. The meaning of the buttons is described below.

There are some operations available for working on setups:

Init setup
     Init setup initializes the setup. All operations are removed. You must confirm this operations because there is no way to restore a setup. This operation must be confirmed.

Test setup
     Test setup will execute a setup. All operations are send via MIDI to your equipement. The operation that is currently executed by MPM is displayed in a window. You can finish or pause the execution by pressing the STOP or Pause buttons.

The following are available for working on sub-setups:

Copy
     MPM will copy all operations of the current sub-setup to another sub-setup. A window will appear with buttons numbered from 1 to 16. Because the source and target sub-setup must be different, the button of the current sub-setup is not selectable.

Swap
     Swap the operations of the current sub-setup with another sub-setup.

Move
     Move all operations of the current setup to another sub-setup

Clear
     Remove all operations of the current sub-setup.  Warning:  There is no way to restore lost data. You must confirm this choice.

Test
     This works exactly like Test setup. But only the operations of the current sub-setups are transmitted. (See Test setup)

Synth type
     You must select a synthesizer file for each used sub-setup.  This is neccessary when you are working with dumps. However you can create a dummy synthesizer file when you are using no dumps. Use the Synthesizer editor to create a synthesizer file.

Every sub-setup consists of a list of operations. The following functions are available for operations:

Top
     Move selected operation to start of list

Up
     Move selected operation one position up

Down
     Move selected operation one position down

Bottom
     Move selected operation to end of list

Edit
     Change the values of the selected operation. The same effect has a doubleclick in the listview gadget.

Clone
     Make a copy of the selected operation and append it at the end of the list of operations.

Test
     Execute currently selected midi operation.

Remove
     Remove selected operation

Add Midi operation
     See Add_Midi_Operation

Add synth operation
     See Add_Synth_Operation

Save
     Save the whole setup under its name

Save as
     Save the setup under a custom name

Reload
     Reload will undo any changes of the setup by loading the old setup from disk.

Done
     Leave the setup editor and return to the main window.

Add Midi operation
------------------

This windows displays all available common Midi operations like program changes, controller messages and so on. Select an operation by clicking on the desired button. Dependant on the button a  requester will appear that will ask you for some parameters. E.g. when you select the Send dump you must tell MPM which dump should be send.

Select program
..............

This requester displays all program names from 0 to 127. The default names are the program names of the GS/GM standard. You can change the names with the preferences Edit_program_names.

Select controller
.................

This list displays all controllers.  Some controllers have names.  The names can be changed with the preferences Edit_Controller_Names. Select a controller without a name by entering the controller number.

Add synthesizer operation
-------------------------

In the setup editor you have choosen a synthesizer for every sub-setup. In the synthesizer editor you have the possibility to configure operations that are specific are a synthesizer. These operations are displayed in this window. Remember that the displayed operations depend on the the synthesizer of the current sub-setup.

Midi tools
**********

Additionaly to the mentioned editors MPM offers some useful Midi modules. Every of the following modules run as as its own process that means every module is independant.  The windows of the modules can be moved on the screen of MPM freely. This is interesting on amiga systems with extended graphic facilities e.g. ECS, AA chipset or graphic boards like Retina or Domino.  You can select a graphic mode such that there will be enough space for all windows.

Midi monitor
============

The Midi Monitor allows you to watch the incoming MIDI messages.  The monitor offers several filters and output facilities.  In the right upper corner of the window there are 16 gadgets numbered from 1 to 16.  A checked gagdet means that MPM displays all messages for this channel.  Use the gadgets All/None to select all or none of the channels.  Below of the channel gadgets there are the gadgets for the message filters.  A checked gadgets tells MPM to display all messages of this type.  Selecting None affects that nothing will be displayed.

In the lower part of the window there are several gadgets to select the way that MPM will output the messages. Active Sensing suppresses the output of the active sensing signal that is transmitted by every synthesizer every 0.3 seconds (very annoying).

The received datas are displayed either by their numeric value or by their meaning.  E.g MPM receives a note on message.  MPM will output either Note on, Number X, Velocity Y or a three byte message.  The gadget Numbers tells MPM to display data in hex or decimal notation.

SysEx determines if system exclusive messages should be displayed in the whole or only the first eight bytes.

MPM allows you to write the output of the MIDI monitor to a file.  Press Logfile/No log to disable or enable this feature. The name of the logfile must be selected from the preferences of the MIDI monitor (see Midi-Monitor).

Pause supends the output of the MIDI monitor.

Midi mixer
==========

The Midi Channel Mixer allows you to edit every controller in real time. The window of the mixer displays 16 sliders - one for every of the 16 channels. You values of the sliders range from 0 to 127. All available controllers are displayed on the right side of the windows. MPM shows only these names that are known to MPM (See Edit_Controller_Names). Other controllers without a known name can be selected by entering their controller number. The buttons 127, 63 und 0 set the values of the slider for all channels to 127, 63 or 0.

For example you can use the volume controller to change the volume in real time.  You must take a look to the manual of your synthesizer to determine if your synthesizer supports a special controller or not.

You can move the sliders with the cursor keys.  The slider of the current channel is marked with a box around it. The cursor key left/right changes the channel. The up/down key changes the value of the controller for the selected channel.

Buttons of the controller mixer:

127
     Set all values for all 16 channels to 127 (Maximum)

63
     Set all values for all 16 channels to 63.

0
     Set all values for all 16 channels to 0 (Minimum).

Send all
     Transmit the current values of the controller mixer of the selected controller to all 16 channels

Menus of the controller mixer:

Load snapshot
     Load mixer settings from the  file Envarc:MPM/mpm-default.mix.  This file is loaded by MPM when you start the mixer.

Load snap as
     Load mixer settings from a custom file.

Save snap as
     Save mixer settings to the file Envarc:MPM/mpm-default.mix.  This file is loaded by MPM when you start the mixer.

Save snapshot as
     Save mixer settings to a custom file.

Midi patch bay
==============

The patch bay allows you to receive MIDI messages from any channel and allows you to send the data back on other channels.  On the window you can see a matrix that consists of 16 rows that represent the MIDI input channels.  When you select e.g.  the columns 7 and 8 in the third row MPM will send all incoming MIDI messages from channel 3 back to the channels 7 and 8.  You can also select which kind of messages should be send back.  On the right side of the matrix you can see the following abrevations:

         NO   Note on
         NF   Note off
         CT   Controller
         AT   Aftertouch
         PP   Polypressure
         PC   Program change
         PB   Pitchbender

Click on DF (= Default) to reset the values of one channel of the patch bay.

Menus of the MIDI Patch Bay

Reset all
     Reset matrix of the patch bay (input channel = output channel)

Load map
     Load matrix settings from the file Envarc:MPM/mpm-default.bay.

Load map as
     Load matrix settings from a custom file.

Save map
     Save matrix settings to the file Envarc:MPM/mpm-default.bay.

Save map as
     Save matrix settings to a custom file

Leave
     Leave patch bay.

Midi Message Generator
======================

The MIDI message generator allows you to create any message up to a length of 18 byte. You you select the length of the message with the Length slider. The single bytes of the messages are changed with the long vertical sliders. You can create up to 17 different messages. Any of them can be choosen with the MX gagdet on the right.

Buttons and sliders:

New
     Press this button to create a new MIDI message.  An existing message will be deleted. Every message must have a name that will appear in the upper part of the window.

Save
     This button will save the current message to disk. MPM takes the name of the message as default file name.

Load
     Load a message from disk.

Edit
     You can change the name of the message with the Edit button.

Send
     Transmit the current message.

Always/On request

Menus:

Reset all
     Reset all values of the message generator. All existing messages will be deleted.

Load map
     Load the file EnvArc:MPM/MPM-default.mgen with all the messages it contains.

Load map as
     Load a custom message file

Save map
     Save all messages to the file EnvArc:MPM/MPM-default.mgen.

Save map as
     Save all messages in a file. You can select a custom file.

Midi-Player
===========

The Midi player is able to play both MIDI format 0/1 songs and Music-X songs. Press the File button to select a file.

Use Start/Stop to start/stop the song. Change the speed with the Tempo slider. Resolution specifies the interal resolution of the timer. Use a higher resolution on faster Amigas for better accuracy. The arrows buttons will change the song position.

Limitations for Music-X songs: no mastertracks, no relative sequences, no SysEx data

Limitations for MIDI files : none known

Preferences
***********

Before using MPM you must adjust the preferences to your system. The most important preferences are the Path and Files preferences. The preferences are saved and loaded with the menus from the main window.

System preferences
==================

Overwrite warnings
     Give a warning when you are trying to overwrite an existing file

Warnings
     Suppress warnings

Crunch dumps
     Crunch dumps, synthesizer and setup files.

Close workbench
     Close workbench screen when starting MPM

Make MPM screen public
     Allow other programs to open their window on the screen of MPM.

Make MPM screen Shanghai
     Programs that used to open their window on the workbench will now open their window on the screen of MPM.

Crunch depth
     Efficiency to crunch files. Fast: fast but not as good as Best that is a little bit slower.

Speedup buffer
     Size of a temporary buffer when loading crunched files. A larger buffer means that crunching files is faster than with a smaller buffer

SysEx buffer
     Maximum size of the buffer that MPM will allocate for SysEx messages. The value must be greater than the largest that MPM should receive in the dump editor.

Monitor
=======

Within this preferences you can choose the MIDI messages that will be displayed by the MIDI monitor of MPM. These preferences are used by the MIDI monitor when it is started the first time.

MPM offers the following filters:

Note on

Note off

Controller

Aftertouch

Poly press

Program change

Pitchbender

SysEx
     System exclusive MIDI message

SysCom
     System common MIDI messages

Real time

Logfile
     See Midi-Monitor

Active sensing
     See Midi-Monitor

Display mode
     See Midi-Monitor

SysEx mode
     See Midi-Monitor

Number mode
     See Midi-Monitor

For further informations refer to Midi Operations.

Hotkeys
=======

Hotkeys are keyboard shortcuts to initiate a special action.  MPM uses this feature to start the MIDI tools or to bring the window of a running tool to front.  You can choose any valid commodity keyboard combination e.g. lalt control f1.  Refer to your Amiga Workbench reference manual.

A special hotkey is Panic button.  MPM will send a all-notes-off message on every of the sixteen channels when using this hotkey

Commodity priority is the position that holds MPM as commodity. Other program might also use the same hotkeys as MPM.  The program with the higher priority will get the message that a hotkey was used.  Select Hotkeys enabled to activate or deactivate the hotkeys.  New hotkeys settings are active after restarting MPM.

Palette
=======

Here you can change the colours of the screen of MPM.  The number of the colours depends on the selection of the screen preferences Screen.

Screen
======

The screenmode requester displays all available resolutions of your Amiga. MPM supports all resolutions and most of all graphic boards like Domino or Retina.  The number of colours can be changed with the slider Depth. The default number of colours is 4.  The larger number makes no sense because MPM uses internal only 4 colours.  A larger number will slow down the system.

ARexx port
==========

Command Shell
     Specification of the window of the ARexx command shell. The format of the window is AmigaDOS specific. Change this field carefully. You may not cange .../SCREEN MPM because the windows should appear on the screen of MPM and not anywhere else.

Output Window
     See Command Shell

Portname
     Name of the ARexx port(default:  MPM)

ARexx server enabled
     Enable or disable the ARexx port of MPM. The ARexx menus from the main window are ghosted if the ARexx server is disabled.

Edit controller names
=====================

There are two kind of MIDI controllers:  common and synthesizer specific controllers.  An example for common controllers are the volume (7) and the modulation (7) controller.  The names of the controller can be changed here. The name of the controllers are used in the MIDI monitor, the controller mixer and in the setup editor.

Save/Save as
     Save the file Envarc:MPM/mpm-default.ctrl or a custom file with the controller names.  MPM will read Envarc:MPM/mpm-default.ctrl when it is started.

Load/Load as
     Load the file Envarc:MPM/mpm-default.ctrl as default controller file. Select Load as to read a custom controller file.

Edit
     Edit selected controller entry

Remove
     Remove selected controller entry

Edit program names
==================

With Edit program names it is possible give a name to any of the 128 possible programs.  This is interesting for for synthesizer that are compatible with the GS/GM standard. The choosen names are displayed within the setup-editor when a program change has been selected for an operation.

Save/Save as
     Save the program names to the file Envarc:MPM/mpm-default.prog or to a custom file.  At startup MPM will read the file Envarc:MPM/mpm-default.prog and use for default program names

Load/Load as
     Load file Envarc:MPM/mpm-default.prog as default file for program names.  Load as reads a custom file with program names.

Edit
     Change name of selected program entry

Remove
     Remove selected program entry

Paths
=====

In the window Paths you must enter the locations and the names of some files that are used by MPM. Please make the changes carefully.

Path setups
     Path for setups

Path setuplists
     Path for setuplists

Path synths
     Path for synthesizer files

Path dumps
     Path for dumps

Path commands
     Path for MIDI messages of the Midi-Message-Generator

All paths must be absolute. That means that the pysical or logial device must be part of the path, e.g. DH0:MPM/setups.  It is not allowed to use relative paths e.g. MPM/setups.

Files
=====

In the window Files you must enter the locations and the names of some files that are used by MPM. Please make the changes carefully.

Hex editor
     Path of the hex editor to start from the Dump-Editor.  MPM has not its own editor.  Change this field to your favourite hex editor.  I prefer Newzap.

Default synth
     Synthesizer file that is loaded when starting MPM

AmigaGuide File
     AmigaGuide file that should be used for the online help. Please select the AmigaGuide file that is written in your language.

All paths must be absolute. That means that the pysical or logial device must be part of the path, e.g. DH0:MPM/setups.  It is not allowed to use relative paths e.g. MPM/setups.

Startup preferences
===================

Here you can select which Midi-Tools will be started at the startup of MPM.

Load and save of preferences
============================

From the menus of the main window you can save or load any preferences file. MPM will load EnvArc:MPM/mpm.pref when it is started.  The same file is used when you select the functions Load preferences and Save preferences.  If you choose Load preferences as or Save preferences as a filerequester will appear and you can select any custom preferences file.

MPM and ARexx
*************

MPM has an ARexx Port to give external programs access to MPM. The default port name is MPM.  The port name can be changed from the ARexx preferences.  In the ARexx menu there is the function Open command shell.  The command shell allows to enter ARexx command direct.  If you enter e.g.  progchange 1 20 this will do a change to program 20 on channel 1. You can leave the command shell by clicking the closewindow gadget or by the keyboard shortcut Control - Backslash.  The function Execute ARexx script loads and executes an ARexx script. The output of the script is displayed in a window. The positions of the windows can be changed in the preferences

Example of an ARexx script:

     /* An ARexx script must contain as first line a comment line !!!     */

     address MPM                 /* address ARexx port of MPM             */
     progchange 1 11             /* select program 11 on channel 1        */
     noteon  1 40                /* play the note 40 and 45 on            */
     noteon  1 45                /* channel 1                             */
     delay 150                   /* wait 3 seconds (150 * 20 ms)          */
     allnotesoff 1               /* turn all notes off                    */

All ARexx commands are described in the chapter ARexx Command Set.

ARexx command set
=================

The arguments of every command are placed behind the command. The addition /A that this argument is required. /N means that this parameter is a number. Let's take a program change as example:

PROGCHANGE
Arguments: CHN/A/N PROG/A/N
Return: none

PROGCHANGE expects the parameters CHN (channel number) and PROG (program number). No value is returned. For a changel to program 5 on channel 12 you can select between the following styles:

     progchange CHN=12 PROG=5  or
     progchange CHN 12 PROG 5  or
     progchange 12 5

As you can see there is no need to use the keywords.  However I suggest you should use them for more clearness especially in ARexx scripts

ACTIVESENSING
Arguments: none
Return: none
Meaning: Active sensing

ALLNOTESOFF
Arguments: CHN/A/N
Return: none
Meaning: Turn off all notes on channel CHN

BALANCE
Arguments: CHN/A/N VAL/A/N
Return: none
Meaning: Balance controller

BREATH
Arguments: CHN/A/N VAL/A/N
Return: none
Meaning: Breath controller

CONTROLLER
Arguments: CTRL/A/N CHN/A/N VAL/A/N
Return: none
Meaning: any Controller

DATAENTRY
Arguments: CHN/A/N VAL/A/N
Return: none
Meaning: Data entry controller

DELAY
Arguments: TIME/A/N
Return: none
Meaning: Delay, TIME is a multiple of 20 ms (TIME=50 is 1 second)

EXPRESSION
Arguments: CHN/A/N VAL/A/N
Return: none
Meaning: Expression controller

GENERAL1
Arguments: CHN/A/N VAL/A/N
Return: none
Meaning: General1 controller

GENERAL2
Arguments: CHN/A/N VAL/A/N
Return: none
Meaning: General2 controller

GENERAL3
Arguments: CHN/A/N VAL/A/N
Return: none
Meaning: General3 controller

GENERAL4
Arguments: CHN/A/N VAL/A/N
Return: none
Meaning: General4 controller

LOCALOFF
Arguments: CHN/A/N
Return: none
Meaning: Turn off local mode on channel CHN

LOCALON
Arguments: CHN/A/N
Return: none
Meaning: Turn on local mode on channel CHN

MIDICLOCK
Arguments: none
Return: none
Meaning: Midi clock message

MIDICONTINUE
Arguments: none
Return: none
Meaning: Midi continue message

MIDIRESET
Arguments: none
Return: none
Meaning: Midi reset message

MIDISTART
Arguments: none
Return: none
Meaning: Midi start message

MIDISTOP
Arguments: none
Return: none
Meaning: Midi Stop message

MODWHEEL
Arguments: CHN/A/N VAL/A/N
Return: none
Meaning: Modulation controller

NOTEOFF
Arguments: CHN/A/N NR/A/N VEL/N
Return: none
Meaning: Turn note NR off on channel CHN with velocity VEL

NOTEON
Arguments: CHN/A/N NR/A/N VEL/N
Return: none
Meaning: Turn note NR on on channel CHN with velocity VEL

OMNIOFF
Arguments: CHN/A/N
Return: none
Meaning: Disable omni mode on channel CHN

OMNION
Arguments: CHN/A/N
Return: none
Meaning: Enable omni mode on channel CHN

PAN
Arguments: CHN/A/N VAL/A/N
Return: none
Meaning: Pan controller

PERFORM
Arguments: SETUP/A
Return: none
Meaning: Load and execute setup SETUP

PERFORMNEXT
Arguments: none
Return: none
Meaning: Select and execute next setup of setup list

PERFORMSELECTED
Arguments: none
Return: none
Meaning: Execute current setup of setup list

PERFORMFIRST
Arguments: none
Return: none
Meaning: Select and execute first setup of setup list

PITCHBENDER
Arguments: CHN/A/N VAL/A/N
Return: none
Meaning: Pitchbender controller

PORTATIME
Arguments: CHN/A/N VAL/A/N
Return: none
Meaning: Portatime controller

PROGCHANGE
Arguments: CHN/A/N PROG/A/N
Return: none
Meaning: Program change PRG on channel CHN

QUIT
Arguments: none
Return: none
Meaning: Quit MPM

SEQUENCE
Arguments: CHN/A/N SEQ/A
Return: none
Meaning: Send the sequence SEQ of bytes to channel CHN.
Exp.: sequence hc0,20 performs a program change 20 on channel 1

SONGPOSITION
Arguments: POS/A/N
Return: none
Meaning: Set song position pointer to POS

SONGSELECT
Arguments: NR/A/N
Return: none
Meaning: Select song NR

TUNEREQUEST
Arguments: none
Return: none
Meaning: Send tune request

VOLUME
Arguments: CHN/A/N VAL/A/N
Return: none
Meaning: Volume controller

Meaning of the arguments abbreviations

CHN channel
Range: 1---16

VAL general value
Range:  0---127

NR at songselect
Range: 0---127

PROG Program number at programchange
Range: 0---127

POS Position number at songposition
Range: 0---16383

VEL Velocity (optional)
Range: 0---127

Midi Operations
***************

MPM is able to send to the following Midi messages as operation. These commands are independant of the manufactures. Not all Midi devices support these messages. You must take a look at the manuals of your synthesizers.

     Modulation      1011nnnn  00000001  0vvvvvvv    nnnn=Channel (0-15)
     Breath          1011nnnn  00000010  0vvvvvvv    vvvvvvv=Value(0-127)
     Foot            1011nnnn  00000100  0vvvvvvv
     Portatime       1011nnnn  00000101  0vvvvvvv
     DataEntry       1011nnnn  00000110  0vvvvvvv
     Volume          1011nnnn  00000111  0vvvvvvv
     Balance         1011nnnn  00001000  0vvvvvvv
     Pan             1011nnnn  00001010  0vvvvvvv
     Expression      1011nnnn  00001011  0vvvvvvv
     General 1       1011nnnn  00010000  0vvvvvvv
     General 2       1011nnnn  00010001  0vvvvvvv
     General 3       1011nnnn  00010010  0vvvvvvv
     General 4       1011nnnn  00010011  0vvvvvvv

     Note on         1000nnnn  0kkkkkkk  0vvvvvvv    nnnn=Channel. (0-15)
     Note off        1000nnnn  0kkkkkkk  0vvvvvvv    vvvvvvv=Velocity (0-127)
     Program change  1100nnnn  0ppppppp              kkkkkkk=Note(0-127)
     Pitchbender     1110nnnn  0mmmmmmm  0lllllll    mmmmmmm=Pitchbender (MSB)

     Song position   11110010  0lllllll  0mmmmmmm    lllllll=Song Pos. (LSB)
     Song select     11110011  0sssssss              mmmmmmm=Song Pos. (MSB)
     Tune request    11110110                        sssssss=Song nr. (0-127)
     Midi clock      11111000
     Midi start      11111010
     Midi stop       11111100
     Midi continue   11111011
     Midi reset      11111111
     Active sensing  11111110

     All notes off   1011nnnn  01111011  00000000    nnnn=Channel (0-15)
     Local on        1011nnnn  01111010  01111111
     Local off       1011nnnn  01111010  00000000
     Omni on         1011nnnn  01111101  00000000
     Omni off        1011nnnn  01111100  00000000
     Mono            1011nnnn  01111110  0vvvvvvv    vvvvvvv=Value (0-127)
     Poly            1011nnnn  01111111  00000000

Limits
******

Operations per sub-setup: 50

Dump requests/operations per synthesizer: 100

Thanks
******

I will express my thanks to the following persons that were involved in MPM in any way.

Matt Dillon
     for his famous DICE C compiler and all this tools that made working on the Amiga very much easier.

Nico Francois
     for the reqtools- and the powerpacker libraries. I think ReqTools is a honourable successor of the old req.library.

Jan van den Baard
     for his famous program GadToolsBox (GTB). The whole user interface was designed with GTB. It was a pleasure to work with this nice program. He always send me the latest versions of GTB. Also thanks for the nofrag.library.

Michael Balzer
     The ARexx port of MPM was designed with his program ARexxBox.  The implementation was done within two days.

Olaf Barthel, Stefan Becker
     for releasing the sources of their programs Term and Toolmanager 2.0.  I learnd much about programming under Kickstart 2.0 when I studied the sources of their programs.  Also thanks for programming such powerful tools like Toolmanager 2.0