home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1995 August / NEBULA.mdf / SourceCode / MiscKit1.2.6 / Palettes / MiscSoundPalette / MiscSoundUtil.subproj / MiscTapper.m < prev    next >
Encoding:
Text File  |  1994-05-27  |  2.0 KB  |  102 lines

  1. #import "MiscTapper.h"
  2. #import <soundkit/soundkit.h>
  3. #import <stdio.h>
  4. #import <objc/objc-runtime.h>
  5.  
  6. volatile int    tapper_initialized;
  7. volatile int    tapper_suspended;
  8. volatile int    tapper_load;
  9.  
  10.  
  11. #define            TAPPER_BUFFER_SIZE        44100
  12.     // buffer size to deliver to stream reading in from microphone
  13. #define         TAPPER_TAG                 679201341        
  14.     // if this object pauses, try changing this arbitrary tag
  15. #define            TAPPER_REFRESH            .1
  16.     // fraction of a second tapper checks for finished data.
  17.  
  18.  
  19.  
  20. // timed entry procedure for periodically updating
  21.  
  22. DPSTimedEntryProc tapper_timer
  23.     (DPSTimedEntry teNum,double now, void* the_tapper)
  24.     {
  25.     MiscTapper* temp_tapper=(MiscTapper*) the_tapper;
  26.     [temp_tapper update];
  27.     return (void*) NULL;
  28.     }
  29.  
  30.  
  31. @implementation MiscTapper
  32.     
  33. - init
  34.     {
  35.     id returnval;
  36.     if (tapper_initialized) return NULL;
  37.     tapper_initialized=YES;
  38.     returnval=[super init];
  39.     tapper_device=[[NXSoundIn alloc] init];
  40.     tapper_stream=[[NXRecordStream alloc] initOnDevice:tapper_device];
  41.     [tapper_stream activate];
  42.     [tapper_stream setDelegate:self];
  43.     tapper_load=1;
  44.     
  45.     teNum=DPSAddTimedEntry(TAPPER_REFRESH, 
  46.         (DPSTimedEntryProc) tapper_timer,
  47.         (void*) self, (int) NX_RUNMODALTHRESHOLD);
  48.     return returnval;
  49.     }
  50.  
  51. - suspend:sender
  52.     {
  53.     if (teNum) DPSRemoveTimedEntry(teNum);
  54.     teNum=0;
  55.     [tapper_stream deactivate];
  56.     return self;
  57.     }
  58.     
  59.     
  60. - resume:sender
  61.     {
  62.     if (teNum) DPSRemoveTimedEntry(teNum);
  63.     teNum=DPSAddTimedEntry(TAPPER_REFRESH, 
  64.         (DPSTimedEntryProc) tapper_timer,
  65.         (void*) self, (int) NX_RUNMODALTHRESHOLD);
  66.     [tapper_stream activate];
  67.     return self;
  68.     }
  69.  
  70.  
  71. - free
  72.     {
  73.     if (teNum) DPSRemoveTimedEntry(teNum);
  74.     teNum=0;
  75.     [tapper_stream deactivate];
  76.     [tapper_stream free];
  77.     [tapper_device free];
  78.     tapper_initialized=NO;
  79.     return [super free];
  80.     }
  81.  
  82. - soundStream:sender didRecordData:(void*) data 
  83.     size:(unsigned int) numBytes forBuffer:(int)tag
  84.     {
  85.     vm_deallocate(task_self(),(vm_address_t) data,(vm_size_t) numBytes);
  86.     tapper_load=1;
  87.     return self;
  88.     }
  89.     
  90.     
  91. - update
  92.     {
  93.     if (tapper_load) 
  94.         {
  95.         tapper_load=0;
  96.         [tapper_stream recordSize:TAPPER_BUFFER_SIZE tag:TAPPER_TAG];
  97.         }
  98.     return self;    
  99.     }    
  100.     
  101. @end
  102.