📄 mmwrec.pas
字号:
{-- TMMWaveRecorder -----------------------------------------------------------}
function TMMWaveRecorder.GetWave: TMMWave;
begin
Result := FWaveFile.Wave;
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
function TMMWaveRecorder.SelectFormat: Boolean;
var
ACM: TMMACM;
begin
ACM := TMMACM.Create(nil);
try
ACM.EnumFormats := efInput;
Result := ACM.ChooseFormat(PWaveFormat,'Select Format');
if Result then
PWaveFormat := ACM.PWaveFormat;
finally
ACM.Free;
end;
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
procedure TMMWaveRecorder.SetPCMFormat(Mode: TMMMode; Bits: TMMBits; SampleRate: Longint);
var
wfx: TWaveFormatEx;
begin
pcmBuildWaveHeader(@wfx, (Ord(Bits)+1)*8, Ord(Mode)+1, SampleRate);
PWaveFormat := @wfx;
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
function TMMWaveRecorder.SelectFile: Boolean;
begin
with TSaveDialog.Create(nil) do
try
Filter := 'Wave Files (*.wav)|*.wav|';
FileName := Self.FileName;
Options := Options + [ofPathMustExist, ofFileMustExist, ofHideReadOnly];
Title := LoadResStr(IDS_SELECTFILE);
Result := Execute;
if Result then
Self.FileName := FileName;
finally
Free;
end;
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
procedure TMMWaveRecorder.SaveFormatInRegistry(RootKey: HKEY; Localkey, Field: string);
begin
SaveInRegistryBinary(RootKey,LocalKey,Field,PWaveFormat^,wioSizeOfWaveFormat(PWaveFormat));
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
procedure TMMWaveRecorder.LoadFormatFromRegistry(RootKey: HKEY; Localkey, Field: string);
var
wfx: array[0..1024] of Char;
begin
if GetFromRegistryBinary(RootKey,LocalKey,Field,wfx,sizeOf(wfx)) > 0 then
PWaveFormat := @wfx;
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
procedure TMMWaveRecorder.SetFileName(aValue: TFileName);
begin
FWaveFile.Wave.FileName := aValue;
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
function TMMWaveRecorder.GetFileName: TFileName;
begin
Result := FWaveFile.Wave.FileName;
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
procedure TMMWaveRecorder.SetBufferSize(aValue: Longint);
begin
FWaveIn.BufferSize := aValue;
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
function TMMWaveRecorder.GetBufferSize: Longint;
begin
Result := FWaveIn.BufferSize;
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
procedure TMMWaveRecorder.SetNumBuffers(aValue: integer);
begin
FWaveIn.NumBuffers := aValue;
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
function TMMWaveRecorder.GetNumBuffers: integer;
begin
Result := FWaveIn.NumBuffers;
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
procedure TMMWaveRecorder.SetDeviceID(aValue: TMMDeviceID);
begin
FWaveIn.DeviceID := aValue;
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
function TMMWaveRecorder.GetDeviceID: TMMDeviceID;
begin
Result := FWaveIn.DeviceID;
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
procedure TMMWaveRecorder.SetDummyString(aValue: string);
begin
;
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
function TMMWaveRecorder.GetProductName: string;
begin
Result := FWaveIn.ProductName;
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
function TMMWaveRecorder.GetInputFormat: string;
var
FormatTag, Format: string;
begin
Result := 'Unknown';
if acmGetFormatDescription(FWaveIn.PWaveFormat, FormatTag, Format) then
Result := FormatTag+' '+Format;
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
procedure TMMWaveRecorder.SetInputFormat(aValue: string);
begin
MessageDlg('This is a read-only property, please use SelectFormat.',
mtInformation,[mbOK],0);
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
procedure TMMWaveRecorder.SetTimeFormat(aValue: TMMTimeFormats);
begin
FWaveIn.TimeFormat := aValue;
FWaveFile.Wave.TimeFormat := aValue;
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
function TMMWaveRecorder.GetTimeFormat: TMMTimeFormats;
begin
Result := FWaveIn.TimeFormat;
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
procedure TMMWaveRecorder.SetCallBackMode(aValue: TMMCBMode);
begin
FWaveIn.CallBackMode := aValue;
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
function TMMWaveRecorder.GetCallBackMode: TMMCBMode;
begin
Result := FWaveIn.CallBackMode;
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
procedure TMMWaveRecorder.SetMaxRecTime(aValue: Longint);
begin
FWaveIn.MaxRecordTime := aValue;
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
function TMMWaveRecorder.GetMaxRecTime: Longint;
begin
Result := FWaveIn.MaxRecordTime;
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
procedure TMMWaveRecorder.SetOverwrite(aValue: Boolean);
begin
FWaveFile.OverwriteExisting := aValue;
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
function TMMWaveRecorder.GetOverwrite: Boolean;
begin
Result := FWaveFile.OverwriteExisting;
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
function TMMWaveRecorder.GetState: TMMWaveInState;
begin
Result := FWaveIn.State;
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
procedure TMMWaveRecorder.SetPosition(aValue: Longint);
begin
if (wisOpen in State) then
raise EMMWaveRecorderError.Create(LoadResStr(IDS_PROPERTYOPEN));
if not OverwriteExisting then
FWaveFile.Wave.Position := aValue;
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
function TMMWaveRecorder.GetPosition: Longint;
begin
if (wisOpen in State) then
begin
Result := FWaveIn.Position;
if not OverwriteExisting then
inc(Result,FStartPos);
end
else if not OverwriteExisting then
Result := FWaveFile.Wave.Position
else
Result := 0;
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
procedure TMMWaveRecorder.DoChange(Sender: TObject);
begin
FChanging := True;
Stop;
if assigned(FOnChange) then FOnChange(Self);
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
procedure TMMWaveRecorder.DoChanged(Sender: TObject);
begin
FChanging := False;
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
procedure TMMWaveRecorder.DoClose(Sender: TObject);
begin
Stop;
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
procedure TMMWaveRecorder.DoStart(Sender: TObject);
begin
if assigned(FOnStart) then FOnStart(Self);
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
procedure TMMWaveRecorder.DoStop(Sender: TObject);
begin
FWaveIn.Close;
if assigned(FOnStop) then FOnStop(Self);
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
procedure TMMWaveRecorder.DoPause(Sender: TObject);
begin
if assigned(FOnPause) then FOnPause(Self);
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
procedure TMMWaveRecorder.DoRestart(Sender: Tobject);
begin
if assigned(FOnRestart) then FOnRestart(Self);
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
procedure TMMWaveRecorder.DoData(Sender: TObject; lpwh: PWaveHdr);
begin
if assigned(FOnData) then FOnData(Self,lpwh);
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
procedure TMMWaveRecorder.Recording;
begin
if not (wisRecord in State) and (FWaveFile.Wave.FileName <> '') then
begin
FStartPos := FWaveFile.Wave.Position;
FWaveIn.Start;
end;
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
procedure TMMWaveRecorder.Stop;
begin
FWaveIn.Stop;
FWaveIn.Close;
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
procedure TMMWaveRecorder.Pause;
begin
if not (wisPause in State) and (FWaveFile.Wave.FileName <> '') then FWaveIn.Pause;
end;
{-- TMMWaveRecorder -----------------------------------------------------------}
procedure TMMWaveRecorder.Restart;
begin
FWaveIn.Restart;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -