home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Da Capo
/
da_capo_vol1.bin
/
programs
/
amiga
/
midi
/
smusmidi
/
smusmidi.doc
< prev
next >
Wrap
Text File
|
1992-07-10
|
11KB
|
281 lines
SMUSMIDI User Manual
SMUSMIDI 1.0
SMUS to MIDI File Conversion Software by Thomas E. Janzen
SMUSMIDI 1.0 software Copyright (c) 1991 Thomas E. Janzen All Rights Reserved
Thomas E. Janzen makes no warranties, either expressed or
implied, with respect to the software program recorded on the
diskette or the instructions, their quality, performance,
merchantability or fitness for any particular purpose. The
program and instructions are distributed free "as is". The entire
risk as to their quality and performance is with the user. In no
event will Thomas E. Janzen be liable for direct, indirect,
incidental or consequential damages resulting from any defect
in the program or instructions, even if Thomas E. Janzen has
been advised of the possibility of such damages.
This software is intended for use within any and all applicable laws.
Thomas E. Janzen is not responsible for the use of this software to
convert music files claimed to be protected by copyright or other laws.
This software may be redistributed only intact with no change and
only at no charge.
Your comments about SMUSMIDI are very welcome as soon as you
have tried the program. Your comments and questions about
SMUSMIDI may be directed to:
Thomas E. Janzen
58A School Street Apt. 2-L
Hudson, MA 01749-2518
1 (508) 562-1295
Commodore (TM), Amiga (TM), and AmigaDOS are trademarks of Commodore Business
Machines, Inc.
SAS/C is a trademark of SAS Institute, Inc.
MIDI file format is specified by the International MIDI Association (IMA).
No part of this software may be used in whole or in part in
another public domain or commercial software.
INTRODUCTION
The standard MIDI file format, defined in "Standard MIDI Files 1.0"
published by the International MIDI Association, is an international
format for the exchange of MIDI event recordings, and may be so for
many years to come. SMUS (Simple Music) format, defined by Electronic
Arts and Commodore Business Machines, Inc., is still being used by
multi-media programs; I can't estimate it's life. It is one of two
file formats produced by DMCS from Electronic Arts (TM). The other is
a proprietary IFF form with private chunks. The proprietary DMCS file
holds more information than SMUS format, but it is not publicly defined.
SMUS format is publicly defined, as is Standard MIDI File format.
Although some multi-media programs for the Amiga use SMUS format,
MIDI sequencing programs almost universally use Standard MIDI File format,
in addition to private formats that hold more information, just as DMCS's
proprietary format does. The current commercial SMUS-MIDI converter is
available as an add-on to another program for a total of hundreds of dollars.
Many people have written music in DMCS, only to later buy inexpensive modern
MIDI sequencing software, and find that they cannot transfer the old files to
the new program.
This program, SMUSMIDI, makes it possible to transfer DMCS SMUS output files
to a modern MIDI sequencing program by converting the DMCS SMUS file to
Standard MIDI File format.
SMUSMIDI does not:
1. Convert SMUS forms that are embedded in other IFF files.
2. Convert all SMUS files, for example, those output by software other
than DMCS.
3. Support file icons
4. Require a MIDI hardware interface or use internal Amiga voices.
SMUSMIDI was compiled with SAS/C 5.1a.
HARDWARE REQUIREMENTS
SMUSMIDI probably would run on an Amiga with 512K bytes of
memory. To estimate the amount of memory needed for a conversion,
multiply the length of the SMUS file in bytes times five. To find its
length, use the AmigaDOS list command.
RUNNING SMUSMIDI
SMUSMIDI is run from a CLI (command line interface). Set a path (using the
AmigaDOS path command) to the location of SMUSMIDI, or changed directory
(with the AmigaDOS cd command) to the directory in which SMUSMIDI resides.
The command format for SMUSMIDI is:
SMUSMIDI inputfile.SMUS outputfile
The input file should be an SMUS file output by Deluxe Music Construction
Set. The output file may be any name; .MID will be appended to it.
For example:
1>SMUSMIDI goldbergaria.SMUS goldbergaria
FORM is: 1360 bytes.
HEADER:
Tempo: MM 63; 4 Tracks
SCORE: goldbergaria.SMUS
Instrument: First Voice
Instrument: First Voice
No more instruments.
Length of track: 608 bytes
This will read goldbergaria.SMUS, close it, convert it to Standard MIDI
File format, and write it to goldbergaria.MID. The repeats marked by Bach
are lost.
To preserve the list of instruments in a note, use indirection:
1>SMUSMIDI >goldbergaria.notes goldbergaria.SMUS goldbergaria
Limitations and known problems:
DMCS SMUS files apparently lose some information (relative to the proprietary
format) from the file, although I may be wrong about this. Some of the
apparently lost information is:
1. Slurs (phrasing marks)
2. Playing styles (staccato, etc.)
3. MIDI channel assignments
Therefore, the MIDI output file from SMUSMIDI cannot represent this information.
In addition, SMUSMIDI does not preserve instruments. Repeat signs are lost.
Crescendos are lost. I don't know if these items are in the SMUS file to
start with, but they aren't documented in the standard.
Preserved and copied into the MIDI file are: key signatures, time signatures,
and control changes.
SMUSMIDI inserts "NULL" text events in the MIDI file to separate two
consecutive delays. I am too sick of working on the program to fix this.
The music is converted quite well, so I don't care any more. A commercial
sequencer I use strips out everything it doesn't want, so this is a non-
problem anyway.
SMUSMIDI CODE
SMUSMIDI is the most complicated spaghetti code I have ever written.
It is about 1231 lines. I didn't plan it that way, and that's why it
happened. I could have spent more time designing; OK, SOME time designing.
It probably took under 100 hours.
The source files for SMUSMIDI are:
SMUSMIDI.c
IFF/smus.h
IFF/iff.h
IFF/compiler.h
The IFF headers can't be included in the kit. They are printed in the
ROM Kernel Reference Manual: Exec, and are available to developers.
I got them from Freely Redistributable Software Library disk number 185.
SMUSMIDI.c contains my code.
SMUSMIDI begins by reading the command-line arguments. If anything
goes wrong, it prints an error message, releases its memory, closes all files,
and exits. The input file is opened and tested to see if it is an SMUS file.
If not, SMUSMIDI exits. When it finds the SMUS form, it reads the entire
form into a dynamically allocated section of memory (called SMUS_Score)
and closes the input file.
It then opens the output file; if this fails, it exits as before. Memory is
allocated for the MIDI file ("MIDI_Score") that is four times larger than the
SMUS file. The size of the MIDI files is typically 2.4 to 2.6 times the size
of the SMUS file. The reason they are so big is that 240 clocks/quarter is
used, and this produces larger delay values, which are a variable-length
quantity in Standard MIDI File format. This value can be changed for
recompilation, if you have a C compiler, at the top of the code in a macro
called TICKS_PER_QUARTER.
To continue, SMUSMIDI lists the score information, including any instruments.
It does not use this information in the MIDI file.
It then begins converting the tracks. The tempo track is made first, by
reading only time-signatures and tempi (tempos) into the first track of the
MIDI file buffer (MIDI_Score). When this is done, it returns to the beginning
of the first SMUS track and starts converting musical events in SMUS_Score
into MIDI events in MIDI_Score. It loops through a section of code that
converts one track, until all tracks are converted.
The loop is a nightmare. If I had done an intermediate conversion first,
say into an array of structures that had the following representation for
an event:
1. pitch
2. dynamic
3. true duration, including all ties
4. time to start from beginning of track,
than it might be much easier to convert this to Standard MIDI File format.
By doing a direct conversion, I made it necessary to track all kinds of
annoying things, such as an array of old chord notes, because th