Class: MusicMagnitude

Environment: Siren
Superclass: Magnitude
Category: Music-Models-Representation
Instance variables: value

Instances of the subclasses of MusicMagnitude are used to represent scalar magnitudes in musical objects. The class MusicMagnitude is a place for the music magnitudes to share their state and basic accessing behavior.

MusicMagnitudes generally implement precise mixed-mode arithmetic and comparison methods using a per-species generality table and auto-coercion within a species.

The "type abstraction" classes (Duration, Pitch, Amplitude, etc.) represent "what"; they are never instantiated; their class creation methods answer instances of their species, but they manage coercion within the classes of their species. The "representational abstraction" classes (NominalMagnitude, OrdinalMagnitude, NumericalMagnitude, RatioMagnitude, etc.) represent "how"; they share value model semantics and coercion techniques. Note that the concrete implementation classes therefore answer their species by property model rather than by implementation subclass (i.e., HertzPitch species --> Pitch rather than NumericalMagnitude).

MusicMagnitudes can have dependents (observers), and send themselves the changed: message when their values are changed.

There are many examples in the implementation classes and the Siren outline.

Instance variables:
value the magnitude's value

accessing

, anArgument
Answer en Event with the given magnitude as its first property.

value
Answer the instance variable 'value'.

value: theValue
Accept the argument, 'theValue', as the new instance variable 'value'
and signal any dependents.

printing

printOn: aStream
Print the receiver on the argument as a MM declaration.

printOn: aStream parens: useParens
Print the receiver on the argument as a MM declaration.

printString
Answer a String whose characters are a description of the receiver.

printStringParens: bool
Answer a String whose characters are a description of the receiver.

printValue

storeOn: aStream
Store the receiver on the argument as a MM declaration.

units
Answer the units string of the receiver.

private

species
Answer MusicMagnitude.

converting

adaptToNumber: rcvr andSend: selector
If I am involved in arithmetic with a number, convert me to a number.

coerceTo: type
Coerce the receiver to the given class and answer a new object.

ddMsgName
Answer the selector to be used in coercing double-dispatching messages.

msec
Answer a MSecondDuration.

usec
Answer a MSecondDuration.

testing

isImmediate
Answer whether the receiver has an immediate representation.

isMusicMagnitude
Answer true for the receiver and all subsclasses.

arithmetic

* aValue
Answer the product of the receiver and the argument

+ aValue
Answer the sum of the receiver and the argument, doing generality-based
class coercion within a species using auto-generated coercion messages.

- aValue
Answer the difference of the receiver and the argument

/ aValue
Answer the quotient of the receiver and the argument

comparing

< aValue
Answer whether the receiver is less than the argument

= aValue
Answer whether the receiver and the argument are equal.

hash
Answer a SmallInteger unique to the receiver.

MetaClass: MusicMagnitude class

instance creation

value: aValue
Answer and instance with the argument as its value.

class constants

color
Answer the default color to display instances with (hack for making pretty graphs).

propertyName
Answer the receiver class's default property name.

relativeMember
Answer the receiver class's species member used as a relative magnitude.