| T.R | Title | User | Personal Name
 | Date | Lines | 
|---|
| 1293.1 | depends, depending on dependancies... | JON::ROSS | shiver me timbres.... | Fri Apr 01 1988 09:31 | 14 | 
|  |     The volume arena has never been clear, and you will find
    that they all are different. The midi continuous controller
    definition is fine....and folks have 'agreed' to allocating
    the same controller number to volume...but thats it.
    
    Your unit MAY send it on power. It WILL send it if you nudge
    it. Your module may SAVE the current volume setting on power
    off and restore it on poweron, or not. The panel control may
    override the messages, or may be the MAX volume that the 
    messages are scaled to...or not.
    
    It shouldnt be too hard to test tho....
    
   
 | 
| 1293.2 | Check the MIDI chart | CTHULU::YERAZUNIS | Hiding from the Turing Police | Fri Apr 01 1988 09:46 | 12 | 
|  |     In general (that is to say, you can't depend on this) MIDI continuous
    controllers only send messages when they are moved.  A pitch-bend
    that is not swung sends no messages (and takes up no MIDI bandwidth,
    that's why it's done this way).
    	
    You might want to look in the MIDI implementation chart for the
    module and see if it implements VOLUME as a recieved controller.
    Your controller almost certainly implements VOLUME as a transmitted
    controller.
    	
    	-Bill
    
 | 
| 1293.3 |  | AKOV88::EATOND |  | Fri Apr 01 1988 10:17 | 14 | 
|  | 	The MIDI implementation chart is VERY scarce for information (as is
most manuals I've ancountered.  It simply says it implements MIDI volume.
	As far as simply checking it at home - I entered this note as a kind
of 'save face' attempt before I brought it in to the shop (Wurly's).  If I
had thought of it before this morning, I would have checked it.
	Still, it is interesting (if not frustrating) that such continuous
controllers are not standardized by the MIDI spec.  Are there any continuous
controllers that ARE set in concrete (I'd think pitch bend, modulation and 
aftertouch are...)?
	Dan
 | 
| 1293.4 | No semantics specified in the MIDI spec. | BOLT::BAILEY | Steph Bailey | Fri Apr 01 1988 13:50 | 11 | 
|  |     I don't think that the precise effects of any of the MIDI messages
    are specified in the spec.  That is, how to react to and how to
    generate MIDI messages is essentially a function of what the
    manufacturers think are the appropriate behaviours--we all know
    what pitch bend is, now don't we? (ha ha.)
    
    The same is true of many programming languages--eg, how should you
    evaluate IF a() AND b() THEN foo() END;
    
    Steph
    
 | 
| 1293.5 | MIDI throughput considerations. | IOENG::JWILLIAMS |  | Fri Apr 01 1988 14:08 | 14 | 
|  | 
    My experience is that you have to diddle just about everything before
    a controller takes effect. To reduce ( and I mean seriously reduce )
    the amount of MIDI traffic, it makes sense to only send changes.
    It is a feature, not a bug. Any other way would quickly flood the
    MIDI channels with irrelevent data. Can you imagine the overhead
    of sending bend, mod, volume, and sustain over, lets say, 6 channels?
    that's a little less than 100 bytes, that's about 3 ms. Figure about
    200 clock ticks/sec, that's 5 ms intervals, you've got less than
    2 ms to send any real data. Sheesh!
    
    The way they did it is just fine.
    
    							John.
 | 
| 1293.6 | well, no. thats easy. | JON::ROSS | shiver me timbres.... | Fri Apr 01 1988 14:10 | 32 | 
|  |     what language? Actually I see no ambiguity there.
    assuming:   a() has a value of 0 or 1
    	 	b() has a value of 0 or 1
		END means ENDIF
    
    then foo() will be evaluated if a() AND b() are both 1.
    
    There are some situations where the ambiguity requires specifying
    to the compiler exactlyl what you mean, usually with nested if/elses.
    
    I think we know what you mean.
    
    Well, what HAS happenned with cont. contr. messages is that theres
    a DEFACTO STANDARD that has arisen from the first implimentations
    of midi (methinks the DX7 won ). Altho the spec says its up to the
    manufacturers, certain controllers have been 'assigned' to functions.
    The following (at least!) have been 'agreed' to:
    Pitch bend, Volume, Mod wheel, sustain pedal, portamento time, and
    breath controller (can you see someone besides Yamaha coming out
    with an alternative Br. Control unit and NOT using the defacto code?
    what a blunder! har har!)
    
    what Im not sure about:
    	foot controller (for modulation etc),pan, sostenuto pedal,
    	portamento on/off (pedal or switch)
    
    any others?
    
    ron
    
    
    		
 | 
| 1293.7 |  | SALSA::MOELLER | conducting the Silicon Symphony | Fri Apr 01 1988 15:38 | 7 | 
|  |     Controller 10 is for pan, controller 6 for data entry.. 
    
    re the topic note, if you hear a module 'going away', just move
    the volume slider (#07) down and back up (to 127).
    
    So what's the problem ? 
karl, still scarred from his last wrangle with the KX88    
 | 
| 1293.8 |  | AKOV88::EATOND |  | Fri Apr 01 1988 16:24 | 13 | 
|  | RE < Note 1293.7 by SALSA::MOELLER "conducting the Silicon Symphony" >
>    re the topic note, if you hear a module 'going away', just move
>    the volume slider (#07) down and back up (to 127).
>    
>    So what's the problem ? 
	Once again, I was entering an emergency note to avoid making a fool
of myself at the store (i.e., I asked here because I didn't have time to go home
and find out).
	Dan
 | 
| 1293.9 | A name is not equal to a semantic description. | ROLLIN::BAILEY | Steph Bailey | Fri Apr 01 1988 19:00 | 68 | 
|  |     Re: .6
    
    Perhaps I'm making myself entirely too clear here, but you don't
    seem to understand what I am saying.
    
    The syntax of the messages is perfectly defined, and there are even
    labels for each of the valid messages.  These are listed below,
    for those who wonder.
    
    The semantics are not defined in the spec (as far as I know), and
    never will be.
    
    Take the example of pitch bend (which isn't strictly a continuous
    controller in the IMA sense)--nothing in the spec says that a pitchbend
    message should only be sent when a wheel changes positions.  It would
    be perfectly valid to transmit this message at every idle moment, from
    the spec's statement.  Further, there is no definition of how much
    detuning a voice should undergo for a particular pitch bend value which
    is received.
    
    The way the controller actually behaves on most availible equipment
    is a result of the prevailing opinion about how pitch-bend should
    operate.
    
    
    
    Midi Manufacturers Association continuous controllers:
    
    0	Undefined
    1	Modulation wheel or lever
    2	Breath controller
    3	Undefined
    4	Foot controller
    5	Portamento time
    6	Data entry MSB
    7	Main volume
    8	Balance
    9	Undefined
    10	Pan
    11	Expression controller
    12-15 Undefined
    16-19 General purpose controllers (1-4)
    20-31 Undefined
    32-63 LSB for values 0-31
    64	Damper pedal (sustain)
    65	Portamento
    66	Sostenuto
    67	Soft pedal
    68	Undefined
    69	Hold 2
    70-79 Undefined
    80-83 General purpose controllers (5-8)
    84-91 Undefined
    92	Tremolo depth
    93	Chorus depth
    94	Celeste (detune) depth
    95	Phaser depth
    96	Data increment
    97	Data decrement
    98	Non-registered parameter number LSB
    99	Non-registered parameter number MSB
    100	Registered parameter number LSB
    101	Registered parameter number MSB
    102-121 Undefined
    122-127 Channel Mode messages
    
    Steph
 | 
| 1293.10 |  | DFLAT::DICKSON | Network Design tools | Mon Apr 04 1988 13:05 | 6 | 
|  | In the programming example, the question is what is the order in which a()
and b() are evaluated, and whether, if the first one is evaluated to be
false, the other one should be evaluated anyway.  When evaluating the
expressions can have side effects (as you have to assume any function call
does except in FORTRAN), this makes a big difference.  And different language
definitions do this differently.
 | 
| 1293.11 | hardware,software, firmware, etherware... | JON::ROSS | shiver me timbres.... | Mon Apr 04 1988 13:55 | 15 | 
|  |     ah. hmmmmmmm, Im more a hacker, but:
        
    In what language would procedures (or even expressions) a(),b()
    NOT both be evaluated in the construct " IF a() AND b()....." ???
    They BOTH must be executed. ( They arent just static variables,eh? )
    Or was that your point?
        
    similarly, if a(), b() have some side effect, such as BOTH twiddling
    some GLOBAL variable, (ick! but maybe), you should still get repeatable
    execution, since both must be evaluated, right?
    
    You may be in for a surprise from the compiler....I agree.
    
    ron
    
 | 
| 1293.12 | language expressions | NIFTY::VINSEL | she took my bowling ball too | Mon Apr 04 1988 16:06 | 11 | 
|  |     Re: .11
    
    I know this is off the subject, but...
    
    In the two programming languages that I know best, C and Pascal, this
    is very different. Pascal is "well behaved", both expressions are
    executed in left to right order. In C, this is not the case,
    expressions are not evaluated in any particular order, and there does
    not seem to be a requirement that all logical expressions be evaluated.
    
    pcv
 | 
| 1293.13 | Make It Go Faster | DRUMS::FEHSKENS |  | Mon Apr 04 1988 16:29 | 10 | 
|  |     We're way off the subject, but unless a standard (e.g., ANSI or
    ISO) requires a specific implementation, a typical optimization
    is to not bother evaluating the second term of an AND if the first
    term evaluates to FALSE, as the AND can't possibly evaluate to TRUE
    no matter what the value of the second term.  Similarly, if the
    first term of an OR evaluates to TRUE, there's no need to evaluate
    the second term, as you already know the OR will be true.
    
    len.
    
 | 
| 1293.14 | ok, Lets check it empirically | JON::ROSS | shiver me timbres.... | Mon Apr 04 1988 16:40 | 11 | 
|  |     Thats fine ONLY if the terms are not expressions or routine
    calls, and I fully understand the technique.
    
    However, I have trouble believing that if they are routines
    (which they most closely resemble to my "C" eyes...) that a
    "CORRECT" run time optimization would be to skip calling 
     b() if a() returns false. (assuming a is evaluated first
    which is a compiler issue, not runtime).
    
    Time for some experiments, eh?
    
 | 
| 1293.15 | Pascal order of evaluation rules | DREGS::BLICKSTEIN | MIDI DJ | Mon Apr 04 1988 16:42 | 13 | 
|  |     According to the Pascal standard it can evaluate either A
    or B first, or it can even evaluate them in parallel!  If the
    value of the expression can be determined by evaluating one
    operand, the other operand need not be executed.
    If you've written a program in Pascal that depends on the order
    of evaluation of binary operators your program is at the least
    non-transportable.  Certainly, running it with optimized VAX Pascal is
    a crap shoot because VAX Pascal does a reordering optimization.
    
    	Dave Blickstein
        Architect, Language independent code generator/optimizer
    	Technical Languages and Environments
 | 
| 1293.16 | I *knew* I shoulda listened to len... | JON::ROSS | shiver me timbres.... | Mon Apr 04 1988 16:59 | 29 | 
|  | /*ok, a quick test in C */
    #include stdio.h
main () {
	if ( a() && b() ) {
	   c();
	}
}
a() {
	printf("executed a\n");
	return(0);
}
b()  {
	printf("executed b\n");
	return(0);
}
c() {
	printf("executed c\n");
}	
/*end test*/
        
    guess what? VAX C choses not to evaluate "b()". 
    I am humbled.......and amazed.
    
    Ron
    
 | 
| 1293.17 | deep down inside | NYMPH::ZACHWIEJA | Only 194 days left. | Mon Apr 04 1988 17:05 | 5 | 
|  |      
    did you look at the generated code ?  is this the latest 2.3 compiler ?
    it seems to be having some serious optimization problems.
    
    _sjz.
 | 
| 1293.18 | C order of evaluation rules | DREGS::BLICKSTEIN | MIDI DJ | Mon Apr 04 1988 17:07 | 25 | 
|  | >   Time for some experiments, eh?
    
    Understand that just because a particular C optimizer may not 
    eliminate the function call in "IF FALSE AND F(X)" does not
    mean that it's not allowed to, and thus may not do that when
    you install the next version.
    
    I think the best advice is derived from Len's comments: Do not
    write code that depends on the order of evaluation unless the
    order of evaluation is explicit in the operator (i.e. the language
    has flow operators like "and then" and "or else").
    
    In short, there's not much value in this experiment.  VAX C
    should eliminate the call btw.
    
    Unlike Pascal, in C you have two kinds of operators, boolean
    (and, or, etc) and flow boolean (in english, "and then" and
    "or else").  The regular boolean ops work pretty much like
    Pascal - order of evaluation is indeterminant and short-circuiting
    is permitted (operands may be eliminated).  The flow boolean
    ops guarantee that the right operand is not evaluate if the
    result can be determined from the left operand.
    
    	db
 | 
| 1293.19 | That ain't no experiment, THIS is an experiment | DREGS::BLICKSTEIN | MIDI DJ | Mon Apr 04 1988 17:10 | 8 | 
|  |     Ron,
    
    That's not the interesting case.  You used the and then operator
    and thus C was FORCED not to evaluate b.  Try running it with the
    following line:
    
     	if ( a() & b() ) {
 | 
| 1293.20 |  | MENTOR::REG | Keep left, except when not passing | Mon Apr 04 1988 17:52 | 7 | 
|  |     
    	re .. the last few:-
    
    	Bleh !   This is s'posed to be an employee interests conference.
    Its startin' to look aweful  "work related"  :-^)
    
    
 | 
| 1293.21 | So now consider what has come before. | ROLLIN::BAILEY | Steph Bailey | Mon Apr 04 1988 20:28 | 16 | 
|  |     I hope the reader (Dan, etc.) can see the connection between the
    last 10 replies and MIDI continuous controllers, because there is
    a strong one (I couldn't have made it better myself).
    
    The synth manufacturers know how continuous controllers should behave
    like programmers know how an IF statement should work.
    
    By the way, most languages these days specify ``short circuited'
    evaluation so that you can say:
       WHILE ptr # NIL AND f(ptr^) DO g() END;
    
    And not have the f(ptr^) chew on a bogus pointer.  Pascal is a notable
    exception.
    
    Steph
    
 | 
| 1293.22 |  | NYMPH::ZACHWIEJA | Only 193 days left | Tue Apr 05 1988 08:55 | 4 | 
|  |     
    re .21
    
    yeah !  I always hated that. _sjz.
 | 
| 1293.23 | I think Optimizers flip a coin! | JON::ROSS | shiver me timbres.... | Tue Apr 05 1988 09:56 | 16 | 
|  |     re, Dave:
    
    if ( a() & b() )  c();.... well, different. I see the point.
       in fact it gives: executes a executes b, which would have
       just added fodder (read:air) to my (original) position.
    
    no, the REAL interesting one is:
    
    if ( a(b()) && b()  )  c();
   
    executes: b,a,b	Now b() returned 0, so there was no reason
    			to execute it again....
    
    Before len jumps on us about thouroughness, I admit these are
    not 'robust' experiments....but results were interesting...
    
 | 
| 1293.24 | Gimme Assembly Language! | JON::ROSS | shiver me timbres.... | Tue Apr 05 1988 10:16 | 19 | 
|  |     
    and steph, I see your point, but disagree with your 
    conclusion. (Maybe its just wording...)
        
    My conclusions are that interpretation will vary when
    specifications are not complete. Interpretations are
    attempts to complete the specification.
        
    The midi spec completetly defined the syntax for continuous
    controllers. It did not define the assignment of functions
    to those controllers. That allowed the manufactures room
    for interpretation. We have seen that defacto standards arose
    based on the first implimentation(s).  
    
    Does anyone move a bend wheel and get any effect other than
    pitch change?
    They DO know what to impliment. AND, yes, the spec is still
    incomplete....
 | 
| 1293.25 | for C, see page 49 of K & R | NIFTY::VINSEL | she took my bowling ball too | Tue Apr 05 1988 11:13 | 1 | 
|  |     
 | 
| 1293.26 | How Can It Be "Standard" If It's Optional? | DRUMS::FEHSKENS |  | Tue Apr 05 1988 11:32 | 14 | 
|  |     Well, folks, welcome to the standards business!
    
    I guess there is a sort of MIDI-related message here, about
    interpretation of standards and opportunities for divergent
    (and probably incompatible or non-"interoperable") implementations.
    
    In the standards business (specifically the OSI stuff I am involved
    in) real users are forced to resort to "implementors' agreements",
    where they get together and figure out and agree on how a bunch
    of implementors should interpret the standard the same way, so things
    will really work together.
    
    len.
    
 | 
| 1293.27 | In a nutshell, eh? | JON::ROSS | shiver me timbres.... | Tue Apr 05 1988 16:03 | 10 | 
|  |     excellent statements.
    
    See what we've learned here? What Len does...even what
    Blickstein does (no wonder he can moderate a coupla
    notes ;') ), we learned some C code, we learned about compliler
    optimization techniques, we learned about standards and specifications.
    
    Wheres that JEC form? I gotta add this to my job description.
    
    ron(who writes code that doesnt bite him, apparently...)
 | 
| 1293.28 | More exceptions than not | DREGS::BLICKSTEIN | MIDI DJ | Tue Apr 05 1988 16:49 | 24 | 
|  | >    By the way, most languages these days specify ``short circuited'
>    evaluation so that you can say:
>       WHILE ptr # NIL AND f(ptr^) DO g() END;
    
>    And not have the f(ptr^) chew on a bogus pointer.  Pascal is a notable
>    exception.
    I am not aware of any DEC-supported languages for which this is true.  
    The list includes Pascal, PL/I, C, FORTRAN, BLISS, APL, Ada.  Also
    include Pillar and C++.
    Are these all notable exceptions too?  What languages are you 
    using Steph?
    
    Modula does guarantee short-circuiting but THAT seems to be the
    exception.
    
    I think you will find that most languages, particularly modern
    languages,  specifically do NOT do this because it inhibits 
    optimization.  Most modern languages that provide short-circuiting do 
    so explicitly via "and then" and "or else" operators.
    	db
 | 
| 1293.29 | VAXlisp - the exception proves the rule | CTHULU::YERAZUNIS | Hiding from the Turing Police | Tue Apr 05 1988 17:46 | 15 | 
|  |     VAXLISP specifically DOES use the above short-circuiting:
    
    <<<from page 82 of the CLtL:>>>
    	
    ...
    
    		and {form}*
    	
    	(and form1 form2 ...) evaluates each form, from left to right.
    If any form evaluates to nil, the value nil is immediately returned
    without evaluating the remaining forms.
    ^^^^^^^ ^^^^^^^^^^
    
    <<<end quote>>> 
    
 | 
| 1293.30 |  | NRPUR::DEATON | Now in NRO | Wed Sep 21 1988 10:44 | 32 | 
|  | 	Last night I was playing with my latest toy - Dr T's KCS sequencing
software.  I have now entered the world of individual MIDI event editing!
	Well, one of the first things I did was to download some sequences from 
the MIDI DJ into it to do some cleaning up of some previously ignored sequence 
glitches.  While cleaning up I noticed a lot of extraneous MIDI data - stuff 
that I have NO idea how it got there.
	Fer inst'nce...  At the end of one sequence, I found Control Change (CC)
1, which, I understand, is modulation.  Now all I have for a controller is an 
RD200, which has NO MOD WHEEL!  Another string of bites I found was CC 123 
(anyone know what THAT is?).  On both of these instances, it had a single value 
for EACH MIDI channel, starting from 16 going down to 1.
	Some questions:
	o  Does anyone have the faintest idea where these came from?  Is it 
	   possible that the RD200 is transmitting things it is not spec'd
	   out to do?
	o  Since I can now insert single midi events, I've thought of 
	   initializing modules that accept midi volume with a single volume
	   level command.  My question is this:  do midi modules expect a
	   string of volume control change commands (such as come from a slider)
	   or is one sufficient.  I tried it last night on the fly but didn't 
	   notice much of a difference, though I can think of a number of other 
	   reasons why I may not have noticed the volume change.  Does anyone 
	   have any idea?
	I thought I had another question, but I can't seen to recall...
	Dan
 | 
| 1293.31 | <slap!> <slap!> WAKE UP! | MIZZOU::SHERMAN | socialism doesn't work ... | Wed Sep 21 1988 11:32 | 7 | 
|  |     Could it be some kind of power-up, wake-up or other noise caused
    the DJ to record erroneous events?  Seems to me I've had something
    like this happen when using song pointer and recording what comes
    out of a drum machine.  Seemed the drum machine wasn't given enough
    time to catch up before its output was recorded ...
    
    Steve
 | 
| 1293.32 | Could be from the source | SNOJOB::MOLLER | TAICS / You Are Number 6 | Wed Sep 21 1988 13:58 | 12 | 
|  |     I've had similar experiances with my Suzuki Unisynth (XG1m - sort of
    like a guitar, but not really). It sends way too much stuff for my
    MMT-8 (sequencer) to trap. I lose a substantial amount of data because
    it decides to send pitch bend info, when I never touch the pitch bend
    arm (kind of like a vibrato on a guitar). For the most part, I've given
    up on using it as an input to my sequencer. I'd suspect that your
    system is kicking out some default values, just to make sure the the
    other devices slaved to it know what it's doing. My MT-32 and the Midi
    Merge on the MMT-8 work fine with the Unisynth, but the amount of
    messages is more than the sequencer knows what to do with.
							    Jens
 | 
| 1293.33 | Opinions & suggestions. | DYO780::SCHAFER | Brad ... DTN 433-2408 | Wed Sep 21 1988 14:03 | 18 | 
|  | RE: .30 (Dan)
    I *still* think your RD is spitting out garbage - but I've thought that
    all along.  Now that you have Dr. T's, you may just want to put the
    thing in record mode at a very slow tempo and let your RD sit there for
    3 or 4 minutes and see what you get.  Try the same thing playing,
    making sure you use the sustain pedal and the volume sliders.  Could be
    that you have a bad control somewhere. 
    Speaking of control, you will only need 1 MIDI volume command. I do
    this with MTP to set initial volumes of modules all the time.  If you
    want to do things like pitch bends and (de)cresendos, you may want to
    try using a very coarse granularity, then tighten up the gaps - you'll
    find that normal continuous controllers (like pitch bend, mod and
    volume) put out *many* more MIDI events than are necessary in most
    instances. 
-b
 | 
| 1293.34 |  | NRPUR::DEATON | Now in NRO | Wed Sep 21 1988 15:14 | 16 | 
|  | RE .31
	I doubt it is a 'noise' related phenomenon, because it comes out so
    
RE .32
	Interesting about the Unisynth.  The only thing, though, is that my
RD has no device that is SUPPOSED to send out pitch bend info for.
RE .33
	O.K., o.k., Brad, I may have to concede this time.  I'll try your test
and see.  And thanks for the info on midi volume/other controllers.
	Dan
 | 
| 1293.35 | 1/4096 of full arm travel | DFLAT::DICKSON | Koyaanisqatsi | Wed Sep 21 1988 16:19 | 8 | 
|  | Re 1293.32 by Moller
It could be that vibration of the arm is enough to send data.  Since
pitch-bend has lots of bits to play with (compared to key-pressure, say)
it could be that tiny movements are enough to set it off.
According to MidiScope, my Yamaha SHS sends clocks all the time, but it doesn't
send anything else unless I poke it. 
 | 
| 1293.36 | One step forward, two steps back... | NRPUR::DEATON | Now in NRO | Thu Sep 22 1988 08:44 | 11 | 
|  | 	Well, I found out what ONE of the messages was...
	Looking in my manual, I founf CC 123 stands for ALL NOTES OFF.  Actually
anything from 123 to 127 stands for All notes off, according to the RD MIDI
implementation chart.
	Brad,  I tried recording both idle and active sequences from the Rd into
KCS, and found nothing.  Back to the drawing board.
	Dan
 | 
| 1293.37 | (try) (try) (don't be ridiculous!) | DYO780::SCHAFER | Brad ... DTN 433-2408 | Thu Sep 22 1988 10:30 | 10 | 
|  |     Did you try adjusting sliders, using the sustain pedal, etc? 
    Another thing you might want to try is playing each note on the kybd
    individually and then reviewing the data to make sure that you don't
    have a "bad key" - i.e., one that xmits bogus data along with the good
    stuff. 
    Of course, you could just buy a Fairlight and be done with it. 
-b
 |