Я со стороны сервера записываю звук в TmemoryStream.
Код:
sobuf.Write(WaveHdrIn.lpData[0],WaveHdrIn.dwBytesRecorded);
waveInAddBuffer(wavein,@WaveHdrIn,sizeof(TwaveHdr));
После передаю данный звук на клиет для последующего воспроизведения. Пробую так:
Код:
var
buf:array[0..4000]of byte;
a:integer;
begin
a:=Socket.ReceiveBuf(buf,sizeof(buf));
receivesou.Write(buf[0],a);
if receivesou.size>=sizesou then
begin
receivesou.Position:=0;
playsound(receivesou.Memory, 0, SND_MEMORY or SND_ASYNC);
end;
end;
Вот так не пашет. Звук просто не играет.
Есть еще такой вариант:
Код:
var
buf:array[0..4000]of byte;
a:integer;
begin
a:=Socket.ReceiveBuf(buf,sizeof(buf));
receivesou.Write(buf[0],a);
if receivesou.size>=sizesou then
begin
receivesou.Position:=0;
With WaveHdrOut do
begin
dwFlags:= WHDR_INQUEUE;
dwBufferLength:= receivesou.size;
dwBytesRecorded:= 0;
dwUser:= 0;
dwLoops:= 1;
GetMem(WaveHdrOut.lpData, receivesou.size);
end;
receivesou.Read(WaveHdrOut.lpData^,receivesou.size);
waveplay(@WaveHdrOut);
end;
end;
procedure TForm1.waveplay(mb: pointer);
begin
waveOutPrepareHeader(WaveOut,mb,sizeof(WaveHdrOut));
waveOutWrite(WaveOut,mb,sizeof(WaveHdrOut));
end;
Так воспроизводится не весь звук, а только несколько милисекунд. И потом вылетает AV