亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? soundin.pas

?? 灰鴿子VIP1.2經典源代碼
?? PAS
字號:
unit soundin;
{-----------------------------------------------------------------------------
The contents of this file are subject to the Mozilla Public License
Version 1.1 (the "License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/MPL-1.1.html

Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for
the specific language governing rights and limitations under the License.

The Original Code is: ACMIn.pas, released August 28, 2000.

The Initial Developer of the Original Code is Peter Morris (pete@stuckindoors.com),
Portions created by Peter Morris are Copyright (C) 2000 Peter Morris.
All Rights Reserved.

Purpose of file:
Allows you to open an audio-input stream, in almost any format

Contributor(s):
None as yet


Last Modified: September 14, 2000
Current Version: 1.10

You may retrieve the latest version of this file at http://www.stuckindoors.com/dib

Known Issues:
TrueSpeech doesn't work for some reason.
-----------------------------------------------------------------------------}

//November 2nd, 2000
//Pete M
//I was stupidly freeing the wav header data before calling an event, this
//caused intermittent Access Violations.  This is now fixed.

//adapted and changed to build good voip component by remko weingarten


//remko@prinsengracht.org    date october 2002



interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  soundconverter, MMSystem, headers;

type
  TACMBufferCount = 2..64;
    PMixDetails = ^TMixDetails;
    TMixDetails = record
                 Destination,Source : Word;
                 Name : string;
                 VolControlID,MuteControlID, MeterControlID : dword;
                 Left, Right, Meter : Word;
                 CtrlType : Word;
                 Mute, Mono, Speakers, Available : boolean;
                 Next:PMixDetails;
                end;

  TBufferFullEvent = procedure(Sender : TObject; Data : Pointer; Size:longint) of object;
  EACMIn = Class(Exception);
  TACMIn = class(TComponent)


  private
    FActive                   : Boolean;
    FBufferList               : TList;
    FBufferSize               : DWord;
    FFormat                   : TACMWaveFormat;
    FNumBuffers               : TACMBufferCount;
    FWindowHandle             : HWnd;
    FOnBufferFull             : TBufferFullEvent;
    procedure DoBufferFull(Header : PWaveHdr);
    procedure SetBufferSize(const Value: DWord);
    procedure SetNumBuffers(const Value: TACMBufferCount);

  protected
    function  NewHeader : PWaveHDR;
    procedure DisposeHeader(Header : PWaveHDR);
    procedure WndProc(Var Message : TMessage);
  public
      FWaveInHandle             : HWaveIn;
    constructor Create(AOwner : TComponent); override;
    destructor Destroy; override;
    procedure Open(aFormat : TACMWaveFormat);
    procedure Close;
    procedure RaiseException(const aMessage : String; Result : Integer);
     property Active         : Boolean
        read FActive;
      property WindowHandle   : HWnd
        read FWindowHandle;
    published
      property BufferSize     : DWord
        read FBufferSize
        write SetBufferSize;
      property NumBuffers     : TACMBufferCount
        read FNumBuffers
        write SetNumBuffers;

      property OnBufferFull   : TBufferFullEvent
        read FOnBufferFull
        write FOnBufferFull;
 end;


implementation


constructor TACMIn.Create(AOwner:TComponent);
begin
 inherited;
 FBufferList := TList.Create;
 FActive := False;
 FBufferSize := 8192;
 FWaveInHandle := 0;
 FWindowHandle := AllocateHWND(WndProc);
 FNumBuffers := 4;
end;

procedure TACMIn.DoBufferFull(Header : PWaveHdr);
var
   Res                        : Integer;
   BytesRecorded              : Integer;
   Data                       : Pointer;
begin
  if Active then begin

    BytesRecorded:=header.dwBytesRecorded;

    if assigned(FOnBufferFull) then begin
      Getmem(Data, BytesRecorded);
      try
        move(header.lpData^,Data^,BytesRecorded);
        FOnBufferFull(Self, data, BytesRecorded); 
      finally
        Freemem(Data);
      end;
    end;

    Res := WaveInUnPrepareHeader(FWaveInHandle,Header,sizeof(TWavehdr));
    if Res <>0  then RaiseException('WaveIn-UnprepareHeader', Res);

    header.dwbufferlength:=FBufferSize;
    header.dwBytesRecorded:=0;
    header.dwUser:=0;
    header.dwflags:=0;
    header.dwloops:=0;
    FillMemory(Header.lpData,FBufferSize,0); //snap het nut er niet van...

    Res := WaveInPrepareHeader(FWaveInHandle,Header,sizeof(TWavehdr));
    if Res <> 0 then RaiseException('WaveIn-PrepareHeader', Res);

    Res:=WaveInAddBuffer(FWaveInHandle,Header,sizeof(TWaveHdr));
    if Res <> 0 then RaiseException('WaveInAddBuffer', Res);


   end else
    if not (csDestroying in ComponentState) then
      DisposeHeader(Header);

end;

procedure TACMIn.Open(aFormat : TACMWaveFormat);
var
  Res                         : Integer;
  J                           : Integer;
  Device                      : Integer;
  Params                      : Integer;
begin
  if Active then exit;
  FWaveInHandle := 0;
  FFormat := aFormat;


  if FFormat.Format.wFormatTag = 1 then begin
    Params := CALLBACK_WINDOW;
    Device := -1;
  end else begin
    Params := CALLBACK_WINDOW or WAVE_MAPPED;
    Device := 0;
  end;
if aformat.format.wFormatTag=1 then
  Res := WaveInOpen(@FWaveInHandle,Device,@aFormat.Format,FWindowHandle,0,CALLBACK_WINDOW ) else
Res := WaveInOpen(@FWaveInHandle,Device,@aFormat.Format,FWindowHandle,0,CALLBACK_WINDOW or WAVE_MAPPED);
  if Res <> 0 then RaiseException('WaveIn-Open',Res);

  for j:= 1 to FNumBuffers do NewHeader;

  Res := WaveInStart(FWaveInHandle);
  if Res <> 0 then RaiseException('WaveIn-Start',Res);

  FActive := True;
end;

destructor TACMIn.Destroy;
begin
  if Active then Close;
  FBufferList.Free;
  DeAllocateHWND(FWindowHandle);
  inherited;
end;

procedure TACMIn.RaiseException(const aMessage: String; Result: Integer);
begin
try
if factive then close;
except
end;
  case Result of
    ACMERR_NotPossible : Raise EACMIn.Create(aMessage + ' The requested operation cannot be performed.');
    ACMERR_BUSY : Raise EACMIn.Create(aMessage + ' The conversion stream is already in use.');
    ACMERR_UNPREPARED : Raise EACMIn.Create(aMessage + ' Cannot perform this action on a header that has not been prepared.');
    MMSYSERR_InvalFlag : Raise EACMIn.Create(aMessage + ' At least one flag is invalid.');
    MMSYSERR_InvalHandle : Raise EACMIn.Create(aMessage + ' The specified handle is invalid.');
    MMSYSERR_InvalParam : Raise EACMIn.Create(aMessage + ' At least one parameter is invalid.');
    MMSYSERR_NoMem : Raise EACMIn.Create(aMessage + ' The system is unable to allocate resources.');
    MMSYSERR_NoDriver : Raise EACMIn.Create(aMessage + ' A suitable driver is not available to provide valid format selections.');
    MMSYSERR_ALLOCATED : Raise EACMIn.Create(aMessage + ' The specified resource is already in use.');
    MMSYSERR_BADDEVICEID : Raise EACMIn.Create(aMessage + ' The specified resource does not exist.');
    WAVERR_BADFORMAT : Raise EACMIn.Create(aMessage + ' Unsupported audio format.');
    WAVERR_SYNC : Raise EACMIn.Create(aMessage + ' The specified device does not support asynchronous operation.');
  else
    if Result <> 0 then
      Raise EACMIn.Create(SysUtils.Format('%s raised an unknown error (code #%d)',[aMessage,Result]));
  end;

end;

procedure TACMIn.WndProc(var Message: TMessage);
begin
  case Message.Msg of
    MM_WIM_Data: DoBufferFull(PWaveHDR(Message.LParam));
  end;
inherited
end;


procedure TACMIn.Close;
var
  X                           : Integer;
begin
  if not Active then Exit;
  FActive := False;
  WaveInReset(FWaveInHandle);
  WaveInClose(FWaveInHandle);
  FWaveInHandle := 0;
  For X:=FBufferList.Count-1 downto 0 do DisposeHeader(PWaveHDR(FBufferList[X]));
end;

procedure TACMIn.SetBufferSize(const Value: DWord);
begin
  if Active then exit;
  FBufferSize := Value;
end;

function TACMIn.NewHeader: PWaveHDR;
var
  Res                         : Integer;
begin
  Getmem(Result, SizeOf(TWaveHDR));
  FBufferList.Add(Result);
  with Result^ do begin
    Getmem(lpData,FBufferSize);
    dwBufferLength := FBufferSize;
    dwBytesRecorded := 0;
    dwFlags := 0;
    dwLoops := 0;
    Res := WaveInPrepareHeader(FWaveInHandle,Result,sizeof(TWaveHDR));
    if Res <> 0 then RaiseException('WaveIn-PrepareHeader',Res);

    Res := WaveInAddBuffer(FWaveInHandle,Result,SizeOf(TWaveHDR));
    if Res <> 0 then RaiseException('WaveIn-AddBuffer',Res);
  end;
end;

procedure TACMIn.SetNumBuffers(const Value: TACMBufferCount);
begin
  if Active then exit;
  FNumBuffers := Value;
end;

procedure TACMIn.DisposeHeader(Header: PWaveHDR);
var
  X                           : Integer;
begin
  X := FBufferList.IndexOf(Header);
  if X < 0 then exit;
  Freemem(header.lpData);
  Freemem(header);
  FBufferList.Delete(X);
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91亚洲精品久久久蜜桃网站| 精品中文字幕一区二区| 欧美日本一区二区| 成人app下载| 国产麻豆视频精品| 精品一区二区三区av| 亚洲综合999| 欧美国产1区2区| 欧美精品一区二区三| 欧美一区二区三区播放老司机 | 2023国产精品视频| 欧美午夜影院一区| 在线观看91精品国产入口| 在线一区二区观看| 欧美在线看片a免费观看| 91理论电影在线观看| 色综合天天综合网天天狠天天 | 久久亚洲综合av| 精品久久久久99| 久久一区二区三区国产精品| 精品国产人成亚洲区| 欧美电影精品一区二区| 久久丝袜美腿综合| 国产精品嫩草影院av蜜臀| 亚洲视频小说图片| 亚洲一区二区三区国产| 日韩高清电影一区| 久久国产三级精品| 国产盗摄精品一区二区三区在线| 国产成人午夜99999| 国产a区久久久| 91女神在线视频| 欧美性色综合网| 欧美一级在线免费| 久久精品视频一区二区三区| 欧美国产精品一区| 一区二区三区av电影| 亚洲成a人片在线观看中文| 日本中文字幕一区二区视频| 免费观看日韩电影| 国产精品12区| 日本二三区不卡| 欧美一级免费观看| 国产精品色在线观看| 亚洲成人精品一区| 国产精品一区二区免费不卡| 一本色道a无线码一区v| 国产亚洲人成网站| 亚洲精品成人少妇| 美女久久久精品| 成人高清伦理免费影院在线观看| 欧美色图激情小说| 国产亚洲成aⅴ人片在线观看| |精品福利一区二区三区| 日韩高清一区二区| 91在线视频播放地址| 日韩一区二区三区三四区视频在线观看 | 国产色爱av资源综合区| 亚洲精品久久7777| 国内成人免费视频| 欧美日韩一本到| ...av二区三区久久精品| 日韩二区三区四区| 一本久道中文字幕精品亚洲嫩| 欧美电影精品一区二区| 国产精品国产精品国产专区不片| 日产精品久久久久久久性色| 色综合久久久网| 2023国产精品自拍| 日韩国产欧美视频| 欧美日韩在线电影| 成人免费在线视频观看| 精品一区二区三区在线观看国产| 在线免费观看日韩欧美| 欧美国产精品一区二区三区| 另类中文字幕网| 欧美色爱综合网| 亚洲欧美日韩一区二区| 福利一区在线观看| 精品国产乱码久久久久久免费| 亚欧色一区w666天堂| 色美美综合视频| 日韩毛片视频在线看| 成人动漫精品一区二区| 国产精品视频一二三| 国产在线一区观看| 精品国产一区二区三区av性色| 偷窥少妇高潮呻吟av久久免费| 91蜜桃在线免费视频| 久久精品夜色噜噜亚洲a∨| 麻豆高清免费国产一区| 欧美一三区三区四区免费在线看 | 国产69精品久久777的优势| 91精品国产高清一区二区三区| 亚洲a一区二区| 欧美日韩国产另类一区| 亚洲午夜电影在线| 欧美日韩一本到| 日韩制服丝袜av| 337p亚洲精品色噜噜狠狠| 亚洲国产精品久久人人爱蜜臀| 91亚洲精品一区二区乱码| 日韩理论片网站| 色哟哟国产精品| 性久久久久久久久| 日韩一区二区三区三四区视频在线观看 | 久久影音资源网| 国产酒店精品激情| 欧美国产精品一区| 色综合色狠狠天天综合色| 亚洲精品久久嫩草网站秘色| 欧美日韩一区精品| 免费av网站大全久久| 国产亚洲精品免费| 91成人网在线| 日韩1区2区3区| 久久久久久久久免费| av网站免费线看精品| 亚洲一区二区在线观看视频 | 国产精品一区久久久久| 国产精品毛片无遮挡高清| av午夜一区麻豆| 五月婷婷综合激情| 久久久久久一级片| 91无套直看片红桃| 日韩精品久久理论片| 久久精品人人做人人综合| 99re热这里只有精品视频| 亚洲超丰满肉感bbw| 久久久久综合网| 在线观看免费视频综合| 免费在线视频一区| 国产午夜精品一区二区三区嫩草| 色国产综合视频| 韩国v欧美v日本v亚洲v| 亚洲免费毛片网站| 2017欧美狠狠色| 欧美性感一区二区三区| 狠狠色综合播放一区二区| 亚洲色图欧美偷拍| 日韩欧美你懂的| 色综合激情久久| 国产一区二区三区蝌蚪| 亚洲午夜久久久久久久久久久| 久久一二三国产| 制服丝袜av成人在线看| 99国产欧美另类久久久精品| 久久99精品久久久久久久久久久久 | 国产二区国产一区在线观看| 亚洲国产日韩精品| 国产精品视频一区二区三区不卡| 7777精品伊人久久久大香线蕉的| www.欧美色图| 精一区二区三区| 天天综合天天做天天综合| 中文字幕一区二区在线观看| 欧美成人三级在线| 欧美日韩国产另类一区| 日本韩国一区二区三区视频| 国产精品一区二区无线| 国产在线视频一区二区| 五月天视频一区| 亚洲激情欧美激情| 国产精品不卡一区| 国产亚洲va综合人人澡精品| 日韩欧美激情一区| 91精品国产一区二区三区蜜臀 | 国产精品你懂的在线| 欧美va在线播放| 欧美剧情电影在线观看完整版免费励志电影| 国内精品国产成人国产三级粉色| 午夜视频一区二区| 午夜精品福利久久久| 亚洲一区二区中文在线| 一区二区欧美国产| 亚洲欧美国产高清| 亚洲伦理在线免费看| 国产精品久久久久精k8| 国产精品毛片无遮挡高清| 中文字幕高清不卡| 国产精品福利电影一区二区三区四区| 日韩区在线观看| 日韩三级中文字幕| 日韩精品一区二区三区视频播放| 欧美精品日日鲁夜夜添| 91.xcao| 精品国产在天天线2019| 日韩免费性生活视频播放| 日韩一卡二卡三卡| 26uuu另类欧美| 中文字幕av不卡| 亚洲视频一区在线| 亚洲一区二区三区在线播放| 亚洲国产精品视频| 蜜臀av一区二区| 国产激情偷乱视频一区二区三区| 成人免费观看视频| 91福利国产成人精品照片| 欧美电影一区二区| 精品国产麻豆免费人成网站|