home *** CD-ROM | disk | FTP | other *** search
/ Education Sampler 1992 [NeXTSTEP] / Education_1992_Sampler.iso / Programming / Source / Looching2.0 / LoochPerformer.m < prev    next >
Encoding:
Text File  |  1991-09-07  |  2.8 KB  |  163 lines

  1. #import <musickit/musickit.h>
  2. #import "LoochPerformer.h"
  3. #import "RandomIzer.h"
  4.  
  5. @implementation LoochPerformer:Performer
  6. {
  7.     id LoochNote;
  8. }
  9.  
  10. int aTag;
  11. id RandNum;
  12.  
  13. -initialize
  14.   /* This method is invoked when a new instance is created. */
  15. {
  16.  
  17.     /* You must send [super initialize] in your subclass' implementation. */
  18.     [super initialize];
  19.     LoochNote = [Note new];
  20.     [LoochNote setNoteType:MK_noteOn];
  21.     [LoochNote setNoteTag:aTag = MKNoteTag()];
  22.     /* We give ourselves one NoteSender. */  
  23.     [self addNoteSender:[NoteSender new]];
  24.  
  25.     [self setDefaults];
  26.     
  27.     RandNum = [RandomIzer new];
  28.     [RandNum setit];
  29.  
  30.     return self;
  31. }
  32.  
  33.  
  34. -setDefaults
  35. /* used internally to set the LoochNote attributes upon initialization */
  36. {
  37.     [LoochNote setPar:MK_amp toDouble:0.1];
  38.     [LoochNote setPar:MK_freq0 toDouble:100.0];
  39.     [LoochNote setPar:MK_freq1 toDouble:100.0];
  40. //    [LoochNote setPar:MK_bearing toDouble:0.0];
  41.     [LoochNote setPar:MK_waveform toWaveTable:nil];
  42.     [LoochNote setPar:MK_ampAtt toDouble:1.0];
  43.     [LoochNote setPar:MK_ampRel toDouble:1.0];
  44.     [LoochNote setPar:MK_svibFreq toDouble:0.2];
  45.     [LoochNote setPar:MK_svibAmp toDouble:1.0];
  46.     [LoochNote setPar:MK_rvibFreq toDouble:0.2];
  47.     [LoochNote setPar:MK_rvibAmp toDouble:1.0];
  48. }
  49.  
  50.  
  51. -startNote
  52. {
  53.     [LoochNote setNoteType:MK_noteOn];
  54.     [[self noteSender] sendNote:LoochNote];
  55.  
  56.     return self;
  57. }
  58.  
  59.  
  60. -stopNote
  61. {
  62.     [LoochNote setNoteType:MK_noteOff];
  63.     [[self noteSender] sendNote:LoochNote];
  64.  
  65.     return self;
  66. }
  67.  
  68.  
  69. -changeNote
  70. {
  71.     [LoochNote setNoteType:MK_noteUpdate];
  72.     [[self noteSender] sendNote:LoochNote];
  73.  
  74.     return self;
  75. }
  76.  
  77.  
  78. -pause
  79. {
  80.     [LoochNote setNoteType:MK_noteOff];
  81.     [[self noteSender] sendNote:LoochNote];
  82.  
  83.     return self;
  84. }
  85.  
  86. -setfreq:(double)hz spread:(double)window
  87. {
  88.     double deviate = [RandNum GetPlusMinus:window];
  89.     
  90.     [LoochNote setPar:MK_freq0 toDouble:hz];
  91.     [LoochNote setPar:MK_freq1 toDouble:(hz+deviate)];
  92.  
  93.     return(self);
  94. }
  95.  
  96. -setamp:(double)amplitude
  97. {
  98.     [LoochNote setPar:MK_amp toDouble:amplitude];
  99.  
  100.     return(self);
  101. }
  102.  
  103. -setbearing:(double)bearing
  104. {
  105.     [LoochNote setPar:MK_bearing toDouble:bearing];
  106.  
  107.     return(self);
  108. }
  109.  
  110. -setwave:(id)thePartials
  111. {
  112.     [LoochNote setPar:MK_waveform toWaveTable:thePartials];
  113.     
  114.     return(self);
  115. }
  116.  
  117. -setattack:(double)attack
  118. {
  119.     [LoochNote setPar:MK_ampAtt toDouble:attack];
  120.     
  121.     return(self);
  122. }
  123.  
  124. -setdecay:(double)decay
  125. {
  126.     [LoochNote setPar:MK_ampRel toDouble:decay];
  127.  
  128.     return(self);
  129. }
  130.  
  131. -setvibfreq0:(double)vfreq
  132. {
  133.     [LoochNote setPar:MK_svibFreq toDouble:vfreq];
  134.  
  135.     return(self);
  136. }
  137.  
  138. -setvibfreq1:(double)vfreq
  139. {
  140.     [LoochNote setPar:MK_rvibFreq toDouble:(vfreq)];
  141.  
  142.     return(self);
  143. }
  144.  
  145. -setvibamp0:(double)vamp
  146. /* this is expressed as Hz, which represents the max deviation in Hz
  147.    from the base freq */
  148. {
  149.     [LoochNote setPar:MK_svibAmp toDouble:vamp];
  150.  
  151.     return(self);
  152. }
  153.  
  154. -setvibamp1:(double)vamp
  155. /* this is expressed as Hz, which represents the max deviation in Hz
  156.    from the base freq */
  157. {
  158.     [LoochNote setPar:MK_rvibAmp toDouble:(vamp)];
  159.  
  160.     return(self);
  161. }
  162.  
  163. @end