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;
ツイート | ![]() |