AVSetFrm.pas 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. unit AVSetFrm;
  2. interface
  3. uses
  4. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5. Dialogs, StdCtrls, ExtCtrls, Buttons, Videocap, MMObj, MMSlider, MMMixCtl,
  6. MMDIBCv, MMLevel,DSUtil,DirectShow9, MMDevice, MMMixer, MMHook, MMDesign,
  7. MMDSPObj, MMWavOut, MMWave, MMConect, MMWavIn, MMRingBf,MMSystem,
  8. XMLDoc, XMLIntf, RealICQMultiLanguage, IniFiles;
  9. type
  10. TAVSetForm = class(TForm)
  11. Image1: TImage;
  12. Bevel1: TBevel;
  13. BTPrev: TBitBtn;
  14. BTNext: TBitBtn;
  15. BTCancel: TBitBtn;
  16. Notebook1: TNotebook;
  17. Label1: TLabel;
  18. Label2: TLabel;
  19. Label3: TLabel;
  20. Label4: TLabel;
  21. Label5: TLabel;
  22. Label6: TLabel;
  23. Label7: TLabel;
  24. CBCamera: TComboBox;
  25. Label8: TLabel;
  26. Panel1: TPanel;
  27. VideoCap: TVideoCap;
  28. Label9: TLabel;
  29. Label10: TLabel;
  30. Label11: TLabel;
  31. Label12: TLabel;
  32. Label13: TLabel;
  33. Label14: TLabel;
  34. Label15: TLabel;
  35. CBMic: TComboBox;
  36. CBSpeaker: TComboBox;
  37. Label16: TLabel;
  38. Label17: TLabel;
  39. BTTestSpeaker: TButton;
  40. GroupBox1: TGroupBox;
  41. MMMixerSlider2: TMMMixerSlider;
  42. Label18: TLabel;
  43. Label19: TLabel;
  44. GroupBox2: TGroupBox;
  45. MMMixerSlider1: TMMMixerSlider;
  46. Label20: TLabel;
  47. Label21: TLabel;
  48. Label22: TLabel;
  49. MMWaveIn: TMMWaveIn;
  50. MMWaveOut: TMMWaveOut;
  51. MMVolumeControl1: TMMVolumeControl;
  52. MMVolumeControl2: TMMVolumeControl;
  53. MMConnector1: TMMConnector;
  54. MMRingBuffer1: TMMRingBuffer;
  55. MMDesigner1: TMMDesigner;
  56. MMAudioLine1: TMMAudioLine;
  57. MMAudioLine2: TMMAudioLine;
  58. MMAudioLine3: TMMAudioLine;
  59. MMDevice: TMMMixerDevice;
  60. MMWaveFile: TMMWaveFile;
  61. MMWaveOut1: TMMWaveOut;
  62. procedure BTNextClick(Sender: TObject);
  63. procedure BTPrevClick(Sender: TObject);
  64. procedure BTCancelClick(Sender: TObject);
  65. procedure BTTestSpeakerClick(Sender: TObject);
  66. procedure MMWaveOutStart(Sender: TObject);
  67. procedure MMWaveOutStop(Sender: TObject);
  68. procedure MMWaveInBufferReady(Sender: TObject; lpWaveHdr: PWaveHdr);
  69. procedure FormCreate(Sender: TObject);
  70. procedure FormDestroy(Sender: TObject);
  71. private
  72. FRealICQMultiLanguage: TRealICQMultiLanguage;
  73. procedure CheckBTState;
  74. procedure SaveAVSets;
  75. public
  76. { Public declarations }
  77. end;
  78. var
  79. AVSetForm: TAVSetForm;
  80. FInInfo: TBitmapInfo;
  81. HintStr,
  82. NoVideoDevice,
  83. NoAudioDevice,
  84. NextStr,
  85. OKStr,
  86. StopStr,
  87. TestSpeaker: String;
  88. implementation
  89. {$R *.dfm}
  90. {------------------------------------------------------------------------------}
  91. procedure FillBitmapStruc;
  92. begin
  93. FillChar(FInInfo.bmiHeader, SizeOf(TBitmapInfoHeader), 0);
  94. with FInInfo.bmiHeader do
  95. begin
  96. biBitCount := 24;
  97. biCompression := BI_RGB;
  98. biHeight := 240;
  99. biPlanes := 1;
  100. biSize := SizeOf(TBitmapInfoHeader);
  101. biWidth := 320;
  102. end;
  103. end;
  104. procedure TAVSetForm.CheckBTState;
  105. var
  106. SysDev: TSysDevEnum;
  107. iLoop:Integer;
  108. begin
  109. BTPrev.Enabled:=NoteBook1.PageIndex>0;
  110. BTNext.Enabled:=NoteBook1.PageIndex<NoteBook1.Pages.Count-1;
  111. case NoteBook1.PageIndex of
  112. 1:begin
  113. if VideoCap.DriverOpen then
  114. begin
  115. VideoCap.VideoPreview:=False;
  116. VideoCap.StopCapture;
  117. end;
  118. SysDev:= TSysDevEnum.Create(CLSID_VideoInputDeviceCategory);
  119. if SysDev.CountFilters=0 then
  120. begin
  121. MessageBox(Handle, PChar(NoVideoDevice), PChar(HintStr),MB_ICONINFORMATION);
  122. NoteBook1.PageIndex:=3;
  123. CheckBTState;
  124. exit;
  125. end;
  126. CBCamera.Clear;
  127. for iLoop:=0 to SysDev.CountFilters-1 do
  128. begin
  129. CBCamera.Items.Add(SysDev.Filters[iLoop].FriendlyName);
  130. end;
  131. CBCamera.ItemIndex:=0;
  132. SysDev.Free;
  133. end;
  134. 2:begin
  135. VideoCap.DriverIndex:=CBCamera.ItemIndex;
  136. VideoCap.VideoPreview:=True;
  137. FillBitmapStruc;
  138. VideoCap.SetBitmapInfo(@FInInfo, SizeOf(BITMAPINFO));
  139. VideoCap.StartCapture;
  140. end;
  141. 3:begin
  142. if VideoCap.DriverOpen then
  143. begin
  144. VideoCap.VideoPreview:=False;
  145. VideoCap.StopCapture;
  146. end;
  147. end;
  148. 4:begin
  149. try
  150. MMWaveOut.Stop;
  151. MMWaveOut.Close;
  152. except
  153. end;
  154. if MMDevice.DeviceCount=0 then
  155. begin
  156. MessageBox(Handle, PChar(NoAudioDevice), PChar(HintStr),MB_ICONINFORMATION);
  157. NoteBook1.PageIndex:=7;
  158. CheckBTState;
  159. exit;
  160. end;
  161. MMDevice.GetDeviceList(CBMic.Items,True);
  162. MMDevice.GetDeviceList(CBSpeaker.Items,True);
  163. CBMic.ItemIndex:=0;
  164. CBSpeaker.ItemIndex:=0;
  165. end;
  166. 5:begin
  167. try
  168. MMWaveIn.Stop;
  169. MMWaveIn.Close;
  170. except
  171. end;
  172. MMDevice.DeviceID:=CBSpeaker.ItemIndex;
  173. MMWaveOut.DeviceID:=CBSpeaker.ItemIndex;
  174. MMWaveIn.DeviceID:=CBMic.ItemIndex;
  175. end;
  176. 6:begin
  177. try
  178. MMWaveOut.Stop;
  179. MMWaveOut.Close;
  180. except
  181. end;
  182. BTNext.Caption:= NextStr;
  183. MMDevice.DeviceID:=CBMic.ItemIndex;
  184. MMWaveOut1.DeviceID:=CBSpeaker.ItemIndex;
  185. MMWaveIn.DeviceID:=CBMic.ItemIndex;
  186. MMWaveIn.Start;
  187. MMWaveOut1.PWaveFormat:=MMWaveIn.PWaveFormat;
  188. MMWaveOut1.Start;
  189. end;
  190. 7:begin
  191. try
  192. MMWaveIn.Stop;
  193. MMWaveIn.Close;
  194. except
  195. end;
  196. BTNext.Caption:=OKStr;
  197. BTNext.Enabled:=True;
  198. end;
  199. end;
  200. end;
  201. procedure TAVSetForm.SaveAVSets;
  202. var
  203. XMLFile: String;
  204. XMLDocument: TXMLDocument;
  205. AVSetsNode: IXMLNode;
  206. begin
  207. XMLFile := ExtractFilePath(paramstr(0)) + 'XML\AVSets.XML';
  208. XMLDocument := TXMLDocument.Create(Self);
  209. try
  210. XMLDocument.Active := True;
  211. XMLDocument.LoadFromFile(XMLFile);
  212. AVSetsNode := XMLDocument.DocumentElement;
  213. AVSetsNode.ChildNodes.FindNode('VideoDevice').Attributes['DeviceID'] := CBCamera.ItemIndex;
  214. AVSetsNode.ChildNodes.FindNode('MicDevice').Attributes['DeviceID'] := CBMic.ItemIndex;
  215. AVSetsNode.ChildNodes.FindNode('SpeakerDevice').Attributes['DeviceID'] := CBSpeaker.ItemIndex;
  216. XMLDocument.SaveToFile();
  217. finally
  218. XMLDocument.Free;
  219. end;
  220. end;
  221. procedure TAVSetForm.BTNextClick(Sender: TObject);
  222. begin
  223. if NoteBook1.PageIndex = 7 then
  224. begin
  225. SaveAVSets;
  226. Close;
  227. end
  228. else
  229. begin
  230. NoteBook1.PageIndex := NoteBook1.PageIndex + 1;
  231. CheckBTState;
  232. end;
  233. end;
  234. procedure TAVSetForm.BTPrevClick(Sender: TObject);
  235. begin
  236. if (NoteBook1.PageIndex = 3) and (Self.CBCamera.Items.Count = 0) then
  237. NoteBook1.PageIndex := 0
  238. else
  239. NoteBook1.PageIndex := NoteBook1.PageIndex - 1;
  240. CheckBTState;
  241. end;
  242. procedure TAVSetForm.BTCancelClick(Sender: TObject);
  243. begin
  244. Close;
  245. end;
  246. procedure TAVSetForm.BTTestSpeakerClick(Sender: TObject);
  247. begin
  248. if BTTestSpeaker.Caption = StopStr then
  249. begin
  250. MMWaveOut.Stop;
  251. end
  252. else
  253. begin
  254. // MMWaveFile.LoadFromFile(ExtractFilePath(Application.ExeName) + 'Sound/TestSnd.wav');
  255. MMWaveFile.Wave.LoadFromFile(ExtractFilePath(Application.ExeName) + 'Sound/TestSnd.wav');
  256. MMWaveOut.Start;
  257. end;
  258. end;
  259. procedure TAVSetForm.MMWaveOutStart(Sender: TObject);
  260. begin
  261. BTTestSpeaker.Caption:=StopStr;
  262. end;
  263. procedure TAVSetForm.MMWaveOutStop(Sender: TObject);
  264. begin
  265. BTTestSpeaker.Caption:=TestSpeaker;
  266. end;
  267. procedure TAVSetForm.MMWaveInBufferReady(Sender: TObject;
  268. lpWaveHdr: PWaveHdr);
  269. begin
  270. MMRingBuffer1.PutBuffer(lpWaveHdr.lpData,lpWaveHdr.dwBufferLength,lpWaveHdr.dwUser,lpWaveHdr.dwFlags);
  271. end;
  272. procedure TAVSetForm.FormCreate(Sender: TObject);
  273. var
  274. IniFile: TIniFile;
  275. begin
  276. FRealICQMultiLanguage := TRealICQMultiLanguage.Create(Self);
  277. try
  278. FRealICQMultiLanguage.LanguageIniFile := ParamStr(1);
  279. except
  280. end;
  281. IniFile := TIniFile.Create(ParamStr(1));
  282. try
  283. with IniFile do
  284. begin
  285. Application.Title := FilterStr(ReadString(String(Self.ClassName), 'ApplicationTitle', ''));
  286. Caption := FilterStr(ReadString(String(Self.ClassName), 'Caption', ''));
  287. HintStr := FilterStr(ReadString(String(Self.ClassName), 'HintStr', ''));
  288. NoVideoDevice := FilterStr(ReadString(String(Self.ClassName), 'NoVideoDevice', ''));
  289. NoAudioDevice := FilterStr(ReadString(String(Self.ClassName), 'NoAudioDevice', ''));
  290. NextStr := FilterStr(ReadString(String(Self.ClassName), 'NextStr', ''));
  291. OKStr := FilterStr(ReadString(String(Self.ClassName), 'OKStr', ''));
  292. StopStr := FilterStr(ReadString(String(Self.ClassName), 'StopStr', ''));
  293. TestSpeaker := FilterStr(ReadString(String(Self.ClassName), 'TestSpeaker', ''));
  294. end;
  295. finally
  296. FreeAndNil(IniFile);
  297. end;
  298. end;
  299. procedure TAVSetForm.FormDestroy(Sender: TObject);
  300. begin
  301. FreeAndNil(FRealICQMultiLanguage);
  302. end;
  303. end.