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

📄 xaudioplayer.pas

📁 这是在磁疗用DELPHI编写一套安装软件的程序源码
💻 PAS
📖 第 1 页 / 共 5 页
字号:
  end
  else
      raise EXaudioException.Create('Cannot Load Xaudio DLL (' + LibraryPath + ')');
end;

{********************************************************************}
function TXaudioPlayer.CheckPlayerInstance: Boolean;
var
  ApiVersion: Cardinal;
  ApiMajor: Cardinal;
  ApiMinor: Cardinal;
begin
  { Ensure that we have a player instance }
  if (Player <> nil) then begin
    CheckPlayerInstance := True;
    Exit;
  end;

  { Ensure DLL is loaded}
  if (LibraryHandle = 0) then begin
    LoadExternalInterface;
  end;

  if (LibraryHandle <> 0) then begin
    { check that the DLL we have has a compatible version }
    ApiVersion := XaudioGetVersion(XA_VERSION_ID_ASYNC_API);
    ApiMajor := (ApiVersion shr 16) and $FF;
    ApiMinor := (ApiVersion shr 8) and $FF;
    if (ApiMajor <> XA_ASYNC_API_MAJOR) or (ApiMinor <> XA_ASYNC_API_MINOR) then begin
      Raise EXaudioException.Create('Xaudio DLL API Mismatch'#13'Expected ' +
                 IntToStr(XA_ASYNC_API_MAJOR) + '.' + IntToStr(XA_ASYNC_API_MINOR) +
                 ', Got ' + IntToStr(ApiMajor) + '.' + IntToStr(ApiMinor));
      CheckPlayerInstance := False;
      Exit;
    end;
    { Instantiate a native player object }
    if (PlayerNew(Player, HiddenWindow) <> 0) then begin
      Raise EXaudioException.Create('Cannot Start Xaudio Player');
      Player := nil;
      CheckPlayerInstance := False;
      Exit;
    end;
    { If the priority has been changed, set it now }
    if (PlayerPriority <> XA_CONTROL_PRIORITY_HIGH) then
      PlayerSetPriority(Player, PlayerPriority);
  end
  else begin
    CheckPlayerInstance := False;
    Exit;
  end;

  CheckPlayerInstance := True;
end;

{************************************************************}
function TXaudioPlayer.TranslateMessage(var msg_from: TMessage; var msg_to: XA_Message): Integer;
begin
  if (Player <> nil) then
    TranslateMessage := ControlWin32ParamsToMessage(Player, msg_to, msg_from.Msg, msg_from.WParam, msg_from.LParam)
  else
    TranslateMessage := -1;
end;

{************************************************************}
procedure TXaudioPlayer.OnWindowsMessage(var win32_msg: TMessage);
var
  xa_msg: XA_Message;
begin
  { Default if this is not an Xaudio message }
  if (win32_msg.Msg < XA_MSG_BASE) then
    DefWindowProc(HiddenWindow, win32_msg.Msg, win32_msg.wParam, win32_msg.lParam);

  { Translate the Windows message into an Xaudio message }
  if (TranslateMessage(win32_msg, xa_msg) <> 0) then Exit;

  { If there is a hook function, call it now }
  if Assigned(FOnNotifyMessage) then
    FOnNotifyMessage(self, xa_msg);

  { Dispatch the message to the registered event handler }
  case xa_msg.code of
    XA_MSG_NOTIFY_READY:
       begin
         if Assigned(FOnNotifyReady) then
           FOnNotifyReady(self);
       end;

    XA_MSG_NOTIFY_ACK:
      begin
        if Assigned(FOnNotifyAck) then
          FOnNotifyAck(self, xa_msg.ack);
      end;

    XA_MSG_NOTIFY_NACK:
      begin
        if Assigned(FOnNotifyNack) then
          FOnNotifyNack(self, xa_msg.nack.command, xa_msg.nack.code);
      end;

    XA_MSG_NOTIFY_PONG:
      begin
        if Assigned(FOnNotifyPong) then
          FOnNotifyPong(self, xa_msg.tag);
      end;

    XA_MSG_NOTIFY_EXITED:
      begin
        if Assigned(FOnNotifyExited) then
          FOnNotifyExited(self);
      end;

    XA_MSG_NOTIFY_PLAYER_STATE:
      begin
        if Assigned(FOnNotifyPlayerState) then
          FOnNotifyPlayerState(self, xa_msg.state);
      end;

    XA_MSG_NOTIFY_PLAYER_MODE:
      begin
        if Assigned(FOnNotifyPlayerMode) then
          FOnNotifyPlayerMode(self, xa_msg.mode);
      end;

    XA_MSG_NOTIFY_PLAYER_ENVIRONMENT_INTEGER:
      begin
        if Assigned(FOnNotifyPlayerEnvironmentInteger) then
          FOnNotifyPlayerEnvironmentInteger(self,
                                            xa_msg.environment_info.name,
                                            xa_msg.environment_info.integer_value);
      end;

    XA_MSG_NOTIFY_PLAYER_ENVIRONMENT_STRING:
      begin
        if Assigned(FOnNotifyPlayerEnvironmentString) then
          FOnNotifyPlayerEnvironmentString(self,
                                           xa_msg.environment_info.name,
                                           xa_msg.environment_info.string_value);
      end;

    XA_MSG_NOTIFY_INPUT_STATE:
      begin
        if Assigned(FOnNotifyInputState) then
          FOnNotifyInputState(self, xa_msg.state);
      end;

    XA_MSG_NOTIFY_INPUT_NAME:
      begin
        if Assigned(FOnNotifyInputName) then
          FOnNotifyInputName(self, xa_msg.name);
      end;

    XA_MSG_NOTIFY_INPUT_CAPS:
      begin
        if Assigned(FOnNotifyInputCaps) then
          FOnNotifyInputCaps(self, xa_msg.caps);
      end;

    XA_MSG_NOTIFY_INPUT_POSITION:
      begin
        if Assigned(FOnNotifyInputPosition) then
          FOnNotifyInputPosition(self,
                                 xa_msg.position.offset,
                                 xa_msg.position.range);
      end;

    XA_MSG_NOTIFY_INPUT_POSITION_RANGE:
      begin
        if Assigned(FOnNotifyInputPositionRange) then
          FOnNotifyInputPositionRange(self, xa_msg.range);
      end;

    XA_MSG_NOTIFY_INPUT_TIMECODE:
      begin
        if Assigned(FOnNotifyInputTimecode) then
          FOnNotifyInputTimecode(self,
                                 xa_msg.timecode.h,
                                 xa_msg.timecode.m,
                                 xa_msg.timecode.s,
                                 xa_msg.timecode.f);
      end;

    XA_MSG_NOTIFY_INPUT_TIMECODE_GRANULARITY:
      begin
        if Assigned(FOnNotifyInputTimecodeGranularity) then
          FOnNotifyInputTimecodeGranularity(self, xa_msg.granularity);
      end;

    XA_MSG_NOTIFY_INPUT_MODULE:
      begin
        if Assigned(FOnNotifyInputModule) then
          FOnNotifyInputModule(self, xa_msg.module_id);
      end;

    XA_MSG_NOTIFY_INPUT_MODULE_INFO:
      begin
        if Assigned(FOnNotifyInputModuleInfo) then
          FOnNotifyInputModuleInfo(self,
                                   xa_msg.module_info.id,
                                   xa_msg.module_info.nb_devices,
                                   xa_msg.module_info.name,
                                   xa_msg.module_info.description);
      end;

    XA_MSG_NOTIFY_INPUT_DEVICE_INFO:
      begin
        if Assigned(FOnNotifyInputDeviceInfo) then
          FOnNotifyInputDeviceInfo(self,
                                   xa_msg.device_info.module_id,
                                   xa_msg.device_info.index,
                                   xa_msg.device_info.flags,
                                   xa_msg.device_info.name,
                                   xa_msg.device_info.description);
      end;

    XA_MSG_NOTIFY_INPUT_FILTER_INFO:
      begin
        if Assigned(FOnNotifyInputFilterInfo) then
          FOnNotifyInputFilterInfo(self,
                                   xa_msg.filter_info.id,
                                   xa_msg.filter_info.name);
      end;

    XA_MSG_NOTIFY_OUTPUT_STATE:
      begin
        if Assigned(FOnNotifyOutputState) then
          FOnNotifyOutputState(self, xa_msg.state);
      end;

    XA_MSG_NOTIFY_OUTPUT_NAME:
      begin
        if Assigned(FOnNotifyOutputName) then
          FOnNotifyOutputName(self, xa_msg.name);
      end;

    XA_MSG_NOTIFY_OUTPUT_CAPS:
      begin
        if Assigned(FOnNotifyOutputCaps) then
          FOnNotifyOutputCaps(self, xa_msg.caps);
      end;

    XA_MSG_NOTIFY_OUTPUT_VOLUME:
      begin
        if Assigned(FOnNotifyOutputVolume) then
          FOnNotifyOutputVolume(self,
                                xa_msg.volume.master_level,
                                xa_msg.volume.pcm_level,
                                xa_msg.volume.balance);
      end;

    XA_MSG_NOTIFY_OUTPUT_BALANCE:
      begin
        if Assigned(FOnNotifyOutputBalance) then
          FOnNotifyOutputBalance(self, xa_msg.volume.balance);
      end;

    XA_MSG_NOTIFY_OUTPUT_PCM_LEVEL:
      begin
        if Assigned(FOnNotifyOutputPcmLevel) then
          FOnNotifyOutputPcmLevel(self, xa_msg.volume.pcm_level);
      end;

    XA_MSG_NOTIFY_OUTPUT_MASTER_LEVEL:
      begin
        if Assigned(FOnNotifyOutputMasterLevel) then
          FOnNotifyOutputMasterLevel(self, xa_msg.volume.master_level);
      end;

    XA_MSG_NOTIFY_OUTPUT_CHANNELS:
      begin
        if Assigned(FOnNotifyOutputChannels) then
          FOnNotifyOutputChannels(self, xa_msg.channels);
      end;

    XA_MSG_NOTIFY_OUTPUT_PORTS:
      begin
        if Assigned(FOnNotifyOutputPorts) then
          FOnNotifyOutputPorts(self, xa_msg.ports);
      end;

    XA_MSG_NOTIFY_OUTPUT_MODULE:
      begin
        if Assigned(FOnNotifyOutputModule) then
          FOnNotifyOutputModule(self, xa_msg.module_id);
      end;

    XA_MSG_NOTIFY_OUTPUT_MODULE_INFO:
      begin
        if Assigned(FOnNotifyOutputModuleInfo) then
          FOnNotifyOutputModuleInfo(self,
                                    xa_msg.module_info.id,
                                    xa_msg.module_info.nb_devices,
                                    xa_msg.module_info.name,
                                    xa_msg.module_info.description);
      end;

    XA_MSG_NOTIFY_OUTPUT_DEVICE_INFO:
      begin

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -