| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334 |
- unit AVSetFrm;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls, ExtCtrls, Buttons, Videocap, MMObj, MMSlider, MMMixCtl,
- MMDIBCv, MMLevel,DSUtil,DirectShow9, MMDevice, MMMixer, MMHook, MMDesign,
- MMDSPObj, MMWavOut, MMWave, MMConect, MMWavIn, MMRingBf,MMSystem,
- XMLDoc, XMLIntf, RealICQMultiLanguage, IniFiles;
- type
- TAVSetForm = class(TForm)
- Image1: TImage;
- Bevel1: TBevel;
- BTPrev: TBitBtn;
- BTNext: TBitBtn;
- BTCancel: TBitBtn;
- Notebook1: TNotebook;
- Label1: TLabel;
- Label2: TLabel;
- Label3: TLabel;
- Label4: TLabel;
- Label5: TLabel;
- Label6: TLabel;
- Label7: TLabel;
- CBCamera: TComboBox;
- Label8: TLabel;
- Panel1: TPanel;
- VideoCap: TVideoCap;
- Label9: TLabel;
- Label10: TLabel;
- Label11: TLabel;
- Label12: TLabel;
- Label13: TLabel;
- Label14: TLabel;
- Label15: TLabel;
- CBMic: TComboBox;
- CBSpeaker: TComboBox;
- Label16: TLabel;
- Label17: TLabel;
- BTTestSpeaker: TButton;
- GroupBox1: TGroupBox;
- MMMixerSlider2: TMMMixerSlider;
- Label18: TLabel;
- Label19: TLabel;
- GroupBox2: TGroupBox;
- MMMixerSlider1: TMMMixerSlider;
- Label20: TLabel;
- Label21: TLabel;
- Label22: TLabel;
- MMWaveIn: TMMWaveIn;
- MMWaveOut: TMMWaveOut;
- MMVolumeControl1: TMMVolumeControl;
- MMVolumeControl2: TMMVolumeControl;
- MMConnector1: TMMConnector;
- MMRingBuffer1: TMMRingBuffer;
- MMDesigner1: TMMDesigner;
- MMAudioLine1: TMMAudioLine;
- MMAudioLine2: TMMAudioLine;
- MMAudioLine3: TMMAudioLine;
- MMDevice: TMMMixerDevice;
- MMWaveFile: TMMWaveFile;
- MMWaveOut1: TMMWaveOut;
- procedure BTNextClick(Sender: TObject);
- procedure BTPrevClick(Sender: TObject);
- procedure BTCancelClick(Sender: TObject);
- procedure BTTestSpeakerClick(Sender: TObject);
- procedure MMWaveOutStart(Sender: TObject);
- procedure MMWaveOutStop(Sender: TObject);
- procedure MMWaveInBufferReady(Sender: TObject; lpWaveHdr: PWaveHdr);
- procedure FormCreate(Sender: TObject);
- procedure FormDestroy(Sender: TObject);
- private
- FRealICQMultiLanguage: TRealICQMultiLanguage;
- procedure CheckBTState;
- procedure SaveAVSets;
- public
- { Public declarations }
- end;
- var
- AVSetForm: TAVSetForm;
- FInInfo: TBitmapInfo;
- HintStr,
- NoVideoDevice,
- NoAudioDevice,
- NextStr,
- OKStr,
- StopStr,
- TestSpeaker: String;
- implementation
-
- {$R *.dfm}
- {------------------------------------------------------------------------------}
- procedure FillBitmapStruc;
- begin
- FillChar(FInInfo.bmiHeader, SizeOf(TBitmapInfoHeader), 0);
- with FInInfo.bmiHeader do
- begin
- biBitCount := 24;
- biCompression := BI_RGB;
- biHeight := 240;
- biPlanes := 1;
- biSize := SizeOf(TBitmapInfoHeader);
- biWidth := 320;
- end;
- end;
- procedure TAVSetForm.CheckBTState;
- var
- SysDev: TSysDevEnum;
- iLoop:Integer;
- begin
- BTPrev.Enabled:=NoteBook1.PageIndex>0;
- BTNext.Enabled:=NoteBook1.PageIndex<NoteBook1.Pages.Count-1;
- case NoteBook1.PageIndex of
- 1:begin
- if VideoCap.DriverOpen then
- begin
- VideoCap.VideoPreview:=False;
- VideoCap.StopCapture;
- end;
- SysDev:= TSysDevEnum.Create(CLSID_VideoInputDeviceCategory);
- if SysDev.CountFilters=0 then
- begin
- MessageBox(Handle, PChar(NoVideoDevice), PChar(HintStr),MB_ICONINFORMATION);
- NoteBook1.PageIndex:=3;
- CheckBTState;
- exit;
- end;
- CBCamera.Clear;
- for iLoop:=0 to SysDev.CountFilters-1 do
- begin
- CBCamera.Items.Add(SysDev.Filters[iLoop].FriendlyName);
- end;
- CBCamera.ItemIndex:=0;
- SysDev.Free;
- end;
- 2:begin
- VideoCap.DriverIndex:=CBCamera.ItemIndex;
- VideoCap.VideoPreview:=True;
- FillBitmapStruc;
- VideoCap.SetBitmapInfo(@FInInfo, SizeOf(BITMAPINFO));
- VideoCap.StartCapture;
- end;
- 3:begin
- if VideoCap.DriverOpen then
- begin
- VideoCap.VideoPreview:=False;
- VideoCap.StopCapture;
- end;
- end;
- 4:begin
- try
- MMWaveOut.Stop;
- MMWaveOut.Close;
- except
- end;
- if MMDevice.DeviceCount=0 then
- begin
- MessageBox(Handle, PChar(NoAudioDevice), PChar(HintStr),MB_ICONINFORMATION);
- NoteBook1.PageIndex:=7;
- CheckBTState;
- exit;
- end;
- MMDevice.GetDeviceList(CBMic.Items,True);
- MMDevice.GetDeviceList(CBSpeaker.Items,True);
- CBMic.ItemIndex:=0;
- CBSpeaker.ItemIndex:=0;
- end;
- 5:begin
- try
- MMWaveIn.Stop;
- MMWaveIn.Close;
- except
- end;
- MMDevice.DeviceID:=CBSpeaker.ItemIndex;
- MMWaveOut.DeviceID:=CBSpeaker.ItemIndex;
- MMWaveIn.DeviceID:=CBMic.ItemIndex;
- end;
- 6:begin
- try
- MMWaveOut.Stop;
- MMWaveOut.Close;
- except
- end;
- BTNext.Caption:= NextStr;
- MMDevice.DeviceID:=CBMic.ItemIndex;
- MMWaveOut1.DeviceID:=CBSpeaker.ItemIndex;
- MMWaveIn.DeviceID:=CBMic.ItemIndex;
- MMWaveIn.Start;
- MMWaveOut1.PWaveFormat:=MMWaveIn.PWaveFormat;
- MMWaveOut1.Start;
- end;
- 7:begin
- try
- MMWaveIn.Stop;
- MMWaveIn.Close;
- except
- end;
- BTNext.Caption:=OKStr;
- BTNext.Enabled:=True;
- end;
- end;
- end;
- procedure TAVSetForm.SaveAVSets;
- var
- XMLFile: String;
- XMLDocument: TXMLDocument;
- AVSetsNode: IXMLNode;
- begin
- XMLFile := ExtractFilePath(paramstr(0)) + 'XML\AVSets.XML';
- XMLDocument := TXMLDocument.Create(Self);
- try
- XMLDocument.Active := True;
- XMLDocument.LoadFromFile(XMLFile);
- AVSetsNode := XMLDocument.DocumentElement;
- AVSetsNode.ChildNodes.FindNode('VideoDevice').Attributes['DeviceID'] := CBCamera.ItemIndex;
- AVSetsNode.ChildNodes.FindNode('MicDevice').Attributes['DeviceID'] := CBMic.ItemIndex;
- AVSetsNode.ChildNodes.FindNode('SpeakerDevice').Attributes['DeviceID'] := CBSpeaker.ItemIndex;
-
- XMLDocument.SaveToFile();
- finally
- XMLDocument.Free;
- end;
- end;
- procedure TAVSetForm.BTNextClick(Sender: TObject);
- begin
- if NoteBook1.PageIndex = 7 then
- begin
- SaveAVSets;
- Close;
- end
- else
- begin
- NoteBook1.PageIndex := NoteBook1.PageIndex + 1;
- CheckBTState;
- end;
- end;
- procedure TAVSetForm.BTPrevClick(Sender: TObject);
- begin
- if (NoteBook1.PageIndex = 3) and (Self.CBCamera.Items.Count = 0) then
- NoteBook1.PageIndex := 0
- else
- NoteBook1.PageIndex := NoteBook1.PageIndex - 1;
- CheckBTState;
- end;
- procedure TAVSetForm.BTCancelClick(Sender: TObject);
- begin
- Close;
- end;
- procedure TAVSetForm.BTTestSpeakerClick(Sender: TObject);
- begin
- if BTTestSpeaker.Caption = StopStr then
- begin
- MMWaveOut.Stop;
- end
- else
- begin
- // MMWaveFile.LoadFromFile(ExtractFilePath(Application.ExeName) + 'Sound/TestSnd.wav');
- MMWaveFile.Wave.LoadFromFile(ExtractFilePath(Application.ExeName) + 'Sound/TestSnd.wav');
- MMWaveOut.Start;
- end;
- end;
- procedure TAVSetForm.MMWaveOutStart(Sender: TObject);
- begin
- BTTestSpeaker.Caption:=StopStr;
- end;
- procedure TAVSetForm.MMWaveOutStop(Sender: TObject);
- begin
- BTTestSpeaker.Caption:=TestSpeaker;
- end;
- procedure TAVSetForm.MMWaveInBufferReady(Sender: TObject;
- lpWaveHdr: PWaveHdr);
- begin
- MMRingBuffer1.PutBuffer(lpWaveHdr.lpData,lpWaveHdr.dwBufferLength,lpWaveHdr.dwUser,lpWaveHdr.dwFlags);
- end;
- procedure TAVSetForm.FormCreate(Sender: TObject);
- var
- IniFile: TIniFile;
- begin
- FRealICQMultiLanguage := TRealICQMultiLanguage.Create(Self);
- try
- FRealICQMultiLanguage.LanguageIniFile := ParamStr(1);
- except
- end;
- IniFile := TIniFile.Create(ParamStr(1));
- try
- with IniFile do
- begin
- Application.Title := FilterStr(ReadString(String(Self.ClassName), 'ApplicationTitle', ''));
- Caption := FilterStr(ReadString(String(Self.ClassName), 'Caption', ''));
- HintStr := FilterStr(ReadString(String(Self.ClassName), 'HintStr', ''));
- NoVideoDevice := FilterStr(ReadString(String(Self.ClassName), 'NoVideoDevice', ''));
- NoAudioDevice := FilterStr(ReadString(String(Self.ClassName), 'NoAudioDevice', ''));
- NextStr := FilterStr(ReadString(String(Self.ClassName), 'NextStr', ''));
- OKStr := FilterStr(ReadString(String(Self.ClassName), 'OKStr', ''));
- StopStr := FilterStr(ReadString(String(Self.ClassName), 'StopStr', ''));
- TestSpeaker := FilterStr(ReadString(String(Self.ClassName), 'TestSpeaker', ''));
- end;
- finally
- FreeAndNil(IniFile);
- end;
- end;
- procedure TAVSetForm.FormDestroy(Sender: TObject);
- begin
- FreeAndNil(FRealICQMultiLanguage);
- end;
- end.
|