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

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

?? dxsounds.pas

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

function TAudioStream.GetFrequency: Integer;
begin
  Result := FBuffer.Frequency;
end;

function TAudioStream.GetPan: Integer;
begin
  Result := FBuffer.Pan;
end;

function TAudioStream.GetPlayedSize: Integer;
begin
  if Playing then UpdatePlayedSize;
  Result := FPlayedSize;
end;

function TAudioStream.GetSize: Integer;
begin
  if WaveStream<>nil then
    Result := WaveStream.Size
  else
    Result := 0;
end;

function TAudioStream.GetVolume: Integer;
begin
  Result := FBuffer.Volume;
end;

procedure TAudioStream.UpdatePlayedSize;
var
  PlayPosition, PlayedSize: DWORD;
begin
  PlayPosition := FBuffer.Position;

  if FPlayBufferPos <= PlayPosition then
  begin
    PlayedSize := PlayPosition - FPlayBufferPos
  end else
  begin
    PlayedSize := PlayPosition + (FBufferSize - FPlayBufferPos);
  end;

  Inc(FPlayedSize, PlayedSize);

  FPlayBufferPos := PlayPosition;
end;

function TAudioStream.GetWriteSize: Integer;
var
  PlayPosition: DWORD;
  i: Integer;
begin
  PlayPosition := FBuffer.Position;

  if FBufferPos <= PlayPosition then
  begin
    Result := PlayPosition - FBufferPos
  end else
  begin
    Result := PlayPosition + (FBufferSize - FBufferPos);
  end;

  i := WaveStream.FilledSize;
  if i>=0 then Result := Min(Result, i);
end;

procedure TAudioStream.Play;
begin
  if not FPlaying then
  begin
    if WaveStream=nil then
      raise EAudioStreamError.Create(SWaveStreamNotSet);

    if Size=0 then Exit;

    FPlaying := True;
    try
      SetPosition(FPosition);
      if FAutoUpdate then
        FNotifyThread := TAudioStreamNotify.Create(Self);
    except
      Stop;
      raise;
    end;
  end;
end;

procedure TAudioStream.RecreateBuf;
var
  APlaying: Boolean;
  APosition: Integer;
  AFrequency: Integer;
  APan: Integer;
  AVolume: Integer;
begin
  APlaying := Playing;
     
  APosition := Position;
  AFrequency := Frequency;
  APan := Pan;
  AVolume := Volume;
                        
  SetWaveStream(WaveStream);

  Position := APosition;
  Frequency := AFrequency;
  Pan := APan;
  Volume := AVolume;
                  
  if APlaying then Play;
end;

procedure TAudioStream.SetAutoUpdate(Value: Boolean);
begin
  if FAutoUpdate<>Value then
  begin
    FAutoUpdate := Value;
    if FPlaying then
    begin
      if FNotifyThread<>nil then
      begin
        (FNotifyThread as TAudioStreamNotify).FStopOnTerminate := False;
        FNotifyThread.Free;
      end;

      if FAutoUpdate then
        FNotifyThread := TAudioStreamNotify.Create(Self);
    end;
  end;
end;

procedure TAudioStream.SetBufferLength(Value: Integer);
begin
  if Value<10 then Value := 10;
  if FBufferLength<>Value then
  begin
    FBufferLength := Value;
    if WaveStream<>nil then RecreateBuf;
  end;
end;

procedure TAudioStream.SetFrequency(Value: Integer);
begin
  FBuffer.Frequency := Value;
end;

procedure TAudioStream.SetLooped(Value: Boolean);
begin
  if FLooped<>Value then
  begin
    FLooped := Value;
    Position := Position;
  end;
end;

procedure TAudioStream.SetPan(Value: Integer);
begin
  FBuffer.Pan := Value;
end;

procedure TAudioStream.SetPlayedSize(Value: Integer);
begin
  if Playing then UpdatePlayedSize;
  FPlayedSize := Value;
end;

procedure TAudioStream.SetPosition(Value: Integer);
begin
  if WaveStream=nil then
    raise EAudioStreamError.Create(SWaveStreamNotSet);

  Value := Max(Min(Value, Size-1), 0);
  Value := Value div Format^.nBlockAlign * Format^.nBlockAlign;

  FPosition := Value;

  if Playing then
  begin
    try
      FBuffer.Stop;

      FBufferPos := 0;
      FPlayBufferPos := 0;
      FWritePosition := Value;

      WriteWave(FBufferSize);

      FBuffer.Position := 0;
      FBuffer.Play(True);
    except
      Stop;
      raise;
    end;
  end;
end;

procedure TAudioStream.SetVolume(Value: Integer);
begin
  FBuffer.Volume := Value;
end;

procedure TAudioStream.SetWaveStream(Value: TCustomWaveStream);
var
  BufferDesc: TDSBufferDesc;
begin
  Stop;

  FWaveStream := nil;
  FBufferPos := 0;
  FPosition := 0;
  FWritePosition := 0;

  if (Value<>nil) and (FBufferLength>0) then
  begin
    FBufferSize := FBufferLength * Integer(Value.Format^.nAvgBytesPerSec) div 1000;

    FillChar(BufferDesc, SizeOf(BufferDesc), 0);
    with BufferDesc do
    begin
      dwSize := SizeOf(TDSBufferDesc);
      dwFlags := DSBCAPS_CTRLDEFAULT or DSBCAPS_GETCURRENTPOSITION2;
      if FDSound.FStickyFocus then
        dwFlags := dwFlags or DSBCAPS_STICKYFOCUS
      else if FDSound.FGlobalFocus then
        dwFlags := dwFlags or DSBCAPS_GLOBALFOCUS;
      dwBufferBytes := FBufferSize;
      lpwfxFormat := Value.Format;
    end;

    if not FBuffer.CreateBuffer(BufferDesc) then
      raise EDirectSoundBufferError.CreateFmt(SCannotMade, [SDirectSoundBuffer]);
  end else
  begin
    FBuffer.IDSBuffer := nil;
    FBufferSize := 0;
  end;

  FWaveStream := Value;
end;

procedure TAudioStream.Stop;
begin
  if FPlaying then
  begin
    FPlaying := False;
    FBuffer.Stop;
    FNotifyThread.Free;
  end;
end;

procedure TAudioStream.Update;
begin
  Update2(False);
end;

procedure TAudioStream.Update2(InThread: Boolean);
var
  WriteSize: Integer;
begin
  if not FPlaying then Exit;

  try
    UpdatePlayedSize;

    if Size<0 then
    begin
      WriteSize := GetWriteSize;
      if WriteSize>0 then
      begin
        WriteSize := WriteWave(WriteSize);
        FPosition := FPosition + WriteSize;
      end;
    end else
    begin
      if FLooped then
      begin
        WriteSize := GetWriteSize;
        if WriteSize>0 then
        begin
          WriteWave(WriteSize);
          FPosition := (FPosition + WriteSize) mod Size;
        end;
      end else
      begin
        if FPosition<Size then
        begin
          WriteSize := GetWriteSize;
          if WriteSize>0 then
          begin
            WriteWave(WriteSize);
            FPosition := FPosition + WriteSize;
            if FPosition>Size then FPosition := Size;
          end;
        end else
        begin
          if InThread then
            SetEvent(FNotifyEvent)
          else
            Stop;
        end;
      end;
    end;
  except
    if InThread then
      SetEvent(FNotifyEvent)
    else
      Stop;
    raise;
  end;
end;

function TAudioStream.WriteWave(WriteSize: Integer): Integer;

  procedure WriteData(Size: Integer);
  var
    Data1, Data2: Pointer;
    Data1Size, Data2Size: Longint;
  begin
    if FBuffer.Lock(FBufferPos, Size, Data1, Data1Size, Data2, Data2Size) then
    begin
      try
        FWaveStream.Position := FWritePosition;
        FWaveStream.ReadBuffer(Data1^, Data1Size);
        FWritePosition := FWritePosition + Data1Size;

        if Data2<>nil then
        begin
          FWaveStream.ReadBuffer(Data2^, Data2Size);
          FWritePosition := FWritePosition + Data2Size;
        end;

        FBufferPos := (FBufferPos + DWORD(Data1Size) + DWORD(Data2Size)) mod FBufferSize;
      finally
        FBuffer.UnLock;
      end;
    end;
  end;

  procedure WriteData2(Size: Integer);
  var
    Data1, Data2: Pointer;
    Data1Size, Data2Size, s1, s2: Longint;
  begin
    if FBuffer.Lock(FBufferPos, Size, Data1, Data1Size, Data2, Data2Size) then
    begin
      try
        FWaveStream.Position := FWritePosition;
        s1 := FWaveStream.Read(Data1^, Data1Size);
        FWritePosition := FWritePosition + s1;
        FBufferPos := (FBufferPos + DWORD(s1)) mod FBufferSize;
        Inc(Result, s1);

        if (Data2<>nil) and (s1=Data1Size) then
        begin
          s2 := FWaveStream.Read(Data2^, Data2Size);
          FWritePosition := FWritePosition + s2;
          FBufferPos := (FBufferPos + DWORD(s2)) mod FBufferSize;
          Inc(Result, s2);
        end;
      finally
        FBuffer.UnLock;
      end;
    end;
  end;

  procedure WriteSilence(Size: Integer);
  var
    C: Byte;
    Data1, Data2: Pointer;
    Data1Size, Data2Size: Longint;
  begin
    if Format^.wBitsPerSample=8 then C := $80 else C := 0;

    if FBuffer.Lock(FBufferPos, Size, Data1, Data1Size, Data2, Data2Size) then
    begin
      try
        FillChar(Data1^, Data1Size, C);

        if Data2<>nil then
          FillChar(Data2^, Data2Size, C);
      finally
        FBuffer.UnLock;
      end;
      FBufferPos := (FBufferPos + DWORD(Data1Size) + DWORD(Data2Size)) mod FBufferSize;
      FWritePosition := FWritePosition + Data1Size + Data2Size;
    end;
  end;

var
  DataSize: Integer;
begin
  if Size>=0 then
  begin
    Result := WriteSize;
    if FLooped then
    begin
      while WriteSize>0 do
      begin
        DataSize := Min(Size-FWritePosition, WriteSize);

        WriteData(DataSize);
        FWritePosition := FWritePosition mod Size;

        Dec(WriteSize, DataSize);
      end;
    end else
    begin
      DataSize := Size-FWritePosition;

      if DataSize<=0 then
      begin
        WriteSilence(WriteSize);
      end else
      if DataSize>=WriteSize then
      begin
        WriteData(WriteSize);
      end else
      begin
        WriteData(DataSize);
        WriteSilence(WriteSize-DataSize);
      end;
    end;
  end else
  begin
    Result := 0;
    WriteData2(WriteSize);
  end;
end;

{  TAudioFileStream  }

destructor TAudioFileStream.Destroy;
begin
  inherited Destroy;
  FWaveFileStream.Free;
end;

procedure TAudioFileStream.SetFileName(const Value: string);
begin
  if FFileName=Value then Exit;

  FFileName := Value;

  if FWaveFileStream<>nil then
  begin
    WaveStream := nil;
    FWaveFileStream.Free;
    FWaveFileStream := nil;
  end;

  if Value<>'' then
  begin
    try
      FWaveFileStream := TWaveFileStream.Create(Value, fmOpenRead or fmShareDenyWrite);
      FWaveFileStream.Open(False);
      WaveStream := FWaveFileStream;
    except
      WaveStream := nil;
      FFileName := '';
      raise;
    end;
  end;
end;

{  TSoundCaptureFormats  }

constructor TSoundCaptureFormats.Create;
begin
  inherited Create(TSoundCaptureFormat);
end;

function TSoundCaptureFormats.GetItem(Index: Integer): TSoundCaptureFormat;
begin
  Result := TSoundCaptureFormat(inherited Items[Index]);
end;

function TSoundCaptureFormats.IndexOf(ASamplesPerSec, ABitsPerSample, AChannels: Integer): Integer;
var
  i: Integer;
begin
  Result := -1;
  for i:=0 to Count-1 do
    with Items[i] do
      if (FSamplesPerSec=ASamplesPerSec) and (FBitsPerSample=ABitsPerSample) and (FChannels=AChannels) then
      begin
        Result := i;
        Break;
      end;
end;

{  TSoundCaptureStream  }

type
  TSoundCaptureStreamNotify = class(TThread)
  private
    FCapture: TSoundCaptureStream;
    FSleepTime: Integer;
    constructor Create(Capture: TSoundCaptureStream);
    destructor Destroy; override;
    procedure Execute; override;
    procedure Update;
  end;

constructor TSoundCaptureStreamNotify.Create(Capture: TSoundCaptureStream);
begin
  FCapture := Capture;

  FCapture.FNotifyEvent := CreateEvent(nil, False, False, nil);
  FSleepTime := Min(FCapture.FBufferLength div 4, 1000 div 20);

  FreeOnTerminate := True;
  inherited Create(True);
end;

destructor TSoundCaptureStreamNotify.Destroy;
begin
  FreeOnTerminate := False;
  SetEvent(FCapture.FNotifyEvent);

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
a亚洲天堂av| 国产欧美日韩不卡| 色综合久久中文字幕| 国产毛片一区二区| 午夜精品福利一区二区三区av| 99久久综合99久久综合网站| 免费在线观看一区| 亚洲一二三四区不卡| 亚洲色大成网站www久久九九| 精品播放一区二区| 欧美一级日韩一级| 欧美日韩免费观看一区二区三区| 99久久久无码国产精品| 国产一区中文字幕| 日本乱人伦aⅴ精品| 国产精品 欧美精品| 一本色道久久综合亚洲91| 国产成人一区在线| 欧美自拍偷拍一区| 一区二区三区在线影院| 久久伊人中文字幕| 国产高清不卡二三区| 日韩成人精品在线| 亚洲一区二区美女| 国产精品一线二线三线精华| 精品成人a区在线观看| 久久99九九99精品| 日韩美女在线视频| 久草在线在线精品观看| 久久久久久久久99精品| 色香蕉成人二区免费| 亚洲va欧美va天堂v国产综合| 欧美日韩免费电影| 天堂午夜影视日韩欧美一区二区| 风间由美一区二区三区在线观看 | www.亚洲免费av| 不卡的av在线| 色素色在线综合| 欧美日本一区二区三区四区| 日本乱人伦一区| 亚洲精品一区二区三区福利| 日产国产高清一区二区三区| 亚洲女厕所小便bbb| 亚洲色图丝袜美腿| 久久老女人爱爱| 在线一区二区视频| 国产一区在线看| 免费在线观看一区| 亚洲三级在线播放| 久久久不卡网国产精品一区| 欧美自拍偷拍午夜视频| 国内精品久久久久影院一蜜桃| 亚洲靠逼com| 欧美一级片在线看| 国产剧情av麻豆香蕉精品| 丝袜亚洲另类欧美| 日本一区二区三区dvd视频在线| 在线不卡中文字幕播放| 成人va在线观看| 午夜精品久久久久久久久久久| 中文字幕在线不卡一区二区三区 | 日韩电影免费一区| 最新不卡av在线| 精品国产精品网麻豆系列 | 韩国成人精品a∨在线观看| 一区二区三区四区亚洲| 欧美电视剧在线看免费| 欧美三级视频在线播放| 另类欧美日韩国产在线| 亚洲一级在线观看| 国产欧美日韩另类一区| 久久青草国产手机看片福利盒子| 精品视频一区二区不卡| 一本久久综合亚洲鲁鲁五月天| 成人av免费观看| 风间由美一区二区三区在线观看| 日本在线不卡一区| 亚洲高清不卡在线观看| 自拍偷在线精品自拍偷无码专区| 国产精品久久毛片a| 国产亚洲精品超碰| 国产欧美一区二区三区在线老狼| 国产清纯白嫩初高生在线观看91 | 91麻豆精品国产无毒不卡在线观看 | 日韩成人dvd| 久久九九久精品国产免费直播| 夫妻av一区二区| 无码av免费一区二区三区试看| 日韩一区二区三区在线视频| 国产99一区视频免费| 亚洲国产一区二区视频| 久久先锋影音av| 欧美精品亚洲二区| 精品一区二区国语对白| 亚洲一区二区中文在线| 欧美精品在线一区二区三区| 卡一卡二国产精品| 亚洲1区2区3区4区| 久久久久国产精品免费免费搜索| 色综合久久久久综合99| 99久久婷婷国产综合精品| 色婷婷精品久久二区二区蜜臀av | 国产精品一区二区视频| 日本成人在线网站| 亚洲黄色免费电影| 91亚洲精品久久久蜜桃网站| 偷拍与自拍一区| 亚洲午夜免费福利视频| 日韩国产一区二| 欧美日韩mp4| 日韩中文字幕1| 高清不卡在线观看| 成人av电影在线观看| 99riav久久精品riav| 欧美视频中文字幕| 欧美日韩精品系列| 精品99一区二区三区| 久久精品夜色噜噜亚洲aⅴ| 亚洲欧美怡红院| 国产精品成人免费在线| 亚洲国产视频a| 日韩黄色片在线观看| 免费观看日韩av| 韩国三级电影一区二区| 奇米精品一区二区三区在线观看一 | 一区二区三区在线观看国产| 丝袜脚交一区二区| 久久久99精品免费观看不卡| 国产一区欧美一区| 一区二区高清视频在线观看| 日韩va亚洲va欧美va久久| 国产精品综合在线视频| 99re视频这里只有精品| 精品日韩av一区二区| 亚洲私人影院在线观看| 日本麻豆一区二区三区视频| 成人av电影在线| 色视频一区二区| 久久免费美女视频| 无码av免费一区二区三区试看| 久久国产精品99久久人人澡| 国产成人精品免费在线| 欧美日韩国产综合一区二区三区 | 久久伊人中文字幕| 亚洲精品在线观看网站| 亚洲三级在线观看| 黄色小说综合网站| 色吧成人激情小说| 久久婷婷综合激情| 亚洲精品久久久久久国产精华液| 国产综合久久久久久久久久久久 | 色老综合老女人久久久| 欧美精品在线观看一区二区| 国产精品久久久久久久浪潮网站 | 国产大陆精品国产| 91麻豆精品国产91久久久久久久久 | 一区二区三区日韩欧美| 日韩va欧美va亚洲va久久| 欧美日韩国产综合草草| 精品国产乱码久久久久久蜜臀 | 激情小说亚洲一区| 色综合天天在线| 国产欧美视频一区二区三区| 麻豆精品新av中文字幕| 色噜噜狠狠色综合欧洲selulu| 日韩精品一区二区三区视频播放| 一区二区欧美视频| av在线不卡免费看| 久久久久久免费毛片精品| 美日韩一区二区三区| 7777精品伊人久久久大香线蕉| 亚洲一级在线观看| 国产毛片精品一区| 久久久久综合网| 日韩一区二区不卡| av亚洲精华国产精华精华 | 亚洲宅男天堂在线观看无病毒| 日本美女一区二区三区视频| 欧美日韩一区二区三区视频| 亚洲最大的成人av| 337p亚洲精品色噜噜| 国产电影一区二区三区| 国产精品毛片大码女人| 91蝌蚪porny| 一级中文字幕一区二区| 欧美视频你懂的| 天天操天天干天天综合网| 91精品国产高清一区二区三区蜜臀 | 亚洲精品va在线观看| 久久精品欧美日韩精品| 久久久99免费| 亚洲品质自拍视频| 一区二区三区 在线观看视频| 亚洲久本草在线中文字幕| 国产精品久99| 亚洲成av人片在线| 亚洲成人av在线电影| 免费成人在线观看视频| 日本一区二区视频在线观看| 国产综合一区二区|