AVSetFrm.pas
上传用户:hylc_2004
上传日期:2014-01-23
资源大小:46800k
文件大小:7k
源码类别:

Delphi控件源码

开发平台:

Delphi

  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,Registry;
  8. type
  9.   TAVSetForm = class(TForm)
  10.     Image1: TImage;
  11.     Bevel1: TBevel;
  12.     BTPrev: TBitBtn;
  13.     BTNext: TBitBtn;
  14.     BTCancel: TBitBtn;
  15.     Notebook1: TNotebook;
  16.     Label1: TLabel;
  17.     Label2: TLabel;
  18.     Label3: TLabel;
  19.     Label4: TLabel;
  20.     Label5: TLabel;
  21.     Label6: TLabel;
  22.     Label7: TLabel;
  23.     CBCamera: TComboBox;
  24.     Label8: TLabel;
  25.     Panel1: TPanel;
  26.     VideoCap: TVideoCap;
  27.     Label9: TLabel;
  28.     Label10: TLabel;
  29.     Label11: TLabel;
  30.     Label12: TLabel;
  31.     Label13: TLabel;
  32.     Label14: TLabel;
  33.     Label15: TLabel;
  34.     CBMic: TComboBox;
  35.     CBSpeaker: TComboBox;
  36.     Label16: TLabel;
  37.     Label17: TLabel;
  38.     BTTestSpeaker: TButton;
  39.     GroupBox1: TGroupBox;
  40.     MMMixerSlider1: TMMMixerSlider;
  41.     Label18: TLabel;
  42.     Label19: TLabel;
  43.     GroupBox2: TGroupBox;
  44.     MMMixerSlider2: TMMMixerSlider;
  45.     MMLevel: TMMLevel;
  46.     Label20: TLabel;
  47.     Label21: TLabel;
  48.     Label22: TLabel;
  49.     MMDesigner1: TMMDesigner;
  50.     MMWaveFile: TMMWaveFile;
  51.     MMWaveOut: TMMWaveOut;
  52.     MMConnector1: TMMConnector;
  53.     MMDevice: TMMMixerDevice;
  54.     MMAudioLine3: TMMAudioLine;
  55.     MMAudioLine1: TMMAudioLine;
  56.     MMVolumeControl2: TMMVolumeControl;
  57.     MMAudioLine2: TMMAudioLine;
  58.     MMVolumeControl1: TMMVolumeControl;
  59.     MMWaveIn: TMMWaveIn;
  60.     MMRingBuffer1: TMMRingBuffer;
  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.   private
  70.     procedure CheckBTState;
  71.   public
  72.     { Public declarations }
  73.   end;
  74. var
  75.   AVSetForm: TAVSetForm;
  76. implementation
  77. uses
  78.   RealMessengerUnit;
  79.   
  80. {$R *.dfm}
  81. procedure TAVSetForm.CheckBTState;
  82. var
  83.   SysDev: TSysDevEnum;
  84.   iLoop:Integer;
  85. begin
  86.   BTPrev.Enabled:=NoteBook1.PageIndex>0;
  87.   BTNext.Enabled:=NoteBook1.PageIndex<NoteBook1.Pages.Count-1;
  88.   case NoteBook1.PageIndex of
  89.     1:begin
  90.         if VideoCap.DriverOpen then
  91.         begin
  92.           VideoCap.VideoPreview:=False;
  93.           VideoCap.StopCapture;
  94.         end;
  95.         SysDev:= TSysDevEnum.Create(CLSID_VideoInputDeviceCategory);
  96.         if SysDev.CountFilters=0 then
  97.         begin
  98.           MessageBox(Handle,'没有在您的机器上检测到任何视频捕获设备!','提示',MB_ICONINFORMATION);
  99.           NoteBook1.PageIndex:=3;
  100.           CheckBTState;
  101.           exit;
  102.         end;
  103.         CBCamera.Clear;
  104.         for iLoop:=0 to SysDev.CountFilters-1 do
  105.         begin
  106.           CBCamera.Items.Add(SysDev.Filters[iLoop].FriendlyName);
  107.         end;
  108.         CBCamera.ItemIndex:=0;
  109.         SysDev.Free;        
  110.       end;
  111.     2:begin
  112.         VideoCap.DriverIndex:=CBCamera.ItemIndex;
  113.         VideoCap.VideoPreview:=True;
  114.         FillBitmapStruc;
  115.         VideoCap.SetBitmapInfo(@FInInfo,SizeOf(BITMAPINFO));
  116.         VideoCap.StartCapture;
  117.       end;
  118.     3:begin
  119.         if VideoCap.DriverOpen then
  120.         begin
  121.           VideoCap.VideoPreview:=False;
  122.           VideoCap.StopCapture;
  123.         end;
  124.       end;
  125.     4:begin
  126.         try
  127.           MMWaveOut.Stop;
  128.           MMWaveOut.Close;
  129.         except
  130.         end;
  131.         if MMDevice.DeviceCount=0 then
  132.         begin
  133.           MessageBox(Handle,'没有在您的机器上检测到任何声音设备!','提示',MB_ICONINFORMATION);
  134.           NoteBook1.PageIndex:=7;
  135.           CheckBTState;
  136.           exit;
  137.         end;
  138.         MMDevice.GetDeviceList(CBMic.Items,True);
  139.         MMDevice.GetDeviceList(CBSpeaker.Items,True);
  140.         CBMic.ItemIndex:=0;
  141.         CBSpeaker.ItemIndex:=0;
  142.       end;
  143.     5:begin
  144.         try
  145.           MMWaveIn.Stop;
  146.           MMWaveIn.Close;
  147.         except
  148.         end;
  149.         MMDevice.DeviceID:=CBSpeaker.ItemIndex;
  150.         MMWaveOut.DeviceID:=CBSpeaker.ItemIndex;
  151.         MMWaveIn.DeviceID:=CBMic.ItemIndex;
  152.       end;
  153.     6:begin
  154.         try
  155.           MMWaveOut.Stop;
  156.           MMWaveOut.Close;
  157.         except
  158.         end;
  159.         BTNext.Caption:='下一步(&N)';
  160.         MMDevice.DeviceID:=CBMic.ItemIndex;
  161.         MMWaveOut1.DeviceID:=CBSpeaker.ItemIndex;
  162.         MMWaveIn.DeviceID:=CBMic.ItemIndex;
  163.         MMWaveIn.Start;
  164.         MMWaveOut1.PWaveFormat:=MMWaveIn.PWaveFormat;
  165.         MMWaveOut1.Start;
  166.       end;
  167.     7:begin
  168.         try
  169.           MMWaveIn.Stop;
  170.           MMWaveIn.Close;
  171.         except
  172.         end;
  173.         BTNext.Caption:='完成';
  174.         BTNext.Enabled:=True;
  175.       end;
  176.   end;
  177. end;
  178. procedure TAVSetForm.BTNextClick(Sender: TObject);
  179. var
  180.   TempReg:TRegistry;
  181. begin
  182.   if NoteBook1.PageIndex=7 then
  183.   begin
  184.     TempReg:=TRegistry.Create;
  185.     try
  186.       TempReg.RootKey:=HKEY_LOCAL_MACHINE;
  187.       if TempReg.OpenKey(AppKey+'AV', True) then
  188.       begin
  189.         if (CBCamera.ItemIndex>=0) and (CBCamera.ItemIndex<CBCamera.Items.Count) then TempReg.WriteInteger('VideoDevice',CBCamera.ItemIndex);
  190.         if (CBMic.ItemIndex>=0) and (CBMic.ItemIndex<CBMic.Items.Count) then TempReg.WriteInteger('MicDevice',CBMic.ItemIndex);
  191.         if (CBSpeaker.ItemIndex>=0) and (CBSpeaker.ItemIndex<CBSpeaker.Items.Count) then TempReg.WriteInteger('SpeakerDevice',CBSpeaker.ItemIndex);
  192.       end;
  193.     finally
  194.       TempReg.Free;
  195.     end;
  196.     Close;
  197.   end
  198.   else
  199.   begin
  200.     NoteBook1.PageIndex:=NoteBook1.PageIndex+1;
  201.     CheckBTState;
  202.   end;
  203. end;
  204. procedure TAVSetForm.BTPrevClick(Sender: TObject);
  205. begin
  206.   NoteBook1.PageIndex:=NoteBook1.PageIndex-1;
  207.   CheckBTState;
  208. end;
  209. procedure TAVSetForm.BTCancelClick(Sender: TObject);
  210. begin
  211.   Close;
  212. end;
  213. procedure TAVSetForm.BTTestSpeakerClick(Sender: TObject);
  214. begin
  215.   if BTTestSpeaker.Caption='停止(&S)' then
  216.   begin
  217.     MMWaveOut.Stop;
  218.   end
  219.   else
  220.   begin
  221.     MMWaveFile.LoadFromFile(ResPath+'/Sound/TestSnd.wav');
  222.     MMWaveOut.Start;
  223.   end;
  224. end;
  225. procedure TAVSetForm.MMWaveOutStart(Sender: TObject);
  226. begin
  227.     BTTestSpeaker.Caption:='停止(&S)';
  228. end;
  229. procedure TAVSetForm.MMWaveOutStop(Sender: TObject);
  230. begin
  231.     BTTestSpeaker.Caption:='单击测试扬声器(&T)';
  232. end;
  233. procedure TAVSetForm.MMWaveInBufferReady(Sender: TObject;
  234.   lpWaveHdr: PWaveHdr);
  235. begin
  236.   MMRingBuffer1.PutBuffer(lpWaveHdr.lpData,lpWaveHdr.dwBufferLength,lpWaveHdr.dwUser,lpWaveHdr.dwFlags);
  237. end;
  238. end.