Jump to content

A8 MMS Voice File Data Explanation


k-Pack

525 views

Using MIDI MUSIC SYSTEM software to build music compositions seems to fit my skill set.  I'm not proficient at reading music but I can translate it.  My latest arrangement was a Celtic folk song for flute and drums.  Music was entered into MMS and a simple drum pattern was added.  It sounded terrible. Turns out that a synthesized flute doesn't need to breath and sounds very mechanical without those breaks.

 

Selected notes were shortened and rests were inserted to maintain timing and give the illusion that a breathing person was playing the flute. Sounded much better but it was tedious work.

Then I started to think I might have saved a Voice file and used a program to make the changes. Then import the voice back into MMS.

 

Then it dawned on me that I was going to have to figure out the file structure of a voice file and what the data means.

 

At this time I want to share what I think I know about how to create a voice file to import into MMS. Then someday someone (or myself) might write a useful program to create those files.

 

File header and data structure:

 

First thing that was done was to take a look at what a voice data file contained.  A few notes were entered in a voice and then the voice was saved.  This short program was written to list the content to the screen.  Simply change the filename to match the one you wish to view.  Use the cntl-1 key to stop and start scrolling.

 

10 TRAP 100:COUNT=0

20 OPEN #1,4,0,"D:TEMP.V01"

30 GET #1,A:? A;"  ";

33 GET #1,A:? A

37 FOR X=1 TO 3

40 GET #1,A

45 COUNT=COUNT+1

50 ? (A),

56 NEXT X

60 ? :GOTO 37

100 ? "COUNT=";:? COUNT

 

This short voice file listing demonstrates the format of the voice file.  You may want to build your own voice files and check the results.

 

24,0

250,0,0

10,48,0

85,48,0

75,48,0

87,48,0

250,0,0

165,48,0

245,51,255

COUNT= 24

 

It became apparent that the first two bytes will be the number of  instructions in the file. LSB - MSB format.  Then the instructions are listed.  At the end of the a count of the instruction sets is displayed. This should match the 16 bit number at the beginning of the file.

 

An instruction  consists of  three numbers.  The first designates the specific instruction and the next 2 are for any required data. I am assuming that if the data byte is not required by the instruction then MMS does not clear them to zero. That's the only explanation I have for some of numbers I have seen.

 

The first instruction will always be a measure marker(250).  Every voice has a measure marker at the beginning.   Check it out.

 

Rests and Notes

 

Rest  Rn -      0,LSB,MSB              n=0 -  65535 cycles

 

In MMS the duration of the rest is its clock value.  In MMS you would most likely assign  a clock value as W,H,Q,E,S, T, or Z.  Their clock values are listed on page 22 of the manual. The "." and " .. " are used to adjust the number of cycles required for the additional durations.  There is also the option of setting the duration by entering the clock value as ^n.

 

Keep in mind that meter will determine the clock value in a measure and to keep all the voices synced the total clock value must remain the same for all measures in a composition. (But you don't have to.)

 

Note instructions are between 1 (C1) and 108(G9).  If a tie is used bit 7 will be set making the value above 128.

 

  To calculate:

 MMS note number = (MIDI note number - 23) + (128 * IF tie)

 

The duration is set by the next two numbers much the same as for rests.

 

The Table

The rest of the instructions are to manipulate the MMS music settings or MIDI instrument.  For more information check the manual. If I missed any I'll add the information if I ever find a need to use them. If the Second or Third number's has not been determined then ND has been placed in the table.  In fact, it may not have a purpose.

 

Function

MMS Input

Byte 1

Byte 2

Byte 3

Rest

Rn

0

LSB

MSB

Note

(C1-G9)n

MIDI# 24-127

MIDI#-23

(+128 if tie)

LSB

MSB

Tempo

Tn

240

35-290

ND

Sound

Sn

241

0-127

ND

Program

(CC)

Pn,x

242

Controller

number

Setting

0-127

Repeat

REPn

243

0 = forever

1-255

ND

End Repeat

ENDR

244

ND

ND

Jump to

Voice

JMPn

245

1-99

ND

RETURN

RTN

246

ND

ND

Change Channel

Velocity

/CHn

VELn

247

247

Channel-1

0-127

255

0

Transpose UP

TRUn

248

0-127

ND

Transpose

Down

TRDn

248

Start +256 - n

LSB *

ND

Transpose

Zero

TRZ

249

ND

ND

Measure Marker

M

250

ND

ND

Tempo up

TUn

251

0-127

ND

Tempo down

TDn

251

Start +256 -n

LSB *

ND

Pitch Wheel High

PWHn

253

 ND

ND

Pitch Wheel Low

PWLn

253

ND

ND

Pitch Wheel Zero

PWZ

253

0

ND

*= I Think

ND = not determined

Table edited 11/9/21

 

I hope this is a good start to understanding voice files.  There are going to be some revisions to this table if I find a need to write a program that will import and export MIDI MUSIC SYSTEM Voice files.  That may happen If I find that the M: device driver for the MIDIMax will work with Diamond GOS.  I'll incorporate the changes when they are brought to my attention. 

  • Like 3

1 Comment


Recommended Comments

Table updated. Did some more work and found that the Velocity command was missing. As it turns out the change MIDI channel(/CHn) and Velocity(VELn) share the same command number 247.  The commands use a different number in BYTE 3.  The velocity will end in a 0 while the change channel will contain 255.

 

Link to comment
Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...