executor/src/include/SoundMgr.h

368 lines
10 KiB
C
Raw Normal View History

#if !defined (__SOUNDMGR__)
#define __SOUNDMGR__
/*
* Copyright 1992 by Abacus Research and Development, Inc.
* All rights reserved.
*
* $Id: SoundMgr.h 63 2004-12-24 18:19:43Z ctm $
*/
#include "QuickDraw.h"
typedef struct {
INTEGER cmd PACKED;
INTEGER param1 PACKED;
LONGINT param2 PACKED;
} SndCommand;
#define stdQLength 128
enum
{
stdSH = 0, /* standard sound header */
cmpSH = 0xFE, /* compressed sound header */
extSH = 0xFF, /* extended sound header */
};
typedef struct _SndChannel {
struct _SndChannel *nextChan PACKED_P;
Ptr firstMod PACKED_P;
ProcPtr callBack PACKED_P;
LONGINT userInfo PACKED;
LONGINT wait PACKED;
SndCommand cmdInProg LPACKED;
INTEGER flags PACKED;
INTEGER qLength PACKED;
INTEGER qHead PACKED;
INTEGER qTail PACKED;
SndCommand queue[stdQLength] LPACKED;
} SndChannel, *SndChannelPtr;
#define SND_CHAN_FLAGS_X(c) (c->flags)
#define SND_CHAN_FLAGS(c) (CW (SND_CHAN_FLAGS_X (c)))
typedef struct { SndChannelPtr p PACKED_P; } HIDDEN_SndChannelPtr;
enum {
nullCmd,
initCmd,
freeCmd,
quietCmd,
flushCmd,
waitCmd = 10,
pauseCmd,
resumeCmd,
callBackCmd,
syncCmd,
emptyCmd,
tickleCmd = 20,
requestNextCmd,
howOftenCmd,
wakeUpCmd,
availableCmd,
noteCmd = 40,
restCmd,
freqCmd,
ampCmd,
timbreCmd,
waveTableCmd = 60,
phaseCmd,
soundCmd = 80,
bufferCmd,
rateCmd,
midiDataCmd = 100,
};
typedef struct {
LONGINT offset PACKED;
LONGINT nsamples PACKED;
LONGINT rate PACKED;
LONGINT altbegin PACKED;
LONGINT altend PACKED;
INTEGER basenote PACKED;
unsigned char buf[1] LPACKED;
} soundbuffer_t;
typedef struct _SoundHeader {
Ptr samplePtr PACKED_P;
LONGINT length PACKED;
Fixed sampleRate PACKED;
LONGINT loopStart PACKED;
LONGINT loopEnd PACKED;
Byte encode LPACKED;
Byte baseFrequency LPACKED;
Byte sampleArea[0] LPACKED;
} SoundHeader, *SoundHeaderPtr;
typedef struct _ExtSoundHeader {
Ptr samplePtr PACKED_P;
LONGINT numChannels PACKED;
Fixed sampleRate PACKED;
LONGINT loopStart PACKED;
LONGINT loopEnd PACKED;
Byte encode LPACKED;
Byte baseFrequency LPACKED;
LONGINT numFrames PACKED;
Extended AIFFSampleRate PACKED; /* ??? should be Extended80 */
Ptr MarkerChunk PACKED;
Ptr instrumentChunks PACKED;
Ptr AESRecording PACKED;
INTEGER sampleSize PACKED;
INTEGER futureUse1 PACKED;
LONGINT futureUse2 PACKED;
LONGINT futureUse3 PACKED;
LONGINT futureUse4 PACKED;
Byte sampleArea[0] LPACKED;
} ExtSoundHeader, *ExtSoundHeaderPtr;
enum {
noteSynth = 1,
waveTableSynth = 3,
sampledSynth = 5,
MIDISynthIn = 7,
MIDISynthOut = 9,
};
#define badChannel (-205)
#define badFormat (-206)
#define noHardware (-200)
#define notEnoughHardware (-201)
#define queueFull (-203)
#define resProblem (-204)
#if !defined (SoundActive)
extern Byte SoundActive;
#endif
enum {
soundactiveoff = 0,
soundactive5 = 5,
soundactiveinplay = 0x81,
soundactivenone = 0xFF,
};
typedef struct
{
LONGINT dbNumFrames PACKED;
LONGINT dbFlags PACKED;
LONGINT dbUserInfo[2] PACKED;
Byte dbSoundData[0] LPACKED;
} SndDoubleBuffer, *SndDoubleBufferPtr;
enum {
dbBufferReady = 1,
dbLastBuffer = 4
};
typedef struct
{
INTEGER dbhNumChannels PACKED;
INTEGER dbhSampleSize PACKED;
INTEGER dbhCompressionID PACKED;
INTEGER dbhPacketSize PACKED;
Fixed dbhSampleRate PACKED;
SndDoubleBufferPtr dbhBufferPtr[2] PACKED;
ProcPtr dbhDoubleBack PACKED;
} SndDoubleBufferHeader, *SndDoubleBufferHeaderPtr;
typedef struct _SCSTATUS {
Fixed scStartTime PACKED;
Fixed scEndTime PACKED;
Fixed scCurrentTime PACKED;
Boolean scChannelBusy LPACKED;
Boolean scChannelDisposed LPACKED;
Boolean scChannelPaused LPACKED;
Boolean scUnused LPACKED;
LONGINT scChannelAttributes PACKED;
LONGINT scCPULoad PACKED;
} SCStatus, *SCStatusPtr;
#if 1 /* stub definitions */
typedef void *SMStatusPtr;
typedef LONGINT NumVersion;
typedef void *AudioSelectionPtr;
typedef void *SPBPtr;
#endif
typedef unsigned long UnsignedFixed;
typedef Ptr CompressionInfoPtr;
extern trap void C_SndGetSysBeepState(INTEGER *statep);
extern trap OSErr C_SndSetSysBeepState(INTEGER state);
extern trap OSErr C_SndChannelStatus(SndChannelPtr chanp, INTEGER length,
SCStatusPtr statusp);
extern trap OSErr C_SndManagerStatus(INTEGER length, SMStatusPtr statusp);
extern trap NumVersion C_SndSoundManagerVersion( void );
extern trap NumVersion C_MACEVersion( void );
extern trap NumVersion C_SPBVersion( void );
extern trap OSErr C_SndStartFilePlay(SndChannelPtr chanp,
INTEGER refnum, INTEGER resnum, LONGINT buffersize, Ptr bufferp,
AudioSelectionPtr theselectionp, ProcPtr completionp, BOOLEAN async);
extern trap OSErr C_SndPauseFilePlay(SndChannelPtr chanp);
extern trap OSErr C_SndStopFilePlay(SndChannelPtr chanp, BOOLEAN async);
extern trap OSErr C_SndPlayDoubleBuffer(SndChannelPtr chanp,
SndDoubleBufferHeaderPtr paramp);
extern trap void C_Comp3to1(Ptr inp, Ptr outp, LONGINT cnt,
Ptr instatep, Ptr outstatep, LONGINT numchannels, LONGINT whichchannel);
extern trap void C_Comp6to1(Ptr inp, Ptr outp, LONGINT cnt,
Ptr instatep, Ptr outstatep, LONGINT numchannels, LONGINT whichchannel);
extern trap void C_Exp1to3(Ptr inp, Ptr outp, LONGINT cnt, Ptr instatep,
Ptr outstatep, LONGINT numchannels, LONGINT whichchannel);
extern trap void C_Exp1to6(Ptr inp, Ptr outp, LONGINT cnt, Ptr instatep,
Ptr outstatep, LONGINT numchannels, LONGINT whichchannel);
extern trap OSErr C_SndRecord(ProcPtr filterp, Point corner,
OSType quality, Handle *sndhandlep);
extern trap OSErr C_SndRecordToFile(ProcPtr filterp, Point corner,
OSType quality, INTEGER refnum);
extern trap OSErr C_SPBOpenDevice(Str255 name, INTEGER permission,
LONGINT *inrefnump);
extern trap OSErr C_SPBCloseDevice(LONGINT inrefnum);
extern trap OSErr C_SPBRecord(SPBPtr inparamp, BOOLEAN async);
extern trap OSErr C_SPBRecordToFile(INTEGER refnum, SPBPtr inparamp,
BOOLEAN async);
extern trap OSErr C_SPBPauseRecording(LONGINT refnum);
extern trap OSErr C_SPBResumeRecording(LONGINT refnum);
extern trap OSErr C_SPBStopRecording(LONGINT refnum);
extern trap OSErr C_SPBGetRecordingStatus(LONGINT refnum,
INTEGER *recordingstatus, INTEGER *meterlevel,
LONGINT *totalsampstorecord, LONGINT *numsampsrecorded,
LONGINT *totalmsecstorecord, LONGINT *numbermsecsrecorded);
extern trap OSErr C_SPBGetDeviceInfo(LONGINT refnum, OSType info,
Ptr infop);
extern trap OSErr C_SPBSetDeviceInfo(LONGINT refnum, OSType info,
Ptr infop);
extern trap OSErr C_SetupSndHeader(Handle sndhandle, INTEGER numchannels,
Fixed rate, INTEGER size, OSType compresion, INTEGER basefreq,
LONGINT numbytes, INTEGER *headerlenp);
extern trap OSErr C_SetupAIFFHeader(INTEGER refnum, INTEGER numchannels,
Fixed samplerate, INTEGER samplesize, OSType compression,
LONGINT numbytes, LONGINT numframes);
extern trap OSErr C_SPBSignInDevice(INTEGER refnum, Str255 name);
extern trap OSErr C_SPBSignOutDevice(INTEGER refnum);
extern trap OSErr C_SPBGetIndexedDevice(INTEGER count, Str255 name,
Handle *deviceiconhandlep);
extern trap OSErr C_SPBMillisecondsToBytes(LONGINT refnum,
LONGINT *millip);
extern trap OSErr C_SPBBytesToMilliseconds(LONGINT refnum,
LONGINT *bytecountp);
extern trap OSErr C_GetSysBeepVolume (LONGINT *levelp);
extern trap OSErr C_SetSysBeepVolume (LONGINT level);
extern trap OSErr C_GetDefaultOutputVolume (LONGINT *levelp);
extern trap OSErr C_SetDefaultOutputVolume (LONGINT level);
extern trap OSErr C_GetSoundHeaderOffset (Handle sndHandle, LONGINT *offset);
extern trap UnsignedFixed C_UnsignedFixedMulDiv (UnsignedFixed value,
UnsignedFixed multiplier,
UnsignedFixed divisor);
extern trap OSErr C_GetCompressionInfo (INTEGER compressionID, OSType format,
INTEGER numChannels,
INTEGER sampleSize,
CompressionInfoPtr cp);
extern trap OSErr C_SetSoundPreference (OSType theType, Str255 name,
Handle settings);
extern trap OSErr C_GetSoundPreference (OSType theType, Str255 name,
Handle settings);
extern trap OSErr C_SndGetInfo (SndChannelPtr chan, OSType selector,
void * infoPtr);
extern trap OSErr C_SndSetInfo (SndChannelPtr chan, OSType selector,
void *infoPtr);
/* DO NOT DELETE THIS LINE */
#if !defined (__STDC__)
extern void StartSound();
extern void StopSound();
extern BOOLEAN SoundDone();
extern void GetSoundVol();
extern void SetSoundVol();
extern pascal trap OSErr SndPlay();
extern pascal trap OSErr SndNewChannel();
extern pascal trap OSErr SndAddModifier();
extern pascal trap OSErr SndDoCommand();
extern pascal trap OSErr SndDoImmediate();
extern pascal trap OSErr SndControl();
extern pascal trap OSErr SndDisposeChannel();
#else /* __STDC__ */
extern void StartSound( Ptr srec, LONGINT nb, ProcPtr comp );
extern void StopSound( void );
extern BOOLEAN SoundDone( void );
extern void GetSoundVol( INTEGER *volp );
extern void SetSoundVol( INTEGER vol );
extern trap OSErr C_SndPlay( SndChannelPtr chanp, Handle sndh,
BOOLEAN async ); extern pascal trap OSErr P_SndPlay( SndChannelPtr chanp, Handle sndh,
BOOLEAN async );
extern trap OSErr C_SndNewChannel( HIDDEN_SndChannelPtr *chanpp,
INTEGER synth, LONGINT init, ProcPtr userroutinep ); extern pascal trap OSErr P_SndNewChannel( HIDDEN_SndChannelPtr *chanpp,
INTEGER synth, LONGINT init, ProcPtr userroutinep );
extern trap OSErr C_SndAddModifier( SndChannelPtr chanp,
ProcPtr mod, INTEGER id, LONGINT init ); extern pascal trap OSErr P_SndAddModifier( SndChannelPtr chanp,
ProcPtr mod, INTEGER id, LONGINT init );
extern trap OSErr C_SndDoCommand( SndChannelPtr chanp,
SndCommand *cmdp, BOOLEAN nowait ); extern pascal trap OSErr P_SndDoCommand( SndChannelPtr chanp,
SndCommand *cmdp, BOOLEAN nowait );
extern trap OSErr C_SndDoImmediate( SndChannelPtr chanp,
SndCommand *cmdp ); extern pascal trap OSErr P_SndDoImmediate( SndChannelPtr chanp,
SndCommand *cmdp );
extern trap OSErr C_SndControl( INTEGER id, SndCommand *cmdp ); extern pascal trap OSErr P_SndControl( INTEGER id, SndCommand *cmdp);
extern trap OSErr C_SndDisposeChannel( SndChannelPtr chanp,
BOOLEAN quitnow ); extern pascal trap OSErr P_SndDisposeChannel( SndChannelPtr chanp,
BOOLEAN quitnow );
extern void C_FinaleUnknown1( void );
extern OSErr C_FinaleUnknown2( ResType, LONGINT, Ptr, Ptr);
extern long C_DirectorUnknown3 (void);
extern INTEGER C_DirectorUnknown4 (ResType, INTEGER, Ptr, Ptr);
#endif /* __STDC__ */
#endif /* __SOUNDMGR__ */