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

📄 mpegplay.pas

📁 mp3 播放器 delphi 源码
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  or (@DllPause=nil)
  or (@DllRestart=nil)
  or (@DllStop=nil)
  or (@DllSetPriority=nil)
  or (@DllSetOutputDevice=nil)
  or (@DllPlay=nil)
  or (@DllClose=nil)
  or (@DllGetFrequency=nil)
  or (@DllGetBitRate=nil)
  or (@DllGetLayer=nil)
  or (@DllGetPlayerMode=nil)
  or (@DllGetCurrentPos=nil)
  or (@DllGetLength=nil)
  or (@DllResetPlayerMode=nil)
  or (@DllSeek=nil)
  or (@DLLLastError=nil)
  then begin
    FreeLibrary(DLLHandle);
    DLLHandle:=0;
    Raise TMPEGError.CreateErr(ErrStr[0],0);
  end;
  if DllInit=false then
  begin
    LE:=LastError;
    DLLHandle:=0;
    Raise TMPEGError.CreateErr(ErrStr[LE],LE);
  end;
  PosUpdateTimer := TTimer.create(self);
  PosUpdateTimer.OnTimer := UpdateTimer;
  PosUpdateTimer.Enabled := false;
  PosUpdateTimer.Interval := TimerFreq;
  if not UseTimer then PosUpdateTimer.Interval := 0;
  FStreamLength := 0;
end;

procedure TMPEGPlayer.Deinit;
begin
  if DLLHandle=0 then Raise TMPEGError.CreateErr(ErrStr[0],0);
  if FOpened then Close;
  if @DLLDeInit<>nil then DLLDeInit;
  FreeLibrary(DLLHandle);
  DLLHandle:=0;
  @DllInit            := nil;
  @DllDeInit          := nil;
  @DllOpen            := nil;
  @DllPause           := nil;
  @DLLRestart         := nil;
  @DllStop            := nil;
  @DllSetPriority     := nil;
  @DllSetOutputDevice := nil;
  @DllPlay            := nil;
  @DllClose           := nil;
  @DllGetFrequency    := nil;
  @DllGetBitRate      := nil;
  @DllGetLayer        := nil;
  @DllGetPlayerMode   := nil;
  @DllGetCurrentPos   := nil;
  @DllGetLength       := nil;
  @DllResetPlayerMode := nil;
  @DllSeek            := nil;
  @DLLLastError       := nil;
end;

procedure TMPEGPlayer.Open;
var p:pchar;

begin
  if DLLHandle=0 then Raise TMPEGError.CreateErr(ErrStr[0],0);
  if FOpened then Close;
  FOpened := false;

    if FResource then
    begin
      DLLOpen(nil,true,CBCS,CBClS,CBRSS,CBRS,CBRSP,CBGS,self);
      LE:=LastError;
    end
    else
    begin
      if FStreamName = '' then
         Raise TMPEGError.CreateErr('Can''t play non-specified stream',254);

      GetMem(p,512);
      StrPCopy(p,FStreamName);
      DLLOpen(p, false, nil,nil,nil,nil,nil,nil,nil);
      LE:=LastError;
      FreeMem(p,512);
    end;
    if LE>0 then
      Raise TMPEGError.CreateErr(ErrStr[LE],LE);
    FOpened:=true;
    FPlayCount:=1;
    FStreamLength:=GetLength;
    if AutoPlay then Play;
end;

procedure TMPEGPlayer.Pause(value:boolean);
begin
  if DLLHandle=0 then Raise TMPEGError.CreateErr(ErrStr[0],0);
  if not(FPlayStarted) or (FPlayStopped) then
  begin
    FPaused := false;
    if value then Raise TMPEGError.CreateErr(ErrStr[2],2);
    exit;
  end;
    DLLPause(not value);
    LE:=LastError;
    if LE>0 then Raise TMPEGError.CreateErr(ErrStr[LE],LE);
    FPaused:=value;
end;

procedure TMPEGPlayer.Stop;
begin
  if not(FPlayStarted) or (FPlayStopped) then
    Raise TMPEGError.CreateErr(ErrStr[2],2);
  if DLLHandle=0 then Raise TMPEGError.CreateErr(ErrStr[0],0);
    DLLStop;
    LE:=LastError;
    if LE>0 then Raise TMPEGError.CreateErr(ErrStr[LE],LE);
    FPlayStarted := false;
    FPaused:=false;
end;

procedure TMPEGPlayer.Restart;
begin
  if DLLHandle=0 then Raise TMPEGError.CreateErr(ErrStr[0],0);
  if not FOpened then Raise TMPEGError.CreateErr(ErrStr[2],2);
  FPlayStopped:=false;
  DllRestart;
  LE:=LastError;
  if LE>0 then Raise TMPEGError.CreateErr(ErrStr[LE],LE);
  FPlayStarted := true;
  inc(FPlayCount);
  if (UseTimer) and (PosUpdateTimer.Interval<>0) then
  begin
    PosUpdateTimer.Enabled := true;
    UpdateTimer(self);
  end;
end;

procedure TMPEGPlayer.Play;
var p      : pchar;
    b      : integer;

begin
  if DLLHandle=0 then Raise TMPEGError.CreateErr(ErrStr[0],0);
  if FPaused then
  begin
    Pause(false);
    exit;
  end;
  if FPlayStarted then exit;
  if not FOpened then Open;
  if not FOpened then exit;
  if FPlayCount>1 then
  begin
    Restart;
    exit;
  end;
    DLLSetPriority(FPriority);
    LE:=LastError;
    if LE>0 then Raise TMPEGError.CreateErr(ErrStr[LE],LE);

    GetMem(p,260);
    StrPCopy(p,FOutFilename);
    DllSetOutPutDevice(FOutputDevice,p);
    FreeMem(p,260);
    LE:=LastError;
    if (LE>0) then Raise TMPEGError.CreateErr(ErrStr[LE],LE);

    b:=DllPlay(FStartPos, FEndPos,@FPlayStopped);
    LE:=LastError;
    if (LE>0) or (b<>0) then Raise TMPEGError.CreateErr(ErrStr[LE],LE);
    FPlayStarted := true;
    inc(FPlayCount);
    if (UseTimer) and (PosUpdateTimer.Interval<>0) then
    begin
      PosUpdateTimer.Enabled := true;
      UpdateTimer(self);
    end;
end;

procedure TMPEGPlayer.Close;
begin
  if DLLHandle=0 then Raise TMPEGError.CreateErr(ErrStr[0],0);
  FOpened := false;
  FPaused:=false;
  FPlayStarted := false;
  FPlayCount:=0;
  DllClose;
  LE:=LastError;
  if LE>0 then Raise TMPEGError.CreateErr(ErrStr[LE],LE);
end;

function TMPEGPlayer.GetFrequency:integer;
begin
  if DLLHandle=0 then Raise TMPEGError.CreateErr(ErrStr[0],0);
  result:=DLLGetFrequency;
  LE:=LastError;
  if LE>0 then Raise TMPEGError.CreateErr(ErrStr[LE],LE);
end;

function TMPEGPlayer.GetBitrate:integer;
begin
  if DLLHandle=0 then Raise TMPEGError.CreateErr(ErrStr[0],0);
  result:=DLLGetBitrate;
  LE:=LastError;
  if LE>0 then Raise TMPEGError.CreateErr(ErrStr[LE],LE);
end;

function TMPEGPlayer.GetLayer:integer;
begin
  if DLLHandle=0 then Raise TMPEGError.CreateErr(ErrStr[0],0);
    result:=DLLGetLayer;
    LE:=LastError;
    if LE>0 then Raise TMPEGError.CreateErr(ErrStr[LE],LE);
end;

function TMPEGPlayer.GetPlayMode;
begin
  if DLLHandle=0 then Raise TMPEGError.CreateErr(ErrStr[0],0);
    result:=DLLGetPlayerMode;
    LE:=LastError;
    if LE>0 then Raise TMPEGError.CreateErr(ErrStr[LE],LE);
end;

function TMPEGPlayer.GetPosition;
begin
  if DLLHandle=0 then Raise TMPEGError.CreateErr(ErrStr[0],0);
    result:=DLLGetCurrentPos;
    LE:=LastError;
    if LE>0 then Raise TMPEGError.CreateErr(ErrStr[LE],LE);
end;

function TMPEGPlayer.GetLength;
begin
  if DLLHandle=0 then Raise TMPEGError.CreateErr(ErrStr[0],0);
    result:=DLLGetLength;
    LE:=LastError;
    if LE>0 then Raise TMPEGError.CreateErr(ErrStr[LE],LE);
end;

function TMPEGPlayer.GetPlayStopped;
begin
  if DLLHandle=0 then Raise TMPEGError.CreateErr(ErrStr[0],0);
  result:=FPlayStopped;
  if result then
  begin
    result:=DllResetPlayerMode;
    LE:=LastError;
    if LE>0 then Raise TMPEGError.CreateErr(ErrStr[LE],LE);
    FPlayStarted := false;
  end;
end;

procedure TMPEGPlayer.SetStreamName;
begin
  FStreamName:=value;
  if FOpened then Close;
end;

procedure TMPEGPlayer.Seek;
begin
  if DLLHandle=0 then Raise TMPEGError.CreateErr(ErrStr[0],0);
    DLLSeek(value);
    LE:=LastError;
    if LE>0 then Raise TMPEGError.CreateErr(ErrStr[LE],LE);
end;

procedure TMPEGPlayer.SetPriority(P:TPlayPriority);
begin
  case p of
    Idle         : fPriority := THREAD_PRIORITY_IDLE;
    Lowest       : fPriority := THREAD_PRIORITY_LOWEST;
    BelowNormal  : fPriority := THREAD_PRIORITY_Below_Normal;
    Normal       : fPriority := THREAD_PRIORITY_NORMAL;
    AboveNormal  : fPriority := THREAD_PRIORITY_ABOVE_NORMAL;
    Highest      : fPriority := THREAD_PRIORITY_HIGHEST;
    TimeCritical : fPriority := THREAD_PRIORITY_TIME_CRITICAL;
  end;
  if DLLHandle<>0 then
  begin
    DLLSetPriority(FPriority);
    LE:=LastError;
    if LE>0 then Raise TMPEGError.CreateErr(ErrStr[LE],LE);
  end;
end;

function TMPEGPlayer.GetPriority:TPlayPriority;
begin
  case fPriority of
    THREAD_PRIORITY_IDLE          : GetPriority := Idle;
    THREAD_PRIORITY_LOWEST        : GetPriority := Lowest;
    THREAD_PRIORITY_Below_Normal  : GetPriority := BelowNormal;
    THREAD_PRIORITY_NORMAL        : GetPriority := Normal;
    THREAD_PRIORITY_ABOVE_NORMAL  : GetPriority := AboveNormal;
    THREAD_PRIORITY_HIGHEST       : GetPriority := Highest;
    THREAD_PRIORITY_TIME_CRITICAL : GetPriority := TimeCritical;
    else GetPriority := Normal;
  end;
end;

procedure TMPEGPlayer.SetOutFilename;
begin
  FOutFileName:=value;
end;

procedure TMPEGPlayer.SetTimerFreq;
begin
  FTimerFreq:=value;
  if value=0 then UseTimer:=false;
end;

procedure TMPEGPlayer.SetOutputDevice;
begin
  if FOutFilename='' then FOutputDevice:=0 else
  if value=wavemapper then FOutputDevice:=0 else FOutputDevice:=2;
end;

function TMPEGPlayer.GetOutputDevice;
begin
  if FOutputDevice=0 then result:=wavemapper else result:=pcmfile;
end;

procedure Register;
begin
  RegisterComponents('Wabbit''s', [TMPEGPlayer]);
end;

end.

⌨️ 快捷键说明

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