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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? dxsounds.pas

?? 雙人對戰(zhàn) 俄羅斯訪快
?? PAS
?? 第 1 頁 / 共 5 頁
字號:

  inherited Destroy;

  CloseHandle(FCapture.FNotifyEvent);
  FCapture.FNotifyThread := nil;

  if Assigned(FCapture.FOnFilledBuffer) then FCapture.Stop;
end;

procedure TSoundCaptureStreamNotify.Execute;
begin
  while WaitForSingleObject(FCapture.FNotifyEvent, FSleepTime)=WAIT_TIMEOUT do
  begin
    Synchronize(Update);
  end;
end;

procedure TSoundCaptureStreamNotify.Update;
begin
  if FCapture.FilledSize>0 then
  begin
    try
      FCapture.DoFilledBuffer;
    except
      on E: Exception do
      begin
        Application.HandleException(E);
        SetEvent(FCapture.FNotifyEvent);
      end;
    end;
  end;
end;

constructor TSoundCaptureStream.Create(GUID: PGUID);
const
  SamplesPerSecList: array[0..6] of Integer = (8000, 11025, 22050, 33075, 44100, 48000, 96000);
  BitsPerSampleList: array[0..3] of Integer = (8, 16, 24, 32);
  ChannelsList: array[0..1] of Integer = (1, 2);
var
  ASamplesPerSec, ABitsPerSample, AChannels: Integer;
  dscbd: TDSCBufferDesc;
  TempBuffer: IDirectSoundCaptureBuffer;
  Format: TWaveFormatEx;
begin
  inherited Create;
  FBufferLength := 1000;
  FSupportedFormats := TSoundCaptureFormats.Create;

  if DXDirectSoundCaptureCreate(GUID, FCapture, nil)<>DS_OK then
    raise ESoundCaptureStreamError.CreateFmt(SCannotInitialized, [SDirectSoundCapture]);

  {  The supported format list is acquired.  }
  for ASamplesPerSec:=Low(SamplesPerSecList) to High(SamplesPerSecList) do
    for ABitsPerSample:=Low(BitsPerSampleList) to High(BitsPerSampleList) do
      for AChannels:=Low(ChannelsList) to High(ChannelsList) do
      begin
        {  Test  }
        MakePCMWaveFormatEx(Format, SamplesPerSecList[ASamplesPerSec], BitsPerSampleList[ABitsPerSample], ChannelsList[AChannels]);

        FillChar(dscbd, SizeOf(dscbd), 0);
        dscbd.dwSize := SizeOf(dscbd);
        dscbd.dwBufferBytes := Format.nAvgBytesPerSec;
        dscbd.lpwfxFormat := @Format;

        {  If the buffer can be made,  the format of present can be used.  }
        if FCapture.CreateCaptureBuffer(dscbd, TempBuffer, nil)=DS_OK then
        begin
          TempBuffer := nil;
          with TSoundCaptureFormat.Create(FSupportedFormats) do
          begin
            FSamplesPerSec := Format.nSamplesPerSec;
            FBitsPerSample := Format.wBitsPerSample;
            FChannels := Format.nChannels;
          end;
        end;
      end;
end;

destructor TSoundCaptureStream.Destroy;
begin
  Stop;
  FSupportedFormats.Free;
  inherited Destroy;
end;

procedure TSoundCaptureStream.DoFilledBuffer;
begin
  if Assigned(FOnFilledBuffer) then FOnFilledBuffer(Self);
end;

class function TSoundCaptureStream.Drivers: TDirectXDrivers;
begin
  Result := EnumDirectSoundCaptureDrivers;
end;

function TSoundCaptureStream.GetFilledSize: Integer;
begin
  Result := GetReadSize;
end;

function TSoundCaptureStream.GetReadSize: Integer;
var
  CapturePosition, ReadPosition: DWORD;
begin
  if FBuffer.GetCurrentPosition(CapturePosition, ReadPosition)=DS_OK then
  begin
    if FBufferPos<=ReadPosition then
      Result := ReadPosition - FBufferPos
    else
      Result := FBufferSize - FBufferPos + ReadPosition;
  end else
    Result := 0;
end;

function TSoundCaptureStream.ReadWave(var Buffer; Count: Integer): Integer;
var
  Size: Integer;
  Data1, Data2: Pointer;
  Data1Size, Data2Size: DWORD;
  C: Byte;
begin
  if not FCapturing then
    Start;

  Result := 0;
  while Result<Count do
  begin
    Size := Min(Count-Result, GetReadSize);
    if Size>0 then
    begin
      if FBuffer.Lock(FBufferPos, Size, Data1, Data1Size, Data2, Data2Size, 0)=DS_OK then
      begin
        Move(Data1^, Pointer(Integer(@Buffer)+Result)^, Data1Size);
        Result := Result + Integer(Data1Size);

        if Data2<>nil then
        begin
          Move(Data2^, Pointer(Integer(@Buffer)+Result)^, Data2Size);
          Result := Result + Integer(Data1Size);
        end;

        FBuffer.UnLock(Data1, Data1Size, Data2, Data2Size);
        FBufferPos := (FBufferPos + Data1Size + Data2Size) mod FBufferSize;
      end else
        Break;
    end;
    if Result<Count then Sleep(50);
  end;

  case Format^.wBitsPerSample of
     8: C := $80;
    16: C := $00;
  else
    C := $00;
  end;

  FillChar(Pointer(Integer(@Buffer)+Result)^, Count-Result, C);
  Result := Count;
end;

procedure TSoundCaptureStream.SetBufferLength(Value: Integer);
begin
  FBufferLength := Max(Value, 0);
end;

procedure TSoundCaptureStream.SetOnFilledBuffer(Value: TNotifyEvent);
begin
  if CompareMem(@TMethod(FOnFilledBuffer), @TMethod(Value), SizeOf(TMethod)) then Exit;

  if FCapturing then
  begin
    if Assigned(FOnFilledBuffer) then
      FNotifyThread.Free;

    FOnFilledBuffer := Value;

    if Assigned(FOnFilledBuffer) then
    begin
      FNotifyThread := TSoundCaptureStreamNotify.Create(Self);
      FNotifyThread.Resume;
    end;
  end else
    FOnFilledBuffer := Value;
end;

procedure TSoundCaptureStream.Start;
var
  dscbd: TDSCBufferDesc;
begin
  Stop;
  try
    FCapturing := True;

    FormatSize := SizeOf(TWaveFormatEx);
    with FSupportedFormats[CaptureFormat] do
      MakePCMWaveFormatEx(Format^, SamplesPerSec, BitsPerSample, Channels);

    FBufferSize := Max(MulDiv(Format^.nAvgBytesPerSec, FBufferLength, 1000), 8000);

    FillChar(dscbd, SizeOf(dscbd), 0);
    dscbd.dwSize := SizeOf(dscbd);
    dscbd.dwBufferBytes := FBufferSize;
    dscbd.lpwfxFormat := Format;

    if FCapture.CreateCaptureBuffer(dscbd, FBuffer, nil)<>DS_OK then
      raise ESoundCaptureStreamError.CreateFmt(SCannotMade, [SDirectSoundCaptureBuffer]);

    FBufferPos := 0;

    FBuffer.Start(DSCBSTART_LOOPING);

    if Assigned(FOnFilledBuffer) then
    begin
      FNotifyThread := TSoundCaptureStreamNotify.Create(Self);
      FNotifyThread.Resume;
    end;
  except
    Stop;
    raise;
  end;
end;

procedure TSoundCaptureStream.Stop;
begin
  if FCapturing then
  begin
    FNotifyThread.Free;
    FCapturing := False;
    if FBuffer<>nil then
      FBuffer.Stop;
    FBuffer := nil;
  end;
end;

{  TSoundEngine  }

constructor TSoundEngine.Create(ADSound: TDirectSound);
begin
  inherited Create;
  FDSound := ADSound;
  FEnabled := True;


  FEffectList := TList.Create;
  FTimer := TTimer.Create(nil);
  FTimer.Interval := 500;
  FTimer.OnTimer := TimerEvent;
end;

destructor TSoundEngine.Destroy;
begin
  Clear;
  FTimer.Free;
  FEffectList.Free;
  inherited Destroy;
end;

procedure TSoundEngine.Clear;
var
  i: Integer;
begin
  for i:=EffectCount-1 downto 0 do
    Effects[i].Free;
  FEffectList.Clear;
end;

procedure TSoundEngine.EffectFile(const Filename: string; Loop, Wait: Boolean);
var
  Stream : TFileStream;
begin
  Stream :=TFileStream.Create(Filename, fmOpenRead);
  try
    EffectStream(Stream, Loop, Wait);
  finally
    Stream.Free;
  end;
end;

procedure TSoundEngine.EffectStream(Stream: TStream; Loop, Wait: Boolean);
var
  Wave: TWave;
begin
  Wave := TWave.Create;
  try
    Wave.LoadfromStream(Stream);
    EffectWave(Wave, Loop, Wait);
  finally
    Wave.Free;
  end;
end;

procedure TSoundEngine.EffectWave(Wave: TWave; Loop, Wait: Boolean);
var
  Buffer: TDirectSoundBuffer;
begin
  if not FEnabled then Exit;

  if Wait then
  begin
    Buffer := TDirectSoundBuffer.Create(FDSound);
    try
      Buffer.LoadFromWave(Wave);
      Buffer.Play(False);
      while Buffer.Playing do
        Sleep(1);
    finally
      Buffer.Free;
    end;
  end else
  begin
    Buffer := TDirectSoundBuffer.Create(FDSound);
    try
      Buffer.LoadFromWave(Wave);
      Buffer.Play(Loop);
    except
      Buffer.Free;
      raise;
    end;
    FEffectList.Add(Buffer);
  end;
end;

function TSoundEngine.GetEffect(Index: Integer): TDirectSoundBuffer;
begin
  Result := TDirectSoundBuffer(FEffectList[Index]);
end;

function TSoundEngine.GetEffectCount: Integer;
begin
  Result := FEffectList.Count;
end;

procedure TSoundEngine.SetEnabled(Value: Boolean);
var
  i: Integer;
begin
  for i:=EffectCount-1 downto 0 do
    Effects[i].Free;
  FEffectList.Clear;

  FEnabled := Value;
  FTimer.Enabled := Value;
end;

procedure TSoundEngine.TimerEvent(Sender: TObject);
var
  i: Integer;
begin
  for i:=EffectCount-1 downto 0 do
    if not TDirectSoundBuffer(FEffectList[i]).Playing then
    begin
      TDirectSoundBuffer(FEffectList[i]).Free;
      FEffectList.Delete(i);
    end;
end;

{  TCustomDXSound  }

type
  TDXSoundDirectSound = class(TDirectSound)
  private
    FDXSound: TCustomDXSound;
  protected
    procedure DoRestoreBuffer; override;
  end;

procedure TDXSoundDirectSound.DoRestoreBuffer;
begin
  inherited DoRestoreBuffer;
  FDXSound.Restore;
end;

constructor TCustomDXSound.Create(AOwner: TComponent);
begin
  FNotifyEventList := TList.Create;
  inherited Create(AOwner);
  FAutoInitialize := True;
  Options := [];
end;

destructor TCustomDXSound.Destroy;
begin
  Finalize;
  NotifyEventList(dsntDestroying);
  FNotifyEventList.Free;
  inherited Destroy;
end;

type
  PDXSoundNotifyEvent = ^TDXSoundNotifyEvent;

procedure TCustomDXSound.RegisterNotifyEvent(NotifyEvent: TDXSoundNotifyEvent);
var
  Event: PDXSoundNotifyEvent;
begin
  UnRegisterNotifyEvent(NotifyEvent);

  New(Event);
  Event^ := NotifyEvent;
  FNotifyEventList.Add(Event);

  if Initialized then
  begin
    NotifyEvent(Self, dsntInitialize);
    NotifyEvent(Self, dsntRestore);
  end;
end;

procedure TCustomDXSound.UnRegisterNotifyEvent(NotifyEvent: TDXSoundNotifyEvent);
var
  Event: PDXSoundNotifyEvent;
  i: Integer;
begin
  for i:=0 to FNotifyEventList.Count-1 do
  begin
    Event := FNotifyEventList[i];
    if (TMethod(Event^).Code = TMethod(NotifyEvent).Code) and
      (TMethod(Event^).Data = TMethod(NotifyEvent).Data) then
    begin
      Dispose(Event);
      FNotifyEventList.Delete(i);

      if Initialized then
        NotifyEvent(Self, dsntFinalize);

      Break;
    end;
  end;
end;

procedure TCustomDXSound.NotifyEventList(NotifyType: TDXSoundNotifyType);
var
  i: Integer;
begin
  for i:=FNotifyEventList.Count-1 downto 0 do
    PDXSoundNotifyEvent(FNotifyEventList[i])^(Self, NotifyType);
end;

procedure TCustomDXSound.FormWndProc(var Message: TMessage; DefWindowProc: TWndMethod);
begin
  case Message.Msg of
    WM_CREATE:
        begin
          DefWindowProc(Message);
          SetForm(FForm);
          Exit;
        end;
  end;
  DefWindowProc(Message);
end;

class function TCustomDXSound.Drivers: TDirectXDrivers;
begin
  Result := EnumDirectSoundDrivers;
end;

procedure TCustomDXSound.DoFinalize;
begin
  if Assigned(FOnFinalize) then FOnFinalize(Self);
end;

procedure TCustomDXSound.DoInitialize;
begin
  if Assigned(FOnInitialize) then FOnInitialize(Self);
end;

procedure TCustomDXSound.DoInitializing;
begin
  if Assigned(FOnInitializing) then FOnInitializing(Self);
end;

procedure TCustomDXSound.DoRestore;
begin
  if Assigned(FOnRestore) then FOnRestore(Self);
end;

procedure TCustomDXSound.Finalize;
begin
  if FInternalInitialized then
  begin
    try
      FSubClass.Free; FSubClass := nil;

      try
        if FCalledDoInitialize then
        begin
          FCalledDoInitialize := False;
          DoFinalize;
        end;
      finally
        NotifyEventList(dsntFinalize);
      end;
    finally
      FInitialized := False;
      FInternalInitialized := False;

      SetOptions(FOptions);

      FPrimary.Free; FPrimary := nil;
      FDSound.Free;  FDSound := nil;
    end;
  end;
end;

procedure TCustomDXSound.Initialize;
const
  PrimaryDesc: TDSBufferDesc = (
      dwSize: SizeOf (PrimaryDesc);
      dwFlags: DSBCAPS_PRIMARYBUFFER);
var
  Component: TComponent;
begin
  Finalize;

  Component := Owner;
  while (Component<>nil) and (not (Component is TCustomForm)) do
    Component := Component.Owner;
  if Component=nil then
    raise EDXSoundError.Create(SNoForm);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久久国产精品影院| 麻豆精品一二三| 国产成人啪免费观看软件| 国产一区二区三区| 国产激情视频一区二区三区欧美| 色综合激情五月| 中文字幕在线不卡| 一本大道久久a久久精品综合| 久久青草国产手机看片福利盒子| 日韩av中文在线观看| 欧美日韩国产首页| 日韩经典一区二区| 精品蜜桃在线看| 国产精品一区二区免费不卡 | 老司机精品视频在线| 色综合色狠狠综合色| 亚洲人xxxx| 8v天堂国产在线一区二区| 日韩高清中文字幕一区| 9191精品国产综合久久久久久 | 日韩午夜在线播放| 国产成人综合网站| 亚洲欧美综合另类在线卡通| 色婷婷综合激情| 麻豆成人综合网| 亚洲欧美日韩久久| 日韩欧美国产小视频| 久久成人久久爱| 国产精品日韩精品欧美在线| 亚洲欧洲av色图| av网站免费线看精品| 国产亚洲欧洲997久久综合| 国产成人亚洲综合a∨婷婷图片 | 国产精品久久久久影院色老大| 国产欧美一区二区精品久导航 | 91丨porny丨最新| 无码av免费一区二区三区试看| 国产亚洲精久久久久久| 欧美日韩国产在线播放网站| 国产精品中文字幕一区二区三区| 亚洲综合久久av| 国产视频亚洲色图| 日韩一区二区中文字幕| 久久精品国产99| 日本一区二区三级电影在线观看| 欧美精品电影在线播放| 91婷婷韩国欧美一区二区| 九九在线精品视频| 亚洲福中文字幕伊人影院| 亚洲精品免费在线观看| 中文字幕av不卡| 欧美激情综合五月色丁香小说| 日韩一卡二卡三卡四卡| 欧美一区二区日韩| 欧美精品亚洲一区二区在线播放| 91精彩视频在线观看| 91理论电影在线观看| av电影一区二区| 不卡一区二区中文字幕| 国产电影一区在线| 极品尤物av久久免费看| 国产精品一区二区果冻传媒| 国产高清在线精品| 成人免费av资源| 91香蕉国产在线观看软件| 色婷婷av一区二区三区软件| 欧美亚洲自拍偷拍| 91精品婷婷国产综合久久竹菊| 9191成人精品久久| 精品国产亚洲在线| 国产精品欧美经典| 婷婷夜色潮精品综合在线| 日本aⅴ免费视频一区二区三区 | 日韩一区二区在线播放| 欧美揉bbbbb揉bbbbb| 欧美日韩中字一区| 欧美日韩午夜精品| 日韩一区二区三区精品视频| 91精品在线免费| 欧美日韩国产在线观看| 91精品国产综合久久蜜臀 | 秋霞电影一区二区| 六月婷婷色综合| 91网上在线视频| 国产欧美精品在线观看| 亚洲国产成人精品视频| 国产精品综合二区| 欧美老肥妇做.爰bbww| 国产欧美一区二区精品性| 蜜臀久久99精品久久久画质超高清| 成人va在线观看| 成人99免费视频| 日韩一区二区三区观看| 91精品国产91久久久久久一区二区| 91精品国产入口| 一区二区三区四区高清精品免费观看| 九九九久久久精品| 欧美一级在线观看| 午夜精品久久久久久久99水蜜桃| 91在线精品一区二区三区| 欧美精品一区二区精品网| 日韩精品一区第一页| 欧美日韩精品一区二区三区 | 国产午夜久久久久| 国产制服丝袜一区| 久久精品日产第一区二区三区高清版 | 久久婷婷综合激情| 国产91精品一区二区麻豆亚洲| 久久伊99综合婷婷久久伊| 精品一区二区三区香蕉蜜桃| 91麻豆精品国产91久久久久久久久| 亚洲人被黑人高潮完整版| 成人国产精品免费网站| 精品视频在线视频| 亚洲精品乱码久久久久| a4yy欧美一区二区三区| 国产喷白浆一区二区三区| 国产剧情一区二区| 日本一区二区三区国色天香| 国产高清在线观看免费不卡| 中文字幕精品在线不卡| 91网站黄www| 久久99精品久久久久婷婷| 最新日韩av在线| 欧美一区二区精品久久911| 国产一区二区三区不卡在线观看 | 欧美男生操女生| 国内精品免费**视频| 亚洲欧美激情在线| 欧美成人官网二区| 色欧美片视频在线观看在线视频| 日本欧美在线观看| 亚洲精品综合在线| 久久你懂得1024| 91九色02白丝porn| 国产一区二区导航在线播放| 亚洲狼人国产精品| 国产片一区二区三区| 欧美大黄免费观看| 在线播放亚洲一区| 99re成人在线| 日本不卡视频在线| 欧美一区二区黄色| 欧美日韩卡一卡二| 在线看一区二区| 国产成人超碰人人澡人人澡| 日韩成人一区二区三区在线观看| 国产精品高潮呻吟久久| 久久久91精品国产一区二区精品| 欧美日韩一二三| 欧美美女一区二区三区| 在线亚洲+欧美+日本专区| 91天堂素人约啪| eeuss国产一区二区三区| 国产a精品视频| 成人永久aaa| 99久久久免费精品国产一区二区| 国产精品一区二区三区网站| 国产福利电影一区二区三区| 激情欧美一区二区三区在线观看| 人人狠狠综合久久亚洲| 国精产品一区一区三区mba桃花 | 日本一区二区免费在线| 国产精品天美传媒沈樵| 亚洲天堂免费看| 日韩不卡一区二区三区| 国产精品自在欧美一区| 成人免费三级在线| 欧美日韩午夜在线视频| 精品国产乱码久久久久久影片| 精品不卡在线视频| 综合在线观看色| 久久成人av少妇免费| 99免费精品视频| 欧美一区2区视频在线观看| 久久精品在线免费观看| 亚洲二区在线观看| 国产激情一区二区三区桃花岛亚洲| 色狠狠一区二区三区香蕉| 欧美精选一区二区| 国产精品短视频| 黄页网站大全一区二区| 91激情五月电影| 国产精品久久久久久亚洲毛片| 日韩成人dvd| 91福利小视频| 国产欧美精品一区| 麻豆国产欧美日韩综合精品二区| 91麻豆文化传媒在线观看| 国产日韩欧美激情| 精品一区二区在线播放| 欧美日韩日日骚| 亚洲一二三四在线| 91麻豆国产福利在线观看| 日本一区二区三级电影在线观看| 麻豆精品视频在线观看| 欧美一卡二卡三卡四卡| 日韩国产精品久久久久久亚洲| 欧美日韩亚洲综合一区二区三区| 亚洲情趣在线观看|