Retired Document
Important: This sample code may not represent best practices for current development. The project may use deprecated symbols and illustrate technologies and techniques that are no longer recommended.
RecordToFile.c
#include <Quickdraw.h> |
#include <Windows.h> |
#include <dialogs.h> |
#include <Files.h> |
#include <StandardFile.h> |
#include <OSEvents.h> |
#include <Memory.h> |
#include <Sound.h> |
#include <SoundInput.h> |
#include <OSUtils.h> |
#define TRUE 0xFF |
#define FALSE 0 |
typedef struct { |
short OnOff; |
short Level; |
} Level; |
pascal void MyRecComp (SPBPtr inParamPtr); |
#ifdef powerc |
QDGlobals qd; |
#endif |
main() |
{ |
Point where = {20,20}; |
SFReply reply; |
short SomeRefNum; |
Level myLevel; |
OSErr err; |
SPBPtr RecordRec; |
long SoundRefNum; |
long totalMilRecord; |
ParmBlkPtr paramBlock; |
SICompletionUPP mySICompletionUPP; |
InitGraf(&qd.thePort); |
FlushEvents(everyEvent, 0); |
InitWindows(); |
InitDialogs(nil); |
InitCursor(); |
SFGetFile (where, "\p", nil, -1, nil, nil, &reply); |
err = FSOpen(reply.fName, reply.vRefNum, &SomeRefNum); |
if (err != noErr) |
Debugger(); |
err = SetupAIFFHeader (SomeRefNum, 1, 0x56EE8BA3, 8, 'NONE', 0, 0); |
if (err != noErr) |
Debugger(); |
err = SPBOpenDevice (nil, siWritePermission, &SoundRefNum); |
if (err != noErr) |
Debugger(); |
myLevel.OnOff = 1; |
myLevel.Level = 0; |
err = SPBSetDeviceInfo (SoundRefNum,siTwosComplementOnOff, (Ptr) &myLevel); |
if (err != noErr) |
Debugger(); |
RecordRec = (SPBPtr) NewPtr(sizeof (SPB)); |
if (MemError() != noErr || RecordRec == nil) |
Debugger(); |
/* create a SICompletionUPP */ |
mySICompletionUPP = NewSICompletionProc(MyRecComp); |
RecordRec->inRefNum = SoundRefNum; |
RecordRec->count = 0; |
RecordRec->milliseconds = 15000; |
RecordRec->bufferLength = 0; |
RecordRec->bufferPtr = nil; |
RecordRec->completionRoutine = mySICompletionUPP; |
RecordRec->interruptRoutine = nil; |
RecordRec->userLong = 0; |
RecordRec->error = 0; |
RecordRec->unused1 = 0; |
err = SPBRecordToFile (SomeRefNum, RecordRec, TRUE); |
if (err != noErr) |
Debugger(); |
do { |
} while (RecordRec->userLong == 0); |
totalMilRecord = 15000; |
err = SPBMillisecondsToBytes(SoundRefNum, &totalMilRecord); |
if (err != noErr) |
Debugger(); |
paramBlock = (ParmBlkPtr) NewPtr(sizeof (IOParam)); |
if (MemError() != noErr || paramBlock == nil) |
Debugger(); |
paramBlock->ioParam.ioRefNum = SomeRefNum; |
paramBlock->ioParam.ioPosMode = 1; |
paramBlock->ioParam.ioPosOffset = 0; |
err = PBSetFPos(paramBlock, FALSE); |
if (err != noErr) |
Debugger(); |
err = SetupAIFFHeader (SomeRefNum, 1, 0x56EE8BA3, 8, 'NONE', totalMilRecord, 0); |
if (err != noErr) |
Debugger(); |
SPBCloseDevice (SoundRefNum); |
DisposePtr ((Ptr) RecordRec); |
err = SndStartFilePlay (nil, SomeRefNum, 0, 74000, nil, nil, nil, FALSE); |
if (err != noErr) |
Debugger(); |
FSClose (SomeRefNum); |
DisposeRoutineDescriptor(mySICompletionUPP); |
} |
/**********************************/ |
pascal void MyRecComp (SPBPtr inParamPtr) |
{ |
inParamPtr->userLong = 1; |
return; |
} |
/**********************************/ |
Copyright © 2003 Apple Computer, Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2003-01-14