aboutsummaryrefslogtreecommitdiff
path: root/SrcShared/Palm/Platform/Incs/Core/System/SoundMgr.h
diff options
context:
space:
mode:
Diffstat (limited to 'SrcShared/Palm/Platform/Incs/Core/System/SoundMgr.h')
-rw-r--r--SrcShared/Palm/Platform/Incs/Core/System/SoundMgr.h317
1 files changed, 317 insertions, 0 deletions
diff --git a/SrcShared/Palm/Platform/Incs/Core/System/SoundMgr.h b/SrcShared/Palm/Platform/Incs/Core/System/SoundMgr.h
new file mode 100644
index 0000000..25a7d15
--- /dev/null
+++ b/SrcShared/Palm/Platform/Incs/Core/System/SoundMgr.h
@@ -0,0 +1,317 @@
+/******************************************************************************
+ *
+ * Copyright (c) 1995-1999 Palm Computing, Inc. or its subsidiaries.
+ * All rights reserved.
+ *
+ * File: SoundMgr.h
+ *
+ * Description:
+ * Include file for Sound Manager
+ *
+ * History:
+ * 4/11/95 VMK - Created by Vitaly Kruglikov
+ *
+ *****************************************************************************/
+
+#ifndef __SOUNDMGR_H__
+#define __SOUNDMGR_H__
+
+
+// Include elementary types
+#include <PalmTypes.h>
+#include <CoreTraps.h> // Trap Numbers.
+
+#include <Preferences.h>
+
+
+/************************************************************
+ * Sound Manager constants
+ *
+ *************************************************************/
+
+// Sound Manager max and default volume levels
+#define sndMaxAmp 64
+//#define sndVolumeMask 0x0ff
+#define sndDefaultAmp sndMaxAmp
+
+#define sndMidiNameLength 32 // MIDI track name length *including* NULL terminator
+
+
+/************************************************************
+ * Sound Manager data structures
+ *
+ *************************************************************/
+
+//
+// Command numbers for SndCommandType's cmd field
+//
+typedef enum SndCmdIDType {
+
+ sndCmdFreqDurationAmp = 1, // play a sound, blocking for the entire duration (except for zero amplitude)
+ // param1 = frequency in Hz
+ // param2 = duration in milliseconds
+ // param3 = amplitude (0 - sndMaxAmp); if 0, will return immediately
+
+ // Commands added in PilotOS v3.0
+ // ***IMPORTANT***
+ // Please note that SndDoCmd() in PilotOS before v3.0 will Fatal Error on unknown
+ // commands (anything other than sndCmdFreqDurationAmp). For this reason,
+ // applications wishing to take advantage of these new commands while staying
+ // compatible with the earlier version of the OS, _must_ avoid using these commands
+ // when running on OS versions less thatn v3.0 (see sysFtrNumROMVersion in SystemMgr.h).
+ // Beginning with v3.0, SndDoCmd has been fixed to return sndErrBadParam when an
+ // unknown command is passed.
+ //
+ sndCmdNoteOn, // start a sound given its MIDI key index, max duration and velocity;
+ // the call will not wait for the sound to complete, returning imeediately;
+ // any other sound play request made before this one completes will interrupt it.
+ // param1 = MIDI key index (0-127)
+ // param2 = maximum duration in milliseconds
+ // param3 = velocity (0 - 127) (will be interpolated as amplitude)
+
+ sndCmdFrqOn, // start a sound given its frequency in Hz, max duration and amplitude;
+ // the call will not wait for the sound to complete, returning imeediately;
+ // any other sound play request made before this one completes will interrupt it.
+ // param1 = frequency in Hz
+ // param2 = maximum duration in milliseconds
+ // param3 = amplitude (0 - sndMaxAmp)
+
+ sndCmdQuiet // stop current sound
+ // param1 = 0
+ // param2 = 0
+ // param3 = 0
+
+ } SndCmdIDType;
+
+
+
+
+//
+// SndCommandType: used by SndDoCmd()
+//
+
+typedef struct SndCommandType {
+//SndCmdIDType cmd; // command id
+UInt8 cmd; // command id
+UInt8 reserved;
+Int32 param1; // first parameter
+UInt16 param2; // second parameter
+UInt16 param3; // third parameter
+} SndCommandType;
+
+typedef SndCommandType* SndCommandPtr;
+
+
+//
+// Beep numbers used by SndSysBeep()
+//
+
+typedef enum SndSysBeepType {
+ sndInfo = 1,
+ sndWarning,
+ sndError,
+ sndStartUp,
+ sndAlarm,
+ sndConfirmation,
+ sndClick
+ } SndSysBeepType;
+
+
+/************************************************************
+ * Standard MIDI File (SMF) support structures
+ *************************************************************/
+
+
+// Structure of records in the MIDI sound database:
+//
+// Each MIDI record consists of a record header followed immediately by the
+// Standard MIDI File (SMF) data stream. Only SMF format #0 is presently supported.
+// The first byte of the record header is the byte offset from the beginning of the record
+// to the SMF data stream. The name of the record follows the byte offset
+// field. sndMidiNameLength is the limit on name size (including NULL).
+#define sndMidiRecSignature 'PMrc'
+typedef struct SndMidiRecHdrType {
+ UInt32 signature; // set to sndMidiRecSignature
+ UInt8 bDataOffset; // offset from the beginning of the record
+ // to the Standard Midi File data stream
+ UInt8 reserved; // set to zero
+ } SndMidiRecHdrType;
+
+typedef struct SndMidiRecType {
+ SndMidiRecHdrType hdr; // offset from the beginning of the record
+ // to the Standard Midi File data stream
+ Char name[2]; // Track name: 1 or more chars including NULL terminator.
+ // If a track has no name, the NULL character must still
+ // be provided.
+ // Set to 2 to pad the structure out to a word boundary.
+ } SndMidiRecType;
+
+
+// Midi records found by SndCreateMidiList.
+typedef struct SndMidiListItemType
+ {
+ Char name[sndMidiNameLength]; // including NULL terminator
+ UInt32 uniqueRecID;
+ LocalID dbID;
+ UInt16 cardNo;
+ } SndMidiListItemType;
+
+
+// Commands for SndPlaySmf
+typedef enum SndSmfCmdEnum {
+ sndSmfCmdPlay = 1, // play the selection
+ sndSmfCmdDuration // get the duration in milliseconds of the entire track
+ } SndSmfCmdEnum;
+
+typedef void SndComplFuncType(void *chanP, UInt32 dwUserData);
+typedef SndComplFuncType *SndComplFuncPtr;
+
+
+// Return true to continue, false to abort
+typedef Boolean SndBlockingFuncType(void *chanP, UInt32 dwUserData, Int32 sysTicksAvailable);
+typedef SndBlockingFuncType *SndBlockingFuncPtr;
+
+typedef struct SndCallbackInfoType {
+ MemPtr funcP; // pointer to the callback function (NULL = no function)
+ UInt32 dwUserData; // value to be passed in the dwUserData parameter of the callback function
+ } SndCallbackInfoType;
+
+
+typedef struct SndSmfCallbacksType {
+ SndCallbackInfoType completion; // completion callback function (see SndComplFuncType)
+ SndCallbackInfoType blocking; // blocking hook callback function (see SndBlockingFuncType)
+ SndCallbackInfoType reserved; // RESERVED -- SET ALL FIELDS TO ZERO BEFORE PASSING
+ } SndSmfCallbacksType;
+
+
+#define sndSmfPlayAllMilliSec 0xFFFFFFFFUL
+
+typedef struct SndSmfOptionsType {
+ // dwStartMilliSec and dwEndMilliSec are used as inputs to the function for sndSmfCmdPlay and as
+ // outputs for sndSmfCmdDuration
+ UInt32 dwStartMilliSec; // 0 = "start from the beginning"
+ UInt32 dwEndMilliSec; // sndSmfPlayAllMilliSec = "play the entire track";
+ // the default is "play entire track" if this structure
+ // is not passed in
+
+ // The amplitude and interruptible fields are used only for sndSmfCmdPlay
+ UInt16 amplitude; // relative volume: 0 - sndMaxAmp, inclusively; the default is
+ // sndMaxAmp if this structure is not passed in; if 0, the play will
+ // be skipped and the call will return immediately
+
+ Boolean interruptible; // if true, sound play will be interrupted if
+ // user interacts with the controls (digitizer, buttons, etc.);
+ // if false, the paly will not be interrupted; the default behavior
+ // is "interruptible" if this structure is not passed in
+
+ UInt8 reserved1;
+ UInt32 reserved; // RESERVED! -- MUST SET TO ZERO BEFORE PASSING
+ } SndSmfOptionsType;
+
+
+typedef struct SndSmfChanRangeType {
+ UInt8 bFirstChan; // first MIDI channel (0-15 decimal)
+ UInt8 bLastChan; // last MIDI channel (0-15 decimal)
+ } SndSmfChanRangeType;
+
+
+
+
+/************************************************************
+ * Sound Manager result codes
+ * (sndErrorClass is defined in SystemMgr.h)
+ *************************************************************/
+#define sndErrBadParam (sndErrorClass | 1)
+#define sndErrBadChannel (sndErrorClass | 2)
+#define sndErrMemory (sndErrorClass | 3)
+#define sndErrOpen (sndErrorClass | 4)
+#define sndErrQFull (sndErrorClass | 5)
+#define sndErrQEmpty (sndErrorClass | 6) // internal
+#define sndErrFormat (sndErrorClass | 7) // unsupported data format
+#define sndErrBadStream (sndErrorClass | 8) // invalid data stream
+#define sndErrInterrupted (sndErrorClass | 9) // play was interrupted
+
+
+
+/********************************************************************
+ * Sound Manager Routines
+ * These are define as external calls only under emulation mode or
+ * under native mode from the module that actually installs the trap
+ * vectors
+ ********************************************************************/
+#ifdef REMOVE_FOR_EMULATOR
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+//-------------------------------------------------------------------
+// Initialization
+//-------------------------------------------------------------------
+
+// Initializes the Sound Manager. Should only be called by
+// Pilot initialization code.
+Err SndInit(void) SYS_TRAP(sysTrapSndInit);
+
+// Frees the Sound Manager.
+//void SndFree(void) SYS_TRAP(sysTrapSndFree);
+
+
+//-------------------------------------------------------------------
+// API
+//-------------------------------------------------------------------
+
+// Sets default sound volume levels
+//
+// Any parameter may be passed as NULL
+extern void SndSetDefaultVolume(UInt16 *alarmAmpP, UInt16 *sysAmpP, UInt16 *defAmpP)
+ SYS_TRAP(sysTrapSndSetDefaultVolume);
+
+// Gets default sound volume levels
+//
+// Any parameter may be passed as NULL
+extern void SndGetDefaultVolume(UInt16 *alarmAmpP, UInt16 *sysAmpP, UInt16 *masterAmpP)
+ SYS_TRAP(sysTrapSndGetDefaultVolume);
+
+// Executes a sound command on the given sound channel (pass
+// channelP = 0 to use the shared channel).
+extern Err SndDoCmd(void * /*SndChanPtr*/ channelP, SndCommandPtr cmdP, Boolean noWait)
+ SYS_TRAP(sysTrapSndDoCmd);
+
+// Plays one of several defined system beeps/sounds (see sndSysBeep...
+// constants).
+extern void SndPlaySystemSound(SndSysBeepType beepID)
+ SYS_TRAP(sysTrapSndPlaySystemSound);
+
+
+// NEW FOR v3.0
+// Performs an operation on a Standard MIDI File (SMF) Format #0
+extern Err SndPlaySmf(void *chanP, SndSmfCmdEnum cmd, UInt8 *smfP, SndSmfOptionsType *selP,
+ SndSmfChanRangeType *chanRangeP, SndSmfCallbacksType *callbacksP,
+ Boolean bNoWait)
+ SYS_TRAP(sysTrapSndPlaySmf);
+
+// NEW FOR v3.0
+// Creates a list of all midi records. Useful for displaying in lists.
+// For creator wildcard, pass creator=0;
+extern Boolean SndCreateMidiList(UInt32 creator, Boolean multipleDBs, UInt16 *wCountP, MemHandle *entHP)
+ SYS_TRAP(sysTrapSndCreateMidiList);
+
+// NEW FOR v3.2
+// Plays a MIDI sound which is read out of an open resource database
+extern Err SndPlaySmfResource(UInt32 resType, Int16 resID, SystemPreferencesChoice volumeSelector)
+ SYS_TRAP(sysTrapSndPlaySmfResource);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+
+
+
+/************************************************************
+ * Sound Manager Macros
+ *
+ *************************************************************/
+
+#endif // __SOUND_MGR_H__