📄 xact.pas
字号:
WAVEBANKENTRY_FLAGS_IGNORELOOP = $00000008; // Used internally when the loop region can't be used
{$EXTERNALSYM WAVEBANKENTRY_FLAGS_IGNORELOOP}
WAVEBANKENTRY_FLAGS_MASK = $00000008;
{$EXTERNALSYM WAVEBANKENTRY_FLAGS_MASK}
//
// Entry wave format identifiers
//
WAVEBANKMINIFORMAT_TAG_PCM = $0; // PCM data
{$EXTERNALSYM WAVEBANKMINIFORMAT_TAG_PCM}
WAVEBANKMINIFORMAT_TAG_XMA = $1; // XMA data
{$EXTERNALSYM WAVEBANKMINIFORMAT_TAG_XMA}
WAVEBANKMINIFORMAT_TAG_ADPCM = $2; // ADPCM data
{$EXTERNALSYM WAVEBANKMINIFORMAT_TAG_ADPCM}
WAVEBANKMINIFORMAT_BITDEPTH_8 = $0; // 8-bit data (PCM only)
{$EXTERNALSYM WAVEBANKMINIFORMAT_BITDEPTH_8}
WAVEBANKMINIFORMAT_BITDEPTH_16 = $1; // 16-bit data (PCM only)
{$EXTERNALSYM WAVEBANKMINIFORMAT_BITDEPTH_16}
//
// Arbitrary fixed sizes
//
WAVEBANKENTRY_XMASTREAMS_MAX = 3; // enough for 5.1 channel audio
{$EXTERNALSYM WAVEBANKENTRY_XMASTREAMS_MAX}
WAVEBANKENTRY_XMACHANNELS_MAX = 6; // enough for 5.1 channel audio (cf. XAUDIOCHANNEL_SOURCEMAX)
{$EXTERNALSYM WAVEBANKENTRY_XMACHANNELS_MAX}
//
// DVD data sizes
//
WAVEBANK_DVD_SECTOR_SIZE = 2048;
{$EXTERNALSYM WAVEBANK_DVD_SECTOR_SIZE}
WAVEBANK_DVD_BLOCK_SIZE = (WAVEBANK_DVD_SECTOR_SIZE * 16);
{$EXTERNALSYM WAVEBANK_DVD_BLOCK_SIZE}
//
// Bank alignment presets
//
WAVEBANK_ALIGNMENT_MIN = 4; // Minimum alignment
{$EXTERNALSYM WAVEBANK_ALIGNMENT_MIN}
WAVEBANK_ALIGNMENT_DVD = WAVEBANK_DVD_SECTOR_SIZE; // DVD-optimized alignment
{$EXTERNALSYM WAVEBANK_ALIGNMENT_DVD}
type
//
// Wave bank segment identifiers
//
//todo: What is size of this ENUM ???
PWavebankSegIDX = ^TWavebankSegIDX;
WAVEBANKSEGIDX =
(
WAVEBANK_SEGIDX_BANKDATA{= 0}, // Bank data
WAVEBANK_SEGIDX_ENTRYMETADATA, // Entry meta-data
WAVEBANK_SEGIDX_SEEKTABLES, // Storage for seek tables for the encoded waves.
WAVEBANK_SEGIDX_ENTRYNAMES, // Entry friendly names
WAVEBANK_SEGIDX_ENTRYWAVEDATA // Entry wave data
// WAVEBANK_SEGIDX_COUNT
);
{$EXTERNALSYM WAVEBANKSEGIDX}
TWavebankSegIDX = WAVEBANKSEGIDX;
const
WAVEBANK_SEGIDX_COUNT = Ord(High(TWavebankSegIDX))+1;
{$EXTERNALSYM WAVEBANK_SEGIDX_COUNT}
//
// Endianness
//
procedure SwapBytes(_dw_: PDWORD); overload;
{$EXTERNALSYM SwapBytes}
procedure SwapBytes(w: PWORD); overload;
{$EXTERNALSYM SwapBytes}
//
// Wave bank region in bytes.
//
type
PWavebankRegion = ^TWavebankRegion;
WAVEBANKREGION = record
dwOffset: DWORD; // Region offset, in bytes.
dwLength: DWORD; // Region length, in bytes.
end;
{$EXTERNALSYM WAVEBANKREGION}
TWavebankRegion = WAVEBANKREGION;
//procedure TWavebankRegion_SwapBytes(var wbr: TWavebankRegion);
//
// Wave bank region in samples.
//
PWavebankSampleRegion = ^TWavebankSampleRegion;
WAVEBANKSAMPLEREGION = record
dwStartSample: DWORD; // Start sample for the region.
dwTotalSamples: DWORD; // Region length in samples.
(*
void SwapBytes(void)
{
XACTWaveBank::SwapBytes(dwStartSample);
XACTWaveBank::SwapBytes(dwTotalSamples);
} *)
end;
{$EXTERNALSYM WAVEBANKSAMPLEREGION}
TWavebankSampleRegion = WAVEBANKSAMPLEREGION;
//
// Wave bank file header
//
type
PWavebankHeader = ^TWavebankHeader;
WAVEBANKHEADER = record
dwSignature: DWORD; // File signature
dwVersion: DWORD; // Version of the tool that created the file
Segments: array[0..WAVEBANK_SEGIDX_COUNT-1] of TWavebankRegion; // Segment lookup table
end;
{$EXTERNALSYM WAVEBANKHEADER}
TWavebankHeader = WAVEBANKHEADER;
//procedure TWavebankHeader_SwapBytes(var wbh: TWavebankHeader);
//
// Entry compressed data format
//
type
PWavebankMiniWaveFormat = ^TWavebankMiniWaveFormat;
WAVEBANKMINIWAVEFORMAT = record
//struct
{
DWORD wFormatTag : 2; // Format tag
DWORD nChannels : 3; // Channel count (1 - 6)
DWORD nSamplesPerSec : 18; // Sampling rate
DWORD wBlockAlign : 8; // Block alignment
DWORD wBitsPerSample : 1; // Bits per sample (8 vs. 16, PCM only)
}
dwValue: DWORD;
end;
{$EXTERNALSYM WAVEBANKMINIWAVEFORMAT}
TWavebankMiniWaveFormat = WAVEBANKMINIWAVEFORMAT;
//procedure TWavebankMiniWaveFormat_SwapBytes(var wbmwf: TWavebankMiniWaveFormat);
//function TWavebankMiniWaveFormat_BitsPerSample(): Word;
//function TWavebankMiniWaveFormat_BlockAlign(): DWPRD;
//
// Entry meta-data
//
PWavebankEntry = ^TWavebankEntry;
WAVEBANKENTRY = record
//union
//struct
{
// Entry flags
DWORD dwFlags : 4;
// Duration of the wave, in units of one sample.
// For instance, a ten second long wave sampled
// at 48KHz would have a duration of 480,000.
// This value is not affected by the number of
// channels, the number of bits per sample, or the
// compression format of the wave.
DWORD Duration : 28;
}
dwFlagsAndDuration: DWORD;
//};
Format: TWavebankMiniWaveFormat; // Entry format
PlayRegion: TWavebankRegion; // Region within the wave data segment that contains this entry
LoopRegion: TWavebankSampleRegion;// Region within the wave data (in samples) that should loop.
end;
{$EXTERNALSYM WAVEBANKENTRY}
TWavebankEntry = WAVEBANKENTRY;
//
// Compact entry meta-data
//
PWavebankEntryCompact = ^TWavebankEntryCompact;
WAVEBANKENTRYCOMPACT = record
{DWORD dwOffset : 21; // Data offset, in sectors
DWORD dwLengthDeviation : 11; // Data length deviation, in bytes}
dwValue: DWORD;
end;
{$EXTERNALSYM WAVEBANKENTRYCOMPACT}
TWavebankEntryCompact = WAVEBANKENTRYCOMPACT;
//
// Bank data segment
//
PWavebankData = ^TWavebankData;
WAVEBANKDATA = record
dwFlags: DWORD; // Bank flags
dwEntryCount: DWORD; // Number of entries in the bank
szBankName: array [0..WAVEBANK_BANKNAME_LENGTH-1] of Char; // Bank friendly name
dwEntryMetaDataElementSize: DWORD; // Size of each entry meta-data element, in bytes
dwEntryNameElementSize: DWORD; // Size of each entry name element, in bytes
dwAlignment: DWORD; // Entry alignment, in bytes
CompactFormat: TWavebankMiniWaveFormat; // Format data for compact bank
BuildTime: FILETIME; // Build timestamp
end;
{$EXTERNALSYM WAVEBANKDATA}
TWavebankData = WAVEBANKDATA;
{$MINENUMSIZE 4}
{*-========================================================================-_
| - XACT3D - |
| Copyright (c) Microsoft Corporation. All rights reserved. |
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
|VERSION: 0.1 MODEL: Unmanaged User-mode |
|CONTRACT: N / A EXCEPT: No Exceptions |
|PARENT: N / A MINREQ: Win2000, Xbox360 |
|PROJECT: XACT3D DIALECT: MS Visual C++ 7.0 |
|>------------------------------------------------------------------------<|
| DUTY: XACT 3D support |
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
NOTES:
1. See X3DAudio.h for information regarding X3DAudio types. *}
//--------------<D-E-F-I-N-I-T-I-O-N-S>-------------------------------------//
const
// Supported speaker positions, represented as azimuth angles.
//
// Here's a picture of the azimuth angles for the 8 cardinal points,
// seen from above. The emitter's base position is at the origin 0.
//
// FRONT
// | 0 <-- azimuth
// |
// 7pi/4 \ | / pi/4
// \ | /
// LEFT \|/ RIGHT
// 3pi/2-------0-------pi/2
// /|\
// / | \
// 5pi/4 / | \ 3pi/4
// |
// | pi
// BACK
//
LEFT_AZIMUTH = (3*X3DAUDIO_PI/2);
{$EXTERNALSYM LEFT_AZIMUTH}
RIGHT_AZIMUTH = (X3DAUDIO_PI/2);
{$EXTERNALSYM RIGHT_AZIMUTH}
FRONT_LEFT_AZIMUTH = (7*X3DAUDIO_PI/4);
{$EXTERNALSYM FRONT_LEFT_AZIMUTH}
FRONT_RIGHT_AZIMUTH = (X3DAUDIO_PI/4);
{$EXTERNALSYM FRONT_RIGHT_AZIMUTH}
FRONT_CENTER_AZIMUTH = 0.0;
{$EXTERNALSYM FRONT_CENTER_AZIMUTH}
LOW_FREQUENCY_AZIMUTH = X3DAUDIO_2PI;
{$EXTERNALSYM LOW_FREQUENCY_AZIMUTH}
BACK_LEFT_AZIMUTH = (5*X3DAUDIO_PI/4);
{$EXTERNALSYM BACK_LEFT_AZIMUTH}
BACK_RIGHT_AZIMUTH = (3*X3DAUDIO_PI/4);
{$EXTERNALSYM BACK_RIGHT_AZIMUTH}
BACK_CENTER_AZIMUTH = X3DAUDIO_PI;
{$EXTERNALSYM BACK_CENTER_AZIMUTH}
FRONT_LEFT_OF_CENTER_AZIMUTH = (15*X3DAUDIO_PI/8);
{$EXTERNALSYM FRONT_LEFT_OF_CENTER_AZIMUTH}
FRONT_RIGHT_OF_CENTER_AZIMUTH = (X3DAUDIO_PI/8);
{$EXTERNALSYM FRONT_RIGHT_OF_CENTER_AZIMUTH}
//--------------<D-A-T-A---T-Y-P-E-S>---------------------------------------//
// Supported emitter channel layouts:
aStereoLayout: array[0..1] of Single =
(
LEFT_AZIMUTH,
RIGHT_AZIMUTH
);
{$EXTERNALSYM aStereoLayout}
a2Point1Layout: array[0..2] of Single =
(
LEFT_AZIMUTH,
RIGHT_AZIMUTH,
LOW_FREQUENCY_AZIMUTH
);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -