Indy10 UDPClientについて〜ボイスチャット


KOU  2007-01-27 03:28:29  No: 24619

Indy10のIdUDPClientを用いて、オシロスコープを作成しています。
送信側と受信側は今のところ別のソフトになっています。
が、後に1つにまとめます。
Capture.BlockCopyなどの見慣れないメソッドは、Quadruple Dさんのコンポーネントです。
音声の取り込み、送信側オシロの表示はうまくいっているのですが
受信側オシロが全く反応してくれません。
Indyを使ったことがなかったので、おそらくそこでバグがあると思っています。

これがうまくいけば、ボイスチャットへ移行するつもりです。
どうかよろしくお願いします。

Delphi6 Personal
WindowsXP

//送信側//

const BufferSize := 100;

procedure TForm1.ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
var
  i:Integer;
  Buf:Array[0..BufferSize-1] of SmallInt;
  Points:Array[0..BufferSize-1] of TPoint;
begin
  //波形の表示
  …
    //キャンバスを塗りつぶす
    …
    //Buf配列にコピー(1/10秒分)
    Capture.BlockCopy(Capture.Position, @Buf[0], BufferSize * 2);

    //送信し、グラフを描く
    for i:=0 to BufferSize-1 do
    begin
      Points[i]:= Point(i+20, 50 - (Buf[i] div 256));
      IdUDPClient1.Send( IntToStr(Buf[i]) );
    end;
    Polyline(Points);
  end;

  Canvas.CopyRect(ClientRect, OffBmp.Canvas, ClientRect);
  Sleep(10);
  
  //繰り返し
  done:=False;
end;

//受信側//

const BufferSize := 100;

procedure TForm1.ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
var
  i : Integer;
  Buf : Array[0..BufferSize-1] of SmallInt;
  Points : Array[0..BufferSize-1] of TPoint;
begin
  //波形の表示
  …
    //キャンバスを塗りつぶす
    …
    //受信し、グラフを描く
    for i:=0 to BufferSize-1 do
    begin
      IdUDPClient1.ReceiveString( Buf[i] );
      Points[i]:= Point(i+20, -50-(Buf[i] div 256));
    end;
    Polyline(Points);
  end;

  Canvas.CopyRect(ClientRect, OffBmp.Canvas, ClientRect);
  Sleep(10); 

  //繰り返し
  done:=False;
end;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加