v7.0.16 18/12/2022
MidiPlay is a program to play MIDI files. It is self contained and uses a built in synthesiser. To play a file drop it on the player window or double click it. It must have the filetype MIDI and be a type 0 or 1 format file (almost all midi files are 0 or 1). The current settings are saved on exit and loaded on startup.
The filename is displayed at the top above the progress bar. The song position and duration are displayed below the progress bar and beneath them are the playback controls. To the right of the window are audio controls and level meters.
Control | Function |
---|---|
Start button | Starts playback from the beginning. Resumes playback if paused. |
Pause button | Pause/Resume playback. |
Stop button | Stop playback. |
Progress bar | When playing, click on this to move to that position in the song. |
Volume slider | Click or drag to adjust the volume. |
Balance slider | Click or drag to adjust the left/right balance. |
Bass slider | Click or drag to adjust the bass boost/cut. |
Treble slider | Click or drag to adjust the treble boost/cut. |
Console...
Opens the Console window.
Effects...
Opens the Effects window to control the Chorus, Reverb, Flanger, and Echo filters.
Channels...
Opens the Channel Settings window that displays and allows adjustment of the current
song's channel volume and program. The displayed volume is of the combined volume/expression
value, which is combined as follows, vol_expr = (volume * expression) squared. It does not
include key velocity which is applied to each individual note and is therefore not a channel
variable.
Controls->Loop
Enable/disable continuous repeating.
Controls->Mono
Stereo/Mono
Controls->L/R Swap
Left/Right channel swap
Controls->Var Banks
Enable/disable GM variation banks. There has been no standard way of
selecting extra banks of instruments until the GM2 standard. If the SoundSet contains extra or
variation banks and the song sounds a bit odd, disable variation banks and only the standard set will
be selected. The default SoundSet is GM1 and does not contain any variation banks.
Controls->Tempo
Adjust the overall tempo from 10% to 1000% of the original song tempo.
Controls->Pitch
Transpose the pitch up or down by up to an octave, in semitones.
Controls->Reset
Reset the synth. This is the Midi "Panic!" button.
Save
Save the song as an audio WAV file. This records the audio output
and so includes all audio controls and effects settings.
Help
Opens this file.
Quit
Exit the application.
There is a small delay between selecting something and the result. This is caused by the
audio buffering. It also affects any displayed lyrics which are displayed slightly before
the associated audio. Not a bad thing if you want to sing-along as it's good to know what
to sing before you have to sing it !
If the buffering is too small audio breakup becomes unacceptable, if
too large, the delays are unacceptable, so it's a compromise.
There is also a position seeking delay. This is because the only reliable way to seek to
a position is to "walk" through the file sending all control commands to the synth so when
the desired position is reached, the correct sounds are produced. It is possible to seek
forwards from the current position but seeking backwards must be done from the file start.
If the pitch is transposed whilst playing, it is possible to get notes "stuck on" because
their Note Off messages have been changed to a different note. If this happens pause/resume or seek
back slightly.
Resetting the synth resets all generators to be Acoustic Grand Pianos so if this is done
whilst playing it can produce "interesting" results.
This is where any text output is displayed. If the file contains lyrics they will be displayed here.
The synthesiser was originally designed some years ago for a keyboard instrument and ran on a development board from ST Micro. It was controlled by a number of controls and buttons on the instrument but also via a serial link and USB for audio, midi, and serial comms. This meant that it was a command line driven unit and this is still the case because the synth is basically unchanged here. The Risc OS GUI interfaces with the player/synth using these commands and additional access to them is provided.
At the bottom of the text output area is a command input line. A list of commands is displayed by entering ?.
The synthesiser is a subtractive synthesiser with FM phase distortion and is not a
wavetable synthesiser.
It has 32 generators and each generator contains 2 oscillators of which 1 can modulate
the others frequency, 1 filter, 1 noise generator, 4 envelope shapers, and a modulation
oscillator. Oscillator waveforms are selected from a store of single cycle waveforms.
It is very much modelled on the classic analog synthesisers. An instrument definition
is a generator parameter set, and each instrument definition uses a single generator so
the available polyphony is always 32.
It conforms to the General MIDI standards and plays up to 16 channels of MIDI data
received from the File Player.
A default "Sound Set" of instrument definitions is contained within the application code and
they are loaded on start up. If a Sound Set data file is found in the MidiPlay
directory, it is loaded and replaces the default set.
An instrument editor is included in the application and can be used to modify existing melodic and percussion instruments, or create new ones. The editor can be accessed via the iconbar menu and includes the editor, a keyboard for note entry, and a reference guide.
The following configuartion settings are available from the iconbar menu.
Config->Synth->Interface
This allows selection of the audio output interface. The choices are SharedSound or DiskSample.
SharedSound allows a much smaller buffer size and hence small delays to the audio output but
the audio will break up if windows are moved around etc. DiskSample also outputs through the
SharedSound driver but adds another layer of buffering at the expense of more delay.
Config->Synth->Buffer Size
This is only available for the SharedSound interface. As previously explained, it is a
compromise between delay and audio breakup. When playing files the delay is not too important
but when editing and using the keyboard, a long delay can be frustrating. Select the smallest
that you are happy with. The size is in samples and not bytes so a size of 8192 samples is
actually a 32768 byte buffer. The largest size provided is 32768 (131072 bytes), if you feel you
require more, use the DiskSample interface.
Config->Synth->Sample Rate
If the machine is fast enough, try to set this to 44100 as
the application was designed and optimised at this rate.
Config->System->Sample Rate
Best results are obtained by having the same sample rate for both system and synth.
If possible use 44100 for both. This setting is not saved because being a system setting,
it affects all applications using the sound system and there may be conflicts.
Three types of files are recognised and can be dragged to any of the windows.
© 2022 Peter Everett
contact: peverett33@gmail.com