⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xaudioplayer.pas

📁 这是在磁疗用DELPHI编写一套安装软件的程序源码
💻 PAS
📖 第 1 页 / 共 5 页
字号:
  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 + -