From:
                                                            2/12/97 12:00 AM
Subject: MAX Digest - 10 Feb 1997 to 11 Feb
1997To: Recipients of MAX digests 

There are 3 messages totalling 278 lines in this issue.

Topics of the day:

  1. Collectives
  2. MAX Digest - 9 Feb 1997
  3. MMC installment 5

----------------------------------------------------------------------

Date:    Tue, 11 Feb 1997 10:13:15 +0100
From:    Jeffrey Burns 
Subject: Collectives

I've made a collective with various externals and subpatchers, all of which
I've included in the collective script. When I try out the collective by
opening it in Maxplay, which is isolated in a separate folder, the
rectangles don't work and the Max window complains of not having found a
rect object. However, there is neither a rect object in the Max-startup nor
the Externals folder, and other objects (like oval) which I have suspected
of including the rect information don't work either. Who knows the
solution?

10e6 thanx
Jeff

------------------------------

Date:    Tue, 11 Feb 1997 09:05:07 -0800
From:    Steve Anderson 
Subject: Re: MAX Digest - 9 Feb 1997

        Reply to:   RE>MAX Digest - 9 Feb 1997 to 10 Feb 1997

On Sat, 8 Feb 1997, Tod Fiste wrote:
> I have a question for you, though: why did you
> choose the 7600 as opposed to, say, one of the faster 603e chip mac
clones?
I

Besides the wider data path & more caches, the 604 has an "integrated fpu".
This is useful in image processing, CAD and DSP-type digital audio
applications that use floating point operations. I have heard the 200 Mhz
603e
has performance equivalent to a 132 Mhz 604.  A salesperson at Computers &
Music in S.F. said that some of his customers experienced (catch-22)
difficulties using 603e based computers for their pro-audio (?) applications
and to stick with the 604.
Has anyone on the list experienced 603 problems? Or are we all making do
with
old stuff ?
sea

------------------------------

Date:    Tue, 11 Feb 1997 13:01:35 -0800
From:    Peter Elsea 
Subject: MMC installment 5

First, a mistake in installment 4- I said:
>with the hours and seconds including time code format and status
That should have been " with the hours and *frames* including time code
format and status".
Bit 5 of the frames byte indicates that the next field is status or
fractional frames
Bit 6 of the frames byte is the sign; (you may need negative time code to
enter an offeset, for instance.)
Actually bit 6 of the seconds byte might be set- If so, it would mean there
is no time code in this field. You could use it to see if General Purpose
register 0 had a value, for instance.
Bit 6 of the minutes byte can be set to indicate color frame - (contrary to
a common misconception, this does not mean the timecode is at 29.97fps, it
indicates the use of a particular color subcarrier synchronization system
used on 1 inch videotape.)
The upshot is to be really robust, you should [& 63] or [& 31] everything,
but in current implementations it's not necessary.

Now on to arming tracks:
The current status of the tracks is kept in 2 fields 78: Track Record
Status and 79: Track Record Ready The second is most useful because you can
write to it to arm a track for recording.
The field is organized as a "Track Bitmap", several bytes in which each
track is represented by a single bit. If you query this field, the response
will be
{240 127 ID 7 79 nn r0 r1 r2 ... 247}
nn is the number of data bytes following. It can vary a lot. If it is 0, no
tracks are armed. The other bytes are the bitmap, which is set up like this:
r0
bit 0  video
bit 1 reserved (must be 0)
bit 2 time code track
bit  3 Aux  track A
bit  4 Aux tack B
bit  5 Track 1 (finally!)
bit  6 Track 2

r1
bit  0 Track 3
bit  1 Track 4
bit  2 Track 5
bit  3 Track 6
bit  4 Track 7
bit  5 Track 8
bit  6 Track 9

and so forth.

This not hard to decode using masking, but it is tedious. I suggest using
Chris Muir's Binary object to pick out the bits.

To set tracks, we use the "Masked Write" command.
It looks like this:
{ 240 127 ID 6 65 4  79 byte mask data 247}
4 is the length of following information; masked writes can be concatenated
just like ordinary writes.
79 is the target field.
byte is the target byte within the field.
mask allows you to zero in on a bit. If a bit is zero in the mask, it won't
be affected by the write.
data is the value to put in the uncovered bits. This is also bit by bit.
The easy way to use it is to match the mask to turn things on and send 0 to
turn things off, but it is prefectly reasonable turn some bits on and
others off in the same operation.

The example shows how to read and set tracks, for the first 8 anyway. I've
included a track 9, but it won't always work. It turns out that various
combinations of gear work in different ways:

If you chain ADATs together, using Cooper Datamaster to get MMC, each ADAT
assumes a different ID number, so if you want to arm the first track of the
second machine (the 9th track) you send the command to arm track 1 on
machine ID 1. If you request track status, the reply will only include the
first machine. You cannot get track status from slaves.

If you start the chain with a Fostex RD-8, arming track nine will work. If
you read track status, you will get 20 bytes of data, covering all 128
possible ADAT tracks. If a track on a slave machine was armed via MMC, its
status will show on the bitmap, but not if it was armed with a panel button.

Darwins behave in a similar manner, but you only get the bytes you really
need from  a read. I don't have any DA-88s to test. I'd appreciate hearing
from anyone who does.

Updating
You can set some machines to notify you if things change. You start this
off with the Update command.
{240 127 ID 6 67 2 ss fn 247}
2 is a byte count- you can concatenate these too-
ss  0 means start, 1 means stop
fn is the field number you want to watch. Useful ones are 72 and 79 for
motion status and 79 for track status. There is a field called Update Rate
(65). Machines that support continuous updating will send a status message
every so many frames.

Signature
You have noticed that not all machines support all commands. You can find
out what commands are supported on your machine by reading the "signature",
field 64. You will get 50 bytes of data back, which is a huge bitmap of all
possible commands and responses. A one in a bit means the command is
available. For instance, I just looked at the RD-8 signature, and I see
that bit 3 in byte 22 is zero, meaning it doesn't do updates. You really
need the official spec to sort this out.

End of tutorial
In fact, I've gone about as far as is practical in this forum. I've covered
the basic functions, but there's a lot more available. It's all in the
latest MIDI specification, a document no Maxer should be without. Its
available only through Mix Bookshelf: (800) 233-9604 for the US and Canada
(908) 417-9575 international. (It'll cost you $50 and it's not online.)

If you find all this useful, let me know what you are doing with it.

Example
max v2;
#N vpatcher 3 42 637 477;
#P number 100 131 35 9 0 0 0 3;
#P number 143 131 64 9 0 0 2048 3;
#P number 358 132 64 9 0 0 2048 3;
#P number 288 132 64 9 0 0 2048 3;
#P number 214 131 64 9 0 0 2048 3;
#P newex 123 89 131 196617 unpack 0 1 2 3 4 5 6 7 8 9;
#P newex 123 53 205 196617 match 240 127 nn 7 79 nn nn nn nn nn nn nn;
#P newex 123 21 43 196617 sysexin;
#P message 128 235 44 196617 \$1 32 0;
#P newex 128 163 31 196617 & 32;
#P toggle 128 212 15 0;
#P message 128 188 35 196617 set \$1;
#P comment 61 152 32 196617 count;
#P message 177 235 44 196617 \$1 64 0;
#P newex 177 163 31 196617 & 64;
#P toggle 177 212 15 0;
#P message 177 188 35 196617 set \$1;
#P message 226 188 35 196617 set \$1;
#P toggle 226 212 15 0;
#P newex 226 163 27 196617 & 1;
#P message 226 235 38 196617 \$1 1 1;
#P message 275 235 38 196617 \$1 2 1;
#P newex 275 163 27 196617 & 2;
#P toggle 275 212 15 0;
#P message 275 188 35 196617 set \$1;
#P message 324 188 35 196617 set \$1;
#P toggle 324 212 15 0;
#P newex 324 163 27 196617 & 4;
#P message 324 235 38 196617 \$1 4 1;
#P message 373 235 38 196617 \$1 8 1;
#P newex 373 163 27 196617 & 8;
#P toggle 373 212 15 0;
#P message 373 188 35 196617 set \$1;
#P message 422 188 35 196617 set \$1;
#P toggle 422 212 15 0;
#P newex 422 163 31 196617 & 16;
#P message 422 235 44 196617 \$1 16 1;
#P message 471 235 44 196617 \$1 32 1;
#P newex 471 163 31 196617 & 32;
#P toggle 471 212 15 0;
#P message 471 188 35 196617 set \$1;
#P comment 435 276 17 196617 ID;
#P number 456 274 35 9 0 0 0 3;
#P newex 128 305 359 196617 sxformat 240 127 / is $i4 / 6 65 4 79 / is $i3
/ is $i2 / is $i1 * $i2 / 247;
#P comment 168 324 130 196617 masked write to Rec Ready;
#P button 79 215 15 0;
#P comment 58 197 61 196617 Read Status;
#P newex 126 344 173 196617 sxformat 240 127 0 6 66 1 79 247;
#P newex 96 377 41 196617 midiout;
#P comment 186 116 20 196617 R0;
#P comment 223 116 20 196617 R1;
#P comment 291 117 20 196617 R2;
#P comment 362 116 20 196617 R3;
#P fasten 9 0 4 0 133 331 101 331;
#P fasten 10 0 9 3 461 295 481 295;
#P connect 45 0 46 0;
#P connect 43 0 41 0;
#P connect 38 0 36 0;
#P connect 41 0 42 0;
#P fasten 5 0 4 0 131 369 101 369;
#P fasten 7 0 5 0 84 335 131 335;
#P connect 46 0 47 0;
#P connect 47 5 52 0;
#P connect 47 6 51 0;
#P connect 47 7 48 0;
#P connect 47 8 49 0;
#P connect 47 9 50 0;
#P fasten 48 0 33 0 219 154 231 154;
#P fasten 48 0 30 0 219 154 280 154;
#P fasten 48 0 25 0 219 154 329 154;
#P fasten 48 0 22 0 219 154 378 154;
#P fasten 48 0 17 0 219 154 427 154;
#P fasten 48 0 14 0 219 154 476 154;
#P fasten 51 0 43 0 148 154 133 154;
#P fasten 51 0 38 0 148 154 182 154;
#P connect 42 0 44 0;
#P connect 33 0 35 0;
#P connect 30 0 28 0;
#P connect 25 0 27 0;
#P connect 22 0 20 0;
#P connect 17 0 19 0;
#P connect 14 0 12 0;
#P connect 13 0 15 0;
#P connect 21 0 23 0;
#P connect 18 0 16 0;
#P connect 27 0 26 0;
#P connect 28 0 29 0;
#P connect 31 0 9 0;
#P connect 32 0 9 0;
#P connect 35 0 34 0;
#P connect 26 0 24 0;
#P connect 29 0 31 0;
#P connect 34 0 32 0;
#P connect 37 0 39 0;
#P connect 39 0 9 0;
#P connect 36 0 37 0;
#P connect 44 0 9 0;
#P connect 24 0 9 0;
#P connect 23 0 9 0;
#P connect 20 0 21 0;
#P connect 19 0 18 0;
#P connect 16 0 9 0;
#P connect 15 0 9 0;
#P connect 12 0 13 0;
#P pop;

Peter Elsea
Electronic Music Studios
University of California, Santa Cruz
http://arts.ucsc.edu/EMS/Music/index.html
 elsea@cats.ucsc.edu

------------------------------

End of MAX Digest - 10 Feb 1997 to 11 Feb 1997
**********************************************