请问Delphi 怎样直接播放麦克风声音
也就是说对着麦克风讲话的时候,声卡就直接播放讲话的声音了。

解决方案 »

  1.   

    不使用任何控件的录音程序 
    发表:不详   阅读:449次  关键字:不详   字体:[大 中 小] unit Unit1;interfaceuses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs,mmsystem, StdCtrls;type
    TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button4: TButton;
    SaveDialog1: TSaveDialog;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;var
    Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
      mciSendString('close p1',0,0,0);
      mciSendStringA('open new type WAVEAudio alias p1',0,0,0);
      mciSendString('record p1',0,0,0);
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      mciSendString('stop p1',0,0,0);
    end;procedure TForm1.Button3Click(Sender: TObject);
    begin
      mciSendString('play p1',0,0,0);
    end;procedure TForm1.Button4Click(Sender: TObject);
    var s:string;
    begin
      if SaveDialog1.Execute then
        s:='save p1 '+SaveDialog1.filename;
      mciSendString(pchar(s),0,0,0);
    end;end. 
      

  2.   

    直接播放回放,不知是不是你要的控件,ACMWaveIn1,ACMWaveOut1,IdUDPClient1,IdUDPServer1,
    type
      TGSM610 = packed record
        wFormatTag: Word;       { format type }
        nChannels: Word;        { number of channels (i.e. mono, stereo, etc.) }
        nSamplesPerSec: DWORD;  { sample rate }
        nAvgBytesPerSec: DWORD; { for buffer estimation }
        nBlockAlign: Word;      { block size of data }
        wBitsPerSample: Word;   { number of bits per sample of mono data }
        cbSize: Word;           { the count in bytes of the size of }
        wSamplesPerBlock:word;
      end;var
        gsm610: TGSM610;
        format: Pointer;
        i     : integer;
    begin
      with gsm610 do
      begin
        wFormatTag:=$31;
        nChannels:=1;
        wBitsPerSample:=0;
        nSamplesPerSec:=8000;
        nBlockAlign:=65;
        nAvgBytesPerSec:=1625;
        cbSize:=2;
        wSamplesPerBlock:=$140;
      end;
      format:=@gsm610;
      ACMWaveOut1.Open(format);
      ACMWaveIn1.Open(format);
      IdUDPClient1.Active := true;
      IdUDPServer1.Active := true;procedure TSysDetectFrm.ACMWaveIn1Data(data: Pointer; size: Integer);
    var
      mdata:array[1..10000] of char;
      k:integer;
    begin
      for k:=1 to size do
        mdata[k]:=pchar(dword(data)+dword(k-1))^;
      IdUDPClient1.SendBuffer(mData,Size);
    end;procedure TSysDetectFrm.IdUDPServer1UDPRead(Sender: TObject;
      AData: TStream; ABinding: TIdSocketHandle);
    var
      mdata:array[1..10000] of char;
      data:Pchar;
      Tmp : integer;
    begin
        Adata.ReadBuffer(mdata,Adata.Size);
        data:=pchar(dword(@mdata));
        ACMWaveOut1.PlayBack(data,Adata.Size);
    end;类似于QQ,MSN,系统硬件检测中的回放效果...