📄 xaudioplayer.pas
字号:
XA_CONTROL_PRIORITY_HIGHEST = 4;
XA_DECODER_CODEC_QUALITY_HIGH = 0;
XA_DECODER_CODEC_QUALITY_MEDIUM = 1;
XA_DECODER_CODEC_QUALITY_LOW = 2;
{ Property Types }
XA_PROPERTY_TYPE_STRING = 0;
XA_PROPERTY_TYPE_INTEGER = 1;
{ API Ids }
XA_VERSION_ID_SYNC_API = 1;
XA_VERSION_ID_ASYNC_API = 2;
XA_VERSION_ID_IMPLEMENTATION = 3;
{ Misc Constants }
XA_OUTPUT_VOLUME_IGNORE_FIELD = -1;
XA_DECODER_MAX_NAME_LENGTH = 255;
XA_DECODER_MAX_DESCRIPTION_LENGTH = 255;
{ API Version }
XA_ASYNC_API_MAJOR = 3;
XA_ASYNC_API_MINOR = 8;
{ Types }
type
XA_EnvironmentInfo = record
name: PChar;
case Integer of
0: (integer_value: LongInt);
1: (string_value: PChar);
end;
XA_TimecodeInfo = record
h: Byte;
m: Byte;
s: Byte;
f: Byte;
end;
XA_NackInfo = record
command: Byte;
code: SmallInt;
end;
XA_VolumeInfo = record
master_level: ShortInt;
pcm_level: ShortInt;
balance: ShortInt;
end;
XA_PositionInfo = record
offset: Cardinal;
range: Cardinal;
end;
XA_ModuleInfo = record
id: Byte;
nb_devices: Byte;
name: PChar;
description: PChar;
end;
XA_FilterInfo = record
name: PChar;
id: Word;
end;
XA_DeviceInfo = record
module_id: Byte;
index: Byte;
flags: Byte;
name: PChar;
description: PChar;
end;
XA_StreamParameters = record
frequency: Cardinal;
bitrate: SmallInt;
nb_channels: Byte;
end;
XA_ModuleMessage = record
message_type: Word;
size: Cardinal;
data: Pointer;
end;
XA_ProgressInfo = record
source: Byte;
code: Byte;
value: SmallInt;
msg: PChar;
end;
XA_DebugInfo = record
source: Byte;
level: Byte;
msg: PChar;
end;
XA_ErrorInfo = record
source: Byte;
code: SmallInt;
msg: PChar;
end;
XA_EqualizerInfo = record
left: array[0..31] of ShortInt;
right: array[0..31] of ShortInt;
end;
PXA_EqualizerInfo = ^XA_EqualizerInfo;
XA_PrivateData = record
source: Byte;
data_type: SmallInt;
data: Pointer;
size: Cardinal;
end;
XA_AbsoluteTime = record
seconds: Cardinal;
microseconds: Cardinal;
end;
XA_TagEvent = record
when: XA_AbsoluteTime;
tag: Cardinal;
end;
XA_AudioEvent = record
when: XA_AbsoluteTime;
sampling_frequency: Cardinal;
nb_channels: Word;
nb_samples: Word;
samples: Pointer;
end;
XA_Property = record
name: PChar;
value_type: Integer;
case Integer of
0: (integer_value: LongInt);
1: (string_value: PChar);
end;
PXA_Property = ^XA_Property;
XA_PropertyList = record
nb_properties: Cardinal;
properties: PXA_Property;
end;
XA_Message = record
code: Integer;
case Integer of
0: (buffer: Pchar);
1: (name: PChar);
2: (mime_type: PChar);
3: (module_id: SmallInt);
4: (state: Byte);
5: (mode: Cardinal);
6: (channels: Byte);
7: (quality: Byte);
8: (duration: Cardinal);
9: (range: Cardinal);
10: (granularity: Cardinal);
11: (caps: Cardinal);
12: (ports: Byte);
13: (ack: Byte);
14: (tag: Cardinal);
15: (debug_level: Byte);
16: (notification_mask: Cardinal);
17: (rate: Byte);
18: (nack: XA_NackInfo);
19: (volume: XA_VolumeInfo);
20: (position: XA_PositionInfo);
21: (equalizer: ^XA_EqualizerInfo);
22: (module_info: XA_ModuleInfo);
23: (filter_info: XA_FilterInfo);
24: (device_info: XA_DeviceInfo);
25: (stream_parameters: XA_StreamParameters);
26: (environment_info: XA_EnvironmentInfo);
27: (timecode: XA_TimecodeInfo);
28: (module_message: XA_ModuleMessage);
29: (tag_event: XA_TagEvent);
30: (audio_event: XA_AudioEvent);
31: (properties: XA_PropertyList);
32: (when: XA_AbsoluteTime);
33: (private_data: XA_PrivateData);
34: (progress: XA_ProgressInfo);
35: (debug: XA_DebugInfo);
36: (error: XA_ErrorInfo);
end;
{ Misc }
TXaudioPlayer = class;
EXaudioException = class(Exception);
{ Notification Functions }
TNotifyMessageEvent = procedure(Sender: TXaudioPlayer; var Msg: XA_Message) of object;
TNotifyAckEvent = procedure(Sender: TXaudioPlayer; Command: Byte) of object;
TNotifyNackEvent = procedure(Sender: TXaudioPlayer; Command: Byte; Code: SmallInt) of object;
TNotifyPongEvent = procedure(Sender: TXaudioPlayer; Tag: Cardinal) of object;
TNotifyPlayerStateEvent = procedure(Sender: TXaudioPlayer; State: Integer) of object;
TNotifyPlayerModeEvent = procedure(Sender: TXaudioPlayer; Mode: Integer) of object;
TNotifyEnvironmentIntegerEvent = procedure(Sender: TXaudioPlayer; const Name: String; Value: Integer) of object;
TNotifyEnvironmentStringEvent = procedure(Sender: TXaudioPlayer; const Name: String; const Value: String) of object;
TNotifyInputStateEvent = procedure(Sender: TXaudioPlayer; State: Integer) of object;
TNotifyInputNameEvent = procedure(Sender: TXaudioPlayer; const Name: String) of object;
TNotifyInputCapsEvent = procedure(Sender: TXaudioPlayer; Caps: Cardinal) of object;
TNotifyInputPositionEvent = procedure(Sender: TXaudioPlayer; Offset: Cardinal; Range: Cardinal) of object;
TNotifyInputPositionRangeEvent = procedure(Sender: TXaudioPlayer; Range: Integer) of object;
TNotifyInputTimecodeEvent = procedure(Sender: TXaudioPlayer; Hours: Byte; Minutes: Byte; Seconds: Byte; Fractions: Byte) of object;
TNotifyInputTimecodeGranularityEvent = procedure(Sender: TXaudioPlayer; Granularity: Cardinal) of object;
TNotifyInputModuleEvent = procedure(Sender: TXaudioPlayer; ID: SmallInt) of object;
TNotifyInputModuleInfoEvent = procedure(Sender: TXaudioPlayer; ID: Byte; NbDevices: Byte; const Name: String; const Description: String) of object;
TNotifyInputDeviceInfoEvent = procedure(Sender: TXaudioPlayer; ModuleID: Byte; Index: Byte; Flags: Byte; const Name: String; const Description: String) of object;
TNotifyInputFilterInfoEvent = procedure(Sender: TXaudioPlayer; ID: Byte; const Name: String) of object;
TNotifyOutputStateEvent = procedure(Sender: TXaudioPlayer; State: Integer) of object;
TNotifyOutputNameEvent = procedure(Sender: TXaudioPlayer; const Name: String) of object;
TNotifyOutputCapsEvent = procedure(Sender: TXaudioPlayer; Caps: Cardinal) of object;
TNotifyOutputVolumeEvent = procedure(Sender: TXaudioPlayer; MasterLevel: Byte; PcmLevel: Byte; Balance: Byte) of object;
TNotifyOutputBalanceEvent = procedure(Sender: TXaudioPlayer; Balance: Byte) of object;
TNotifyOutputPcmLevelEvent = procedure(Sender: TXaudioPlayer; PcmLevel: Byte) of object;
TNotifyOutputMasterLevelEvent = procedure(Sender: TXaudioPlayer; MasterLevel: Byte) of object;
TNotifyOutputChannelsEvent = procedure(Sender: TXaudioPlayer; Channels: Byte) of object;
TNotifyOutputPortsEvent = procedure(Sender: TXaudioPlayer; Ports: Cardinal) of object;
TNotifyOutputModuleEvent = procedure(Sender: TXaudioPlayer; ID: SmallInt) of object;
TNotifyOutputModuleInfoEvent = procedure(Sender: TXaudioPlayer; ID: Byte; NbDevices: Byte; const Name: String; const Description: String) of object;
TNotifyOutputDeviceInfoEvent = procedure(Sender: TXaudioPlayer; ModuleID: Byte; Index: Byte; Flags: Byte; const Name: String; const Description: String) of object;
TNotifyOutputFilterInfoEvent = procedure(Sender: TXaudioPlayer; ID: Byte; const Name: String) of object;
TNotifyStreamMimeTypeEvent = procedure(Sender: TXaudioPlayer; MimeType: String) of object;
TNotifyStreamDurationEvent = procedure(Sender: TXaudioPlayer; Duration: Cardinal) of object;
TNotifyStreamParametersEvent = procedure(Sender: TXaudioPlayer; Frequency: Cardinal; Bitrate: SmallInt; NbChannels: Byte) of object;
TNotifyStreamPropertiesEvent = procedure(Sender: TXaudioPlayer; NbProperties: Cardinal; Properties: PXA_Property) of object;
TNotifyCodecModuleEvent = procedure(Sender: TXaudioPlayer; ID: SmallInt) of object;
TNotifyCodecModuleInfoEvent = procedure(Sender: TXaudioPlayer; ID: Byte; NbDevices: Byte; const Name: String; const Description: String) of object;
TNotifyCodecDeviceInfoEvent = procedure(Sender: TXaudioPlayer; ModuleID: Byte; Index: Byte; Flags: Byte; const Name: String; const Description: String) of object;
TNotifyCodecQualityEvent = procedure(Sender: TXaudioPlayer; Quality: Byte) of object;
TNotifyCodecEqualizerEvent = procedure(Sender: TXaudioPlayer; var Equalizer: XA_EqualizerInfo) of object;
TNotifyNotificationMaskEvent = procedure(Sender: TXaudioPlayer; Mask: Cardinal) of object;
TNotifyDebugLevelEvent = procedure(Sender: TXaudioPlayer; Level: Byte) of object;
TNotifyProgressEvent = procedure(Sender: TXaudioPlayer; Source: Byte; Code: Byte; Value: SmallInt; const Msg: String) of object;
TNotifyDebugEvent = procedure(Sender: TXaudioPlayer; Source: Byte; Level: Byte; const Msg: String) of object;
TNotifyErrorEvent = procedure(Sender: TXaudioPlayer; Source: Byte; Code: SmallInt; const Msg: String) of object;
{ DLL entry points }
TPlayerNew = function(var Player: Pointer; var Args: HWND): Integer; stdcall;
TPlayerDelete = function(Player: Pointer): Integer; stdcall;
TPlayerSetPriority = function(Player: Pointer; Priority: Cardinal): Integer; stdcall;
TPlayerGetPriority = function(Player: Pointer): Integer; stdcall;
TXaudioErrorString = function(Code: Integer): PChar; stdcall;
TXaudioGetVersion = function(VersionIndex: Integer): Cardinal; stdcall;
TControlMessageSend_N = function(Player: Pointer; Code: Integer): Integer; stdcall;
TControlMessageSend_P = function(Player: Pointer; Code: Integer; Pointer1: Pointer): Integer; stdcall;
TControlMessageSend_S = function(Player: Pointer; Code: Integer; Str1: PChar): Integer; stdcall;
TControlMessageSend_SS = function(Player: Pointer; Code: Integer; Str1, Str2: PChar): Integer; stdcall;
TControlMessageSend_SI = function(Player: Pointer; Code: Integer; Str1: PChar; Int1: Integer): Integer; stdcall;
TControlMessageSend_IPI = function(Player: Pointer; Code: Integer; Int1: Integer; Ptr1: Pointer; Int2: Integer): Integer; stdcall;
TControlMessageSend_I = function(Player: Pointer; Code: Integer; Int1: Integer): Integer; stdcall;
TControlMessageSend_II = function(Player: Pointer; Code: Integer; Int1, Int2: Integer): Integer; stdcall;
TControlMessageSend_III = function(Player: Pointer; Code: Integer; Int1, Int2, Int3: Integer): Integer; stdcall;
TControlMessageSend_IIII = function(Player: Pointer; Code: Integer; Int1, Int2, Int3, Int4: Integer): Integer; stdcall;
TControlWin32ParamsToMessage = function(Player: Pointer; var xa_msg: XA_Message; code: UINT; w_param: WPARAM; l_param: LPARAM): Integer; stdcall;
{ TXaudioPlayer Class }
TXaudioPlayer = class(TComponent)
private
{ Private declarations }
Player: Pointer;
PlayerPriority: Cardinal;
HiddenWindow: HWND;
LibraryHandle: HINST;
LibraryPath: String;
PlayerNew: TPlayerNew;
PlayerDelete: TPlayerDelete;
PlayerSetPriority: TPlayerSetPriority;
PlayerGetPriority: TPlayerGetPriority;
XaudioErrorString: TXaudioErrorString;
XaudioGetVersion: TXaudioGetVersion;
ControlMessageSend_N: TControlMessageSend_N;
ControlMessageSend_P: TControlMessageSend_P;
ControlMessageSend_S: TControlMessageSend_S;
ControlMessageSend_SS: TControlMessageSend_SS;
ControlMessageSend_SI: TControlMessageSend_SI;
ControlMessageSend_IPI: TControlMessageSend_IPI;
ControlMessageSend_I: TControlMessageSend_I;
ControlMessageSend_II: TControlMessageSend_II;
ControlMessageSend_III: TControlMessageSend_III;
ControlMessageSend_IIII: TControlMessageSend_IIII;
ControlWin32ParamsToMessage: TControlWin32ParamsToMessage;
FOnNotifyMessage: TNotifyMessageEvent;
FOnNotifyReady: TNotifyEvent;
FOnNotifyAck: TNotifyAckEvent;
FOnNotifyNack: TNotifyNackEvent;
FOnNotifyPong: TNotifyPongEvent;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -