Показать сообщение отдельно
  #10  
Старый 28.06.2017, 12:45
amam amam вне форума
Прохожий
 
Регистрация: 05.04.2017
Сообщения: 17
Версия Delphi: 7
Репутация: 10
По умолчанию

Я со стороны сервера записываю звук в 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
Ответить с цитированием