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

📄 mmwrec.pas

📁 一套及时通讯的原码
💻 PAS
📖 第 1 页 / 共 2 页
字号:
{-- 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 + -