This is MiscTapper.m in view mode; [Download] [Up]
/* MiscTapper Version 1.2 Copyright (c) 1995 by Sean Luke Donated to the MiscKit Permission to use, copy, modify, and distribute this material for any purpose and without fee, under the restrictions as noted in the MiscKit copyright notice, is hereby granted, provided that the MiscKit copyright notice and this permission notice appear in all source copies, and that the author's name shall not be used in advertising or publicity pertaining to this material without the specific, prior written permission of the author. SEAN O. LUKE MAKES NO REPRESENTATIONS ABOUT THE ACCURACY OR SUITABILITY OF THIS MATERIAL FOR ANY PURPOSE. IT IS PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES. */ #import "MiscTapper.h" #import <soundkit/soundkit.h> #import <stdio.h> #import <objc/objc-runtime.h> #define TAPPER_BUFFER_SIZE 65536 // buffer size to deliver to stream reading in from microphone, // 64K of sound, or enough for about 8 seconds of CODEC. #define TAPPER_TAG 679201341 // if this object pauses, try changing this arbitrary tag #define TAPPER_REFRESH .1 // fraction of a second tapper checks for finished data. // timed entry header DPSTimedEntryProc tapper_timer (DPSTimedEntry teNum,double now, void* the_tapper); @implementation MiscTapper - _update // Private { if (tapper_load) { tapper_load=0; [tapper_stream recordSize:TAPPER_BUFFER_SIZE tag:TAPPER_TAG]; } return self; } - init { id returnval; returnval=[super init]; tapper_device=[[NXSoundIn alloc] init]; tapper_stream=[[NXRecordStream alloc] initOnDevice:tapper_device]; [tapper_stream setDelegate:self]; return returnval; } - awake { id returnval; returnval=[super awake]; tapper_device=[[NXSoundIn alloc] init]; tapper_stream=[[NXRecordStream alloc] initOnDevice:tapper_device]; [tapper_stream setDelegate:self]; return returnval; } - stop:sender { running=0; if (teNum) DPSRemoveTimedEntry(teNum); teNum=0; [tapper_stream deactivate]; return self; } - run:sender { if (running) return self; // Already running. Why re-run? tapper_load=1; // This ensures that the tapper is // ready to accept stream info. // When deactivated a stream may not // have finished recording, so // tapper_load could possibly be 0! running=1; [tapper_stream activate]; if (teNum) DPSRemoveTimedEntry(teNum); teNum=DPSAddTimedEntry(TAPPER_REFRESH, (DPSTimedEntryProc) tapper_timer, (void*) self, (int) NX_RUNMODALTHRESHOLD); return self; } - free { running=0; // just in case [tapper_stream deactivate]; if (teNum) DPSRemoveTimedEntry(teNum); teNum=0; [tapper_stream free]; [tapper_device free]; return [super free]; } - soundStream:sender didRecordData:(void*) data size:(unsigned int) numBytes forBuffer:(int)tag { vm_deallocate(task_self(),(vm_address_t) data,(vm_size_t) numBytes); tapper_load=1; return self; } @end // timed entry procedure for periodically updating DPSTimedEntryProc tapper_timer (DPSTimedEntry teNum,double now, void* the_tapper) { MiscTapper* temp_tapper=(MiscTapper*) the_tapper; [temp_tapper _update]; return (void*) NULL; }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.