download MKPartPerformer.h
Language: ObjectiveC
Copyright: (c) 1988-1992, NeXT Computer, Inc. (c) 1994 Stanford University. (c) 1999-2001, The MusicKit Project. (c) 1994 NeXT Computer, Inc. and reproduced under license from NeXT
LOC: 33
Project Info
The MusicKit(musickit)
Server: SourceForge
Type: cvs
...sicKit\Frameworks\MusicKit\
   _ArielQP.h
   _DSPMK.h
   _error.h
   _midi.h
   _MKAppProxy.h
   _MKAppProxy.m
   _MKNameTable.h
   _MKNameTable.m
   _MKParameter.h
   _MTCHelper.h
   _MTCHelper.m
   _musickit.h
   _noteRecorder.h
   _OrchloopbeginUG.h
   _OrchloopbeginUG.m
   _ParName.h
   _ParName.m
   _scorefile.h
   _ScorefileVar.h
   _ScorefileVar.m
   _SharedSynthInfo.h
   _SharedSynthInfo.m
   _synthElementMethods.m
   _time.h
   ArielQP.h
   ArielQP.m
   classFuncs.h
   ConductorPrivate.h
   dsp_types.h
   DSPSerialPortDevice.h
   dspwrap.h
   EnvelopePrivate.h
   equalTempered.m
   errors.h
   fastFFT.c
   fastFFT.h
   GNUmakefile.postamble
   GNUmakefile.preamble.in
   InstrumentPrivate.h
   keynums.h
   libMusicKit.def
   Localized.strings
   make.sh
   Makefile.postamble
   Makefile.preamble
   midi_spec.h
   midifile.h
   midifile.m
   MidiPrivate.h
   midiTranslation.h
   MKConductor.h
   MKConductor.m
   MKConductorDelegate.h
   MKDeviceStatus.h
   MKEnvelope.h
   MKEnvelope.m
   MKFilePerformer.h
   MKFilePerformer.m
   MKFileWriter.h
   MKFileWriter.m
   MKInstrument.h
   MKInstrument.m
   MKMidi.h
   MKMidi.m
   MKMixerInstrument.h
   MKMixerInstrument.m
   MKMTCPerformer.h
   MKMTCPerformer.m
   MKNote.h
   MKNoteFilter.h
   MKNoteFilter.m
   MKNoteReceiver.h
   MKNoteReceiver.m
   MKNoteSender.h
   MKNoteSender.m
   MKOrchestra.h
   MKPart.m
   MKPartials.h
   MKPartials.m
   ...tialsWaveshapingTable.m
   MKPartPerformer.h
   MKPartPerformer.m
   MKPartRecorder.h
   MKPartRecorder.m
   MKPatch.h
   MKPatch.m
   MKPatchConnection.h
   MKPatchConnection.m
   MKPatchEntry.h
   MKPatchEntry.m
   MKPatchTemplate.h
   MKPatchTemplate.m
   MKPerformer.h
   MKPerformer.m
   MKPerformerDelegate.h
   MKPlugin.h
   MKSamplerInstrument.h
   MKSamplerInstrument.m
   MKSamples.h
   MKScore.h
   MKScore.m
   MKScorefileObject.h
   MKScorefilePerformer.h
   MKScorefilePerformer.m
   MKScorefileWriter.m
   MKScorePerformer.h
   MKScorePerformer.m
   MKScoreRecorder.h
   MKScoreRecorder.m
   MKSynthData.h
   MKSynthData.m
   MKSynthInstrument.h
   MKSynthPatch.h
   MKTimbre.h
   MKTimbre.m
   MKTuningSystem.h
   MKTuningSystem.m
   MKUnitGenerator.h
   MKUnitGenerator.m
   MKWaveTable.h
   MKWaveTable.m
   mtcMidi.m
   mtcMidiPrivate.m
   MusicKit-Info.plist
   MusicKit.h
   MusicKitConfig.h.in
   names.h
   noDVal.h
   noteDispatcherMethods.m
   NotePrivate.h
   noteRecorderCFuncs.m
   noteRecorderMethods.m
   orch.h
   OrchestraPrivate.h
   OrchloopbeginUG.h
   OrchloopbeginUG.m
   orchloopbeginUGInclude.m
   params.h
   parNames.m
   partialsDBInclude.m
   PartialsPrivate.h
   PartPerformerPrivate.h
   PartPrivate.h
   PartRecorderPrivate.h
   PatchTemplatePrivate.h
   PB.project
   PerformerPrivate.h
   pitches.h
   platform.make
   ...efilePerformerPrivate.h
   ScorePerformerPrivate.h
   ScorePrivate.h
   ScoreRecorderPrivate.h
   SynthDataPrivate.h
   synthElementCFuncs.m
   synthElementMethods.m
   SynthInstrumentPrivate.h
   SynthPatchList.h
   SynthPatchList.m
   SynthPatchPrivate.h
   timetagInclude.m
   timeunits.h
   tokenNames.m
   tokens.h
   trigonometry.c
   trigonometry.h
   TuningSystemPrivate.h
   UnitGeneratorPrivate.h
   win32-def.top
   writeBinary.m
   writeMidi.m
   writeScore.m

/*
  $Id: MKPartPerformer.h,v 1.10 2005/05/11 02:16:30 leighsmith Exp $
  Defined In: The MusicKit

  Description:
    A MKPartPerformer object performs the MKNotes in a particular MKPart.  
    Every MKPartPerformer has exactly one MKNoteSender.  A MKPartPerformer is
    associated with a MKPart through its setPart: method.  While a single
    MKPartPerformer can only be associated with one MKPart, any number of
    MKPartPerformers can by associated with the same MKPart.  If you're
    performing a MKScore, you can use MKScorePerformer to create
    MKPartPerformers for you (one for each MKPart in the MKScore).

    When you activate a MKPartPerformer (through activateSelf) the object
    copies its MKPart's NSArray of MKNotes (it doesn't copy the MKNotes
    themselves).  When it's performed, the MKPartPerformer sequences over
    its copy of the NSArray, allowing you to edit the MKPart (by adding or
    removing MKNotes) without disturbing the performance -- changes made to
    a MKPart during a performance are not seen by the MKPartPerformer.
    However, since only the NSArray of MKNotes is copied but not the MKNotes
    themselves, you should neither alter nor free a MKPart's MKNotes during a
    performance.
   
    The timing variables firstTimeTag, lastTimeTag, beginTime,
    and duration affect the timing and performance duration of a
    MKPartPerformer.  Only the MKNotes with timeTag values between
    firstTimeTag and lastTimeTag (inclusive) are performed.  Each of these
    notes performance times is computed as its timeTag plus timeShift.
    If the newly computed performance time is greater than duration, the MKNote
    is suppressed and the MKPartPerformer is deactivated.
   
    CF: MKScorePerformer, MKPart

  Original Author: David A. Jaffe

  Copyright (c) 1988-1992, NeXT Computer, Inc.
  Portions Copyright (c) 1994 NeXT Computer, Inc. and reproduced under license from NeXT
  Portions Copyright (c) 1994 Stanford University.
  Portions Copyright (c) 1999-2001, The MusicKit Project.
*/
/*!
  @class MKPartPerformer
  @brief A MKPartPerformer object performs the MKNotes in a particular MKPart.
 
Every MKPartPerformer has exactly one MKNoteSender.  A MKPartPerformer is associated
with a MKPart through its <b>setPart:</b> method.  While a single
MKPartPerformer can only be associated with one MKPart, any number of
MKPartPerformers can by associated with the same MKPart.  If you're performing a
MKScore, you can use MKScorePerformer to create MKPartPerformers for you (one
for each MKPart in the MKScore).

When you activate a MKPartPerformer (through <b>activateSelf</b>) the object
copies its MKPart's NSMutableArray of MKNotes (it doesn't copy the MKNotes
themselves).  When the MKPartPerformer performs, it sequences over its copy of
the NSMutableArray, allowing you to edit the MKPart (by adding or removing
MKNotes) without disturbing the performance - changes made to a MKPart during a
performance are not seen by the MKPartPerformer.  However, since only the
NSMutableArray of MKNotes is copied but not the MKNotes themselves, you should
neither alter nor free a MKPart's MKNotes during a performance.

As an optimization for real time, you can enable a "Fast Activation mode", on a
class-wide basis.  Any MKPartPerformer activated  when this mode is in effect
does not retain its own copy of its MKPart's NSMutableArray.  In this mode, you
must not edit the MKPart while the MKPartPerformer is using it.

With the timing variables <b>firstTimeTag</b> and <b>lastTimeTag</b>, you can
specify the first and last timeTag values that are considered for performance. 
Keep in mind that you can offset the timing of a performance by setting the
<b>timeShift</b> variable defined in MKPerformer, and you can limit the duration
of the performance by setting the <b>duration</b> variable.

An example will clarify how <b>firstTimeTag</b>works.  If <b>firstTimeTag</b> 
is set to 3 and the MKPartPerformer is activated at time 0, then the first note
will sound at time 3.  If the MKPartPerformer is activated at time 1, the first
note will sound at time 4.  If <b>timeShift</b> is set to -1 and the
MKPartPerformer is activated at time 1, the first note will sound at time
3.

  @see  MKPerformer, MKScorePerformer, MKPart
*/
#ifndef __MK_PartPerformer_H___
#define __MK_PartPerformer_H___

#import "MKPerformer.h"
#import "MKScorePerformer.h"

@interface MKPartPerformer : MKPerformer
{
    MKNote *nextNote;            /* The next note to perform. Updated in -perform. */ 
    MKPart *part;                /* The MKPart associated with this object. */
    double firstTimeTag;         /* The smallest timeTag value considered for performance.  */
    double lastTimeTag;          /* The greatest timeTag value considered for performance.  */

@private
    int noteIndex;
    int noteCount;
    NSArray *noteArray;
    MKScorePerformer *scorePerformer;
}


/*!
  @param  yesOrNo is a BOOL.
  @return Returns an id.
  @brief If <i>yesOrNo</i> is YES, MKPartPerformers do <i>not</i> copy the
  MKPart's NSMutableArray of MKNotes when they activate.

  Fast
  Activation mode is provided for real-time situations where
  instantaneous activation is required, such as when triggering a
  sequence.  In this mode, MKNotes may not be added or removed from
  the MKPart while the MKPartPerformer is using it. 
  
*/
+setFastActivation:(BOOL)yesOrNo;
 /* If you send [MKPartPerformer setFastActivation:YES], MKPartPerformers 
    activated from then on will NOT copy the MKPart's NSArray of MKNotes.  
    That is, they will use [part notesNoCopy] instead of [part notes].
    If you use this mode, you may not modify the part while the MKPartPerformer
    is active. Default is NO.
  */

/*!
  @return Returns a BOOL.
  @brief Returns whether Fast Activation mode is enabled for the class.

  The
  default is NO.  See setFastActivation:.
*/
+(BOOL)fastActivation;

/*!
  @return Returns an id.
  @brief Initializes the receiver by creating and adding its single
  MKNoteSender.

  You must invoke this method after creating a new
  MKPartPerformer. A subclass implementation should send <b>[super
  init]</b> before performing its own initialization.  The return
  value is ignored.
*/
- init;
/*!
  @param  aPart is an id.
  @return Returns an id.
  @brief Associates the receiver with <i>aPart</i>.

  If the receiver is
  active, this does nothing and returns <b>nil</b>.  Otherwise returns
  the receiver.
*/
- setPart: (MKPart *) aPart; 

/*!
  @brief Returns the receiver's MKPart object.
  @return Returns the MKPart instance over which we sequence.
*/
- (MKPart *) part;

/*!
  @return Returns an id.
  @brief Activates the receiver for a performance.

  The receiver creates a
  copy of its MKPart's NSMutableArray of MKNotes (unless Fast
  Activation mode is enabled), sets <b>nextNote</b> to the first
  MKNote in the NSMutableArray, and sets <b>nextPerform</b> (an
  instance variable inherited from MKPerformer that defines the time to
  pperform <b>nextNote</b>) to the MKNote's timeTag plus
  <b>timeShift</b>.
  
  You never invoke this method directly; it's invoked as part of the
  <b>activate</b> method inherited from MKPerformer.  A subclass implementation
  should send <b>[super activateSelf]</b>.  If <b>activateSelf</b> returns
  <b>nil</b>, the receiver isn't activated.  The default implementation
  returns <b>nil</b> if there aren't any MKNotes in the receiver's MKNote
  NSMutableArray, otherwise it returns the receiver.  The <b>activate</b>
  method performs further timing checks.
*/
- activateSelf; 

/*!
  @brief Deactivates the receiver and frees its NSMutableArray of MKNotes.

  
  You never invoke this method directly; it's invoked as part of the
  <b>deactivate</b> method inherited from MKPerformer.  The return
  value is ignored.
*/
- (void) deactivate; 

/*!
  @return Returns an id.
  @brief Performs <b>nextNote</b> (by sending it to its MKNoteSender's
  connections) and then prepares the receiver for its next MKNote
  performance.

  It does this by seting <b>nextNote</b> to the next
  MKNote in its NSMutableArray and setting <b>nextPerform</b> to that
  MKNote's timeTag minus the value of <b>firstTimeTag</b>.  You never
  invoke this method directly; it's automatically invoked by the
  receiver's MKConductor during a performance.  A subclass
  implementation should send <b>[super perform]</b>.  The return value
  is ignored. To help support MIDI time code,  <b>perform</b> sends
  all noteUpdates up to the current time when it is first invoked. 
  This makes sure that all MKSynthInstruments and MIDI controllers
  have the proper values. 
*/
- perform; 

/*!
  @param  aTimeTag is a double.
  @return Returns an id.
  @brief Sets the value of the receiver's <b>firstTimeTag</b> variable to
  <i>aTimeTag</i>.

  Only MKNotes within the time span from <b>firstTimeTag</b>
  to <b>lastTimeTag</b> are included in the performance.
*/
- setFirstTimeTag: (double) aTimeTag; 

/*!
  @param  aTimeTag is a double.
  @return Returns an id.
  @brief Sets the value of the receiver's <b>lasTimeTag</b> variable to
  <i>aTimeTag</i>.

  Only MKNotes within the time span from <b>firstTimeTag</b>
  to <b>lastTimeTag</b> are included in the performance.
*/
- setLastTimeTag: (double) aTimeTag; 

/*!
  @return Returns a double.
  @brief Returns the value of the receiver's <b>firstTimeTag</b>instance
  variable.

  
*/
- (double) firstTimeTag; 

/*!
  @return Returns a double.
  @brief Returns the value of the receiver's <b>lasTimeTag</b>instance
  variable.

  
*/
- (double) lastTimeTag; 

/*!
  @param  zone is an NSZone.
  @return Returns an id.
  @brief Creates and returns a new MKPartPerformer as a copy of the
  receiver.

  The new object has its own MKNoteReceiver collection
  that contains copies of the receiver's MKNoteReceivers.
  The new MKNoteReceivers' connections (see the MKNoteReceiver class)
  are copied from the MKNoteReceivers in the receiver.
*/
- copyWithZone: (NSZone *) zone; 

/* 
  You never send this message directly.  
  Invokes superclass write: then archives firstTimeTag and lastTimeTag.
  Optionally archives part using NXWriteObjectReference().
 */
- (void) encodeWithCoder: (NSCoder *) aCoder;

/* 
  Note that -init is not sent to newly unarchived objects.
 */
- (id) initWithCoder: (NSCoder *) aDecoder;

@end

#endif

About Koders | Resources | Downloads | Support | Black Duck | Submit Project | Terms of Service | DMCA | Privacy Policy | Site Map| Contact Us