📄 mmwplay.pas
字号:
{========================================================================}
{= (c) 1995-98 SwiftSoft Ronald Dittrich =}
{========================================================================}
{= All Rights Reserved =}
{========================================================================}
{= D 01099 Dresden = Fax.: +49(0)351-8037944 =}
{= Loewenstr.7a = info@swiftsoft.de =}
{========================================================================}
{= Actual versions on http://www.swiftsoft.de/index.html =}
{========================================================================}
{= This code is for reference purposes only and may not be copied or =}
{= distributed in any format electronic or otherwise except one copy =}
{= for backup purposes. =}
{= =}
{= No Delphi Component Kit or Component individually or in a collection=}
{= subclassed or otherwise from the code in this unit, or associated =}
{= .pas, .dfm, .dcu, .asm or .obj files may be sold or distributed =}
{= without express permission from SwiftSoft. =}
{= =}
{= For more licence informations please refer to the associated =}
{= HelpFile. =}
{========================================================================}
{= $Date: 09.10.98 - 17:23:11 $ =}
{========================================================================}
unit MMWPlay;
{$I COMPILER.INC}
interface
uses
{$IFDEF WIN32}
Windows,
{$ELSE}
WinTypes,
WinProcs,
{$ENDIF}
SysUtils,
Classes,
Controls,
Dialogs,
MMSystem,
MMObj,
MMDSPobj,
MMRegs,
MMUtils,
MMWave,
MMACMCvt,
MMWavOut,
MMCstDlg,
MMADCvt;
type
{-- TMMWavePlayer ---------------------------------------------------------}
TMMWavePlayer = class(TMMDSPComponent)
private
FStartPos : Longint;
FStopPos : Longint;
FSeeking : Boolean;
FResetPos : Boolean;
FAutoConvert: Boolean;
FOnStart : TNotifyEvent;
FOnStop : TNotifyEvent;
FOnPause : TNotifyEvent;
FOnRestart : TNotifyEvent;
FOnChange : TNotifyEvent;
FOnData : TMMBufferEvent;
procedure SetWave(aValue: TMMWave);
function GetWave: TMMWave;
procedure SetNumBuffers(aValue: integer);
function GetNumBuffers: integer;
procedure SetDeviceID(aValue: TMMDeviceID);
function GetDeviceID: TMMDeviceID;
procedure SetProductName(aValue: string);
function GetProductName: string;
procedure SetTimeFormat(aValue: TMMTimeFormats);
function GetTimeFormat: TMMTimeFormats;
procedure SetCallBackMode(aValue: TMMCBMode);
function GetCallBackMode: TMMCBMode;
procedure SetPosition(aValue: Longint);
function GetPosition: Longint;
procedure SetLooping(aValue: Boolean);
function GetLooping: Boolean;
procedure SetLoopCount(aValue: Word);
function GetLoopCount: Word;
procedure SetFileName(aValue: TFileName);
function GetFileName: TFileName;
function GetState: TMMWaveOutState;
procedure SetAutoConvert(aValue: Boolean);
procedure DoChange(Sender: TObject);
procedure DoChanged(Sender: TObject);
procedure DoStart(Sender: TObject);
procedure DoStop(Sender: TObject);
procedure DoClose(Sender: TObject);
procedure DoPause(Sender: TObject);
procedure DoRestart(Sender: TObject);
procedure DoData(Sender: TObject; lpwh: PWaveHdr);
protected
FWaveFile : TMMWaveFile;
FADPCMConvert: TMMADPCMConverter;
FPCMConvert : TMMPCMConverter;
FWaveOut : TMMWaveOut;
function GetBufferSize: Longint; override;
procedure SetBufferSize(aValue: Longint); override;
public
constructor Create(aOwner: TComponent); override;
destructor Destroy; override;
function SelectFile: Boolean;
procedure LoadFromFile(const FileName: TFileName);
procedure Play;
procedure Stop;
procedure Pause;
procedure Restart;
property FileName: TFileName read GetFileName write SetFileName stored False;
property PWaveFormat;
property State: TMMWaveOutState read GetState;
property Position: Longint read GetPosition write SetPosition;
published
property OnStart: TNotifyEvent read FOnStart write FOnStart;
property OnStop: TNotifyEvent read FOnStop write FOnStop;
property OnPause: TNotifyEvent read FOnPause write FOnPause;
property OnRestart: TNotifyEvent read FOnRestart write FOnRestart;
property OnChange: TNotifyEvent read FOnChange write FOnChange;
property OnData: TMMBufferEvent read FOnData write FOnData;
property Output;
property Wave: TMMWave read GetWave write SetWave;
property BufferSize: Longint read GetBufferSize write SetBufferSize;
property NumBuffers: integer read GetNumBuffers write SetNumBuffers;
property DeviceID: TMMDeviceID read GetDeviceID write SetDeviceID;
property ProductName: string read GetProductName write SetProductName stored False;
property TimeFormat: TMMTimeFormats read GetTimeFormat write SetTimeFormat;
property CallBackMode: TMMCBMode read GetCallBackMode write SetCallBackMode;
property Looping: Boolean read GetLooping write SetLooping;
property LoopCount: Word read GetLoopCount write SetLoopCount;
property ResetPosition: Boolean read FResetPos write FResetPos default True;
property AutoConvert: Boolean read FAutoConvert write SetAutoConvert default True;
end;
implementation
{== MMWavePlayer ==============================================================}
constructor TMMWavePlayer.Create(aOwner: TComponent);
begin
inherited Create(aOwner);
FSeeking := False;
FStartPos := 0;
FResetPos := True;
FAutoConvert := True;
FWaveFile := TMMWaveFile.Create(Self);
FWaveFile.OnChange := DoChange;
FWaveFile.OnChanged := DoChanged;
FADPCMConvert := TMMADPCMConverter.Create(Self);
FADPCMConvert.Input := FWaveFile;
FPCMConvert := TMMPCMConverter.Create(Self);
FPCMConvert.Input := FADPCMConvert;
FWaveOut := TMMWaveOut.Create(Self);
FWaveOut.Input := FPCMConvert;
FWaveOut.OnOpen := DoStart;
FWaveOut.OnStop := DoStop;
FWaveOut.OnClose := DoClose;
FWaveOut.OnPause := DoPause;
FWaveOut.OnRestart := DoRestart;
FWaveOut.OnBufferReady := DoData;
FInputValid := True;
FWaveOut.Output := Self;
FInputValid := False;
ErrorCode := ComponentRegistered(InitCode, Self, ClassName);
if (ErrorCode <> 0) then RegisterFailed(InitCode, Self , ClassName);
end;
{-- TMMWavePlayer -------------------------------------------------------------}
destructor TMMWavePlayer.Destroy;
begin
Stop;
FWaveFile.Free;
FADPCMConvert.Free;
FPCMConvert.Free;
FWaveOut.Free;
inherited Destroy;
end;
{-- TMMWavePlayer -------------------------------------------------------------}
procedure TMMWavePlayer.SetWave(aValue: TMMWave);
begin
FWaveFile.Wave := aValue;
end;
{-- TMMWavePlayer -------------------------------------------------------------}
function TMMWavePlayer.GetWave: TMMWave;
begin
Result := FWaveFile.Wave;
end;
{-- TMMWavePlayer -------------------------------------------------------------}
function TMMWavePlayer.SelectFile: Boolean;
begin
with TMMWaveOpenDialog.Create(nil) do
try
FileName := Self.FileName;
Result := Execute;
if Result then
Self.FileName := FileName;
finally
Free;
end;
end;
{-- TMMWavePlayer -------------------------------------------------------------}
procedure TMMWavePlayer.LoadFromFile(const FileName: TFileName);
begin
SetFileName(FileName);
end;
{-- TMMWavePlayer -------------------------------------------------------------}
procedure TMMWavePlayer.SetFileName(aValue: TFileName);
begin
FWaveFile.Wave.FileName := aValue;
FADPCMConvert.Enabled := FAutoConvert and FADPCMConvert.CanConvert;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -