📄 xact.h
字号:
/*++
Copyright (C) Microsoft Corporation. All rights reserved.
Module Name:
xact.h
Abstract:
XACT public interfaces, functions and data types
--*/
#pragma once
#ifndef _XACT_H_
#define _XACT_H_
//------------------------------------------------------------------------------
// XACT class and interface IDs (Version 2.4)
//------------------------------------------------------------------------------
#ifndef _XBOX // XACT COM support only exists on Windows
#include <comdecl.h> // For DEFINE_CLSID, DEFINE_IID and DECLARE_INTERFACE
DEFINE_CLSID(XACTEngine, bc3e0fc6, 2e0d, 4c45, bc, 61, d9, c3, 28, 31, 9b, d8);
DEFINE_CLSID(XACTAuditionEngine, 30bad9f7, 0018, 49e9, bf, 94, 4a, e8, 9c, c5, 4d, 64);
DEFINE_CLSID(XACTDebugEngine, 74ee14d5, ca1d, 44ac, 8b, d3, fa, 94, f7, 34, 6e, 24);
DEFINE_IID(IXACTEngine, 43a0d4a8, 9387, 4e06, 94, 33, 65, 41, 8f, e7, 0a, 67);
#endif
// Ignore the rest of this header if only the GUID definitions were requested:
#ifndef GUID_DEFS_ONLY
//------------------------------------------------------------------------------
// Includes
//------------------------------------------------------------------------------
#ifndef _XBOX
#include <windows.h>
#include <objbase.h>
#include <float.h>
#else
#include <xaudio.h>
#endif
//------------------------------------------------------------------------------
// Forward Declarations
//------------------------------------------------------------------------------
typedef struct IXACTSoundBank IXACTSoundBank;
typedef struct IXACTWaveBank IXACTWaveBank;
typedef struct IXACTCue IXACTCue;
typedef struct IXACTEngine IXACTEngine;
typedef struct XACT_NOTIFICATION XACT_NOTIFICATION;
//------------------------------------------------------------------------------
// Typedefs
//------------------------------------------------------------------------------
typedef WORD XACTINDEX; // All normal indices
typedef BYTE XACTNOTIFICATIONTYPE; // Notification type
typedef FLOAT XACTVARIABLEVALUE; // Variable value
typedef WORD XACTVARIABLEINDEX; // Variable index
typedef WORD XACTCATEGORY; // Sound category
typedef BYTE XACTCHANNEL; // Audio channel
typedef FLOAT XACTVOLUME; // Volume value
typedef LONG XACTTIME; // Time (in ms)
//------------------------------------------------------------------------------
// Constants
//------------------------------------------------------------------------------
static const XACTINDEX XACTINDEX_MIN = 0x0;
static const XACTINDEX XACTINDEX_MAX = 0xfffe;
static const XACTINDEX XACTINDEX_INVALID = 0xffff;
static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_MIN = 0x00;
static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_MAX = 0xff;
static const XACTVARIABLEVALUE XACTVARIABLEVALUE_MIN = -FLT_MAX;
static const XACTVARIABLEVALUE XACTVARIABLEVALUE_MAX = FLT_MAX;
static const XACTVARIABLEINDEX XACTVARIABLEINDEX_MIN = 0x0000;
static const XACTVARIABLEINDEX XACTVARIABLEINDEX_MAX = 0xfffe;
static const XACTVARIABLEINDEX XACTVARIABLEINDEX_INVALID = 0xffff;
static const XACTCATEGORY XACTCATEGORY_MIN = 0x0;
static const XACTCATEGORY XACTCATEGORY_MAX = 0xfffe;
static const XACTCATEGORY XACTCATEGORY_INVALID = 0xffff;
static const XACTCHANNEL XACTCHANNEL_MIN = 0;
static const XACTCHANNEL XACTCHANNEL_MAX = 0xFF;
static const XACTVOLUME XACTVOLUME_MIN = 0.0f;
static const XACTVOLUME XACTVOLUME_MAX = FLT_MAX;
static const XACTVARIABLEVALUE XACTPARAMETERVALUE_MIN = -FLT_MAX;
static const XACTVARIABLEVALUE XACTPARAMETERVALUE_MAX = FLT_MAX;
#ifdef _XBOX
static const XAUDIOVOICEINDEX XACTMAXOUTPUTVOICECOUNT = 3;
#endif // _XBOX
#define XACT_CONTENT_VERSION 41
//------------------------------------------------------------------------------
// XACT Parameters
//------------------------------------------------------------------------------
static const DWORD XACT_FLAG_GLOBAL_SETTINGS_MANAGEDATA = 0x00000001;
typedef BOOL (__stdcall * XACT_READFILE_CALLBACK)(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped);
typedef BOOL (__stdcall * XACT_GETOVERLAPPEDRESULT_CALLBACK)(HANDLE hFile, LPOVERLAPPED lpOverlapped, LPDWORD lpNumberOfBytesTransferred, BOOL bWait);
typedef struct XACT_FILEIO_CALLBACKS
{
XACT_READFILE_CALLBACK readFileCallback;
XACT_GETOVERLAPPEDRESULT_CALLBACK getOverlappedResultCallback;
} XACT_FILEIO_CALLBACKS, *PXACT_FILEIO_CALLBACKS;
typedef const XACT_FILEIO_CALLBACKS *PCXACT_FILEIO_CALLBACKS;
// The callback that receives the notifications.
typedef void (__stdcall * XACT_NOTIFICATION_CALLBACK)(const XACT_NOTIFICATION* pNotification);
#ifndef _XBOX
#define XACT_RENDERER_ID_LENGTH 0xff // Maximum number of characters allowed in the renderer ID
#define XACT_RENDERER_NAME_LENGTH 0xff // Maximum number of characters allowed in the renderer display name.
// Renderer details
typedef struct XACT_RENDERER_DETAILS
{
WCHAR rendererID[XACT_RENDERER_ID_LENGTH]; // The string ID for the rendering device.
WCHAR displayName[XACT_RENDERER_NAME_LENGTH]; // A friendly name suitable for display to a human.
BOOL defaultDevice; // Set to TRUE if this device is the primary audio device on the system.
} XACT_RENDERER_DETAILS, *LPXACT_RENDERER_DETAILS;
#endif
#define XACT_ENGINE_LOOKAHEAD_DEFAULT 250 // Default look-ahead time of 250ms can be used during XACT engine initialization.
// Runtime (engine) parameters
typedef struct XACT_RUNTIME_PARAMETERS
{
DWORD lookAheadTime; // Time in ms
void* pGlobalSettingsBuffer; // Buffer containing the global settings file
DWORD globalSettingsBufferSize; // Size of global settings buffer
DWORD globalSettingsFlags; // Flags for global settings
DWORD globalSettingsAllocAttributes; // Global settings buffer allocation attributes (see XMemAlloc)
XACT_FILEIO_CALLBACKS fileIOCallbacks; // File I/O callbacks
XACT_NOTIFICATION_CALLBACK fnNotificationCallback; // Callback that receives notifications.
#ifndef _XBOX
PWSTR pRendererID; // Ptr to the ID for the audio renderer the engine should connect to.
#endif
} XACT_RUNTIME_PARAMETERS, *LPXACT_RUNTIME_PARAMETERS;
typedef const XACT_RUNTIME_PARAMETERS *LPCXACT_RUNTIME_PARAMETERS;
//------------------------------------------------------------------------------
// Streaming Parameters
//------------------------------------------------------------------------------
typedef struct XACT_WAVEBANK_STREAMING_PARAMETERS
{
HANDLE file; // File handle associated with wavebank data
DWORD offset; // Offset within file of wavebank header (must be sector aligned)
DWORD flags; // Flags (none currently)
WORD packetSize; // Stream packet size (in sectors) to use for each stream (min = 2)
// number of sectors (DVD = 2048 bytes: 2 = 4096, 3 = 6144, 4 = 8192 etc.)
// optimal DVD size is a multiple of 16 (DVD block = 16 DVD sectors)
} XACT_WAVEBANK_STREAMING_PARAMETERS, *LPXACT_WAVEBANK_STREAMING_PARAMETERS;
typedef const XACT_WAVEBANK_STREAMING_PARAMETERS *LPCXACT_WAVEBANK_STREAMING_PARAMETERS;
//------------------------------------------------------------------------------
// Cue Properties (Xbox Only)
//------------------------------------------------------------------------------
#ifdef _XBOX
typedef struct XACTCUEPROPERTIES
{
XACTCATEGORY ActiveSoundCategory; // Category of the active sound
BYTE ActiveSoundTrackCount; // The number of tracks in the active sound
BYTE ActiveSoundPriority; // The priority of the active sound
XACTINDEX FirstTrackWaveIndex; // Index of the currently selected wave variation in the first track
DWORD FirstTrackWaveDuration; // Estimated duration (ms) of the selected wave in the first track (does not account for pitch changes)
XACTCHANNEL MaxTrackChannelCount; // The highest number of channels in any track
BYTE MaxTrackLoopCount; // The highest loop count of any track (255 is infinite)
} XACTCUEPROPERTIES, *LPXACTCUEPROPERTIES;
#endif // _XBOX
//------------------------------------------------------------------------------
// Channel Mapping / Speaker Panning
//------------------------------------------------------------------------------
typedef struct XACTCHANNELMAPENTRY
{
XACTCHANNEL InputChannel;
XACTCHANNEL OutputChannel;
XACTVOLUME Volume;
} XACTCHANNELMAPENTRY, *LPXACTCHANNELMAPENTRY;
typedef const XACTCHANNELMAPENTRY *LPCXACTCHANNELMAPENTRY;
typedef struct XACTCHANNELMAP
{
XACTCHANNEL EntryCount;
XACTCHANNELMAPENTRY* paEntries;
} XACTCHANNELMAP, *LPXACTCHANNELMAP;
typedef const XACTCHANNELMAP *LPCXACTCHANNELMAP;
typedef struct XACTCHANNELVOLUMEENTRY
{
XACTCHANNEL EntryIndex;
XACTVOLUME Volume;
} XACTCHANNELVOLUMEENTRY, *LPXACTCHANNELVOLUMEENTRY;
typedef const XACTCHANNELVOLUMEENTRY *LPCXACTCHANNELVOLUMEENTRY;
typedef struct XACTCHANNELVOLUME
{
XACTCHANNEL EntryCount;
XACTCHANNELVOLUMEENTRY* paEntries;
} XACTCHANNELVOLUME, *LPXACTCHANNELVOLUME;
typedef const XACTCHANNELVOLUME *LPCXACTCHANNELVOLUME;
//------------------------------------------------------------------------------
// Notifications
//------------------------------------------------------------------------------
static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_CUEPREPARED = 1; // None, SoundBank, SoundBank & cue index, cue instance
static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_CUEPLAY = 2; // None, SoundBank, SoundBank & cue index, cue instance
static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_CUESTOP = 3; // None, SoundBank, SoundBank & cue index, cue instance
static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_CUEDESTROYED = 4; // None, SoundBank, SoundBank & cue index, cue instance
static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_MARKER = 5; // None, SoundBank, SoundBank & cue index, cue instance
static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_SOUNDBANKDESTROYED = 6; // None, SoundBank
static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_WAVEBANKDESTROYED = 7; // None, WaveBank
static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_LOCALVARIABLECHANGED = 8; // None, SoundBank, SoundBank & cue index, cue instance
static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_GLOBALVARIABLECHANGED = 9; // None
static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_GUICONNECTED = 10; // None
static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_GUIDISCONNECTED = 11; // None
static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_WAVEPLAY = 12; // None, SoundBank, SoundBank & cue index, cue instance, WaveBank
static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_WAVESTOP = 13; // None, SoundBank, SoundBank & cue index, cue instance, WaveBank
static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_WAVEBANKPREPARED = 14; // None, WaveBank
static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_WAVEBANKSTREAMING_INVALIDCONTENT = 15; // None, WaveBank
static const BYTE XACT_FLAG_NOTIFICATION_PERSIST = 0x01;
// Pack the notification structures
#pragma pack(push, 1)
// Notification description used for registering, un-registering and flushing notifications
typedef struct XACT_NOTIFICATION_DESCRIPTION
{
XACTNOTIFICATIONTYPE type; // Notification type
BYTE flags; // Flags
IXACTSoundBank* pSoundBank; // SoundBank instance
IXACTWaveBank* pWaveBank; // WaveBank instance
IXACTCue* pCue; // Cue instance
XACTINDEX cueIndex; // Cue index
PVOID pvContext; // User context (optional)
} XACT_NOTIFICATION_DESCRIPTION, *LPXACT_NOTIFICATION_DESCRIPTION;
typedef const XACT_NOTIFICATION_DESCRIPTION *LPCXACT_NOTIFICATION_DESCRIPTION;
// Notification structure for all XACTNOTIFICATIONTYPE_CUE* notifications
typedef struct XACT_NOTIFICATION_CUE
{
XACTINDEX cueIndex; // Cue index
IXACTSoundBank* pSoundBank; // SoundBank instance
IXACTCue* pCue; // Cue instance
} XACT_NOTIFICATION_CUE, *LPXACT_NOTIFICATION_CUE;
typedef const XACT_NOTIFICATION_CUE *LPCXACT_NOTIFICATION_CUE;
// Notification structure for all XACTNOTIFICATIONTYPE_MARKER* notifications
typedef struct XACT_NOTIFICATION_MARKER
{
XACTINDEX cueIndex; // Cue index
IXACTSoundBank* pSoundBank; // SoundBank instance
IXACTCue* pCue; // Cue instance
DWORD marker; // Marker value
} XACT_NOTIFICATION_MARKER, *LPXACT_NOTIFICATION_MARKER;
typedef const XACT_NOTIFICATION_MARKER *LPCXACT_NOTIFICATION_MARKER;
// Notification structure for all XACTNOTIFICATIONTYPE_SOUNDBANK* notifications
typedef struct XACT_NOTIFICATION_SOUNDBANK
{
IXACTSoundBank* pSoundBank; // SoundBank instance
} XACT_NOTIFICATION_SOUNDBANK, *LPXACT_NOTIFICATION_SOUNDBANK;
typedef const XACT_NOTIFICATION_SOUNDBANK *LPCXACT_NOTIFICATION_SOUNDBANK;
// Notification structure for all XACTNOTIFICATIONTYPE_WAVEBANK* notifications
typedef struct XACT_NOTIFICATION_WAVEBANK
{
IXACTWaveBank* pWaveBank; // WaveBank instance
} XACT_NOTIFICATION_WAVEBANK, *LPXACT_NOTIFICATION_WAVEBANK;
typedef const XACT_NOTIFICATION_WAVEBANK *LPCXACT_NOTIFICATION_WAVEBANK;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -