Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Как передать звук по сети


Автор: Spiker13 7.5.2006, 21:57
Проблемма в том, что мне, жуть как надо, передать голос с микрофона на другой комп и там чтобы он воспроизвелся не сохраняясь в файл. Если можно при помощи Sockets, т.к. они мне понятней будут.  smile  

Автор: Тьма 7.5.2006, 22:27
берешь, записываешь голос с микрофона в TMemoryStream и далее используя в TClientSocket метод SendStream(вроде так называется) пересылаешь поток  

Автор: Spiker13 7.5.2006, 22:36
А возможно ли с примером, А? smile  

Автор: Sunr1se 8.5.2006, 10:51
Отправить поток очень просто:
Код

ClientSocket1.Socket.SendStream(SoundStream);

Записать звук в поток немного сложнее. Можно записать звук в файл, затем открыть этот файл потоком и отправить этот поток. Для начала создаешь на винте файл test.wav. Затем делаешь так:
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
  with MediaPlayer do
  begin
    FileName := 'C:\test.wav';
    Open;
    Wait := False;
    StartRecording;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var SoundStream: TStream;
begin
  with TMediaPlayer do
  begin
    Stop;
    FileName := 'C:\sound.wav';
    Save;
    Close;
  end;
SoundStream := TFileStream.Create(TMediaPlayer.FileName, fmOpenRead);
ClientSocket1.Socket.SendStream(SoundStream);
SoundStream.Free;
end;


И еще надо объявить глобальную переменную MediaPlayer типа TMediaPlayer.
P.S. На работоспособность я этот код особо не тестировал smile 

Автор: Spiker13 8.5.2006, 13:21
Спасибо за советик. smile  

Автор: Mechanic 9.5.2006, 23:23
Кста, в DRKB, в статье "Низкоуровневые процедуры обработки звука" есть модуль "RECUNIT", в котором запись идет не в файл но в буфер.
Цитата

Код

uses 

  Windows, MMSystem, SysUtils, MSACM; 

{  Ниже определен класс TWaveRecorder для обслуживания входа звуковой    } 
{  карты. Ожидается, что новый класс будет производным от TWaveRecorder  } 
{  и перекроет TWaveRecorder.ProcessBuffer. После начала записи данная   } 
{  процедура вызывается каждый раз при наличии в буфере аудио-данных.    } 
 

Автор: ZaasRanec 5.3.2008, 00:21
Я чесно говоря, так и не понял КУДА, КАК и в КАКОМ ВИДЕ передаетца звук через TWaveRecorder  smile 
Хелп, плиз...  smile 

Автор: elestrago 5.3.2008, 23:34
передается стрим на серверную часть программы!!

принятие стрима реализуется примерно вот так кидаеш на форму ТServerSocket

затем на событие сервера он клиент рид кидаешь код

Код

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
S1:string;
SoundStr:TFileStream;
begin
S1:=Socket.ReceiveText;
SoundStr:=TFileStream.Create('C:\1.waw', fmOpenRead);
SoundStr.Write(S1[1], length(S1));
end;


это делается примерно вот так код кривой писал в полу сосном состоянии smile если че доделай! 

ах да ну и собствено просто потом воспроизводишь файл smile хотя если помудрить то можно сразу и поток воспроизводить без сохранения файла типа сразу попытася S1 воспроизвести без
Код

SoundStr:=TFileStream.Create('C:\1.waw', fmOpenRead);
SoundStr.Write(S1[1], length(S1));

smile хотя не знаю прокатит ли такое smile

Автор: ZaasRanec 11.3.2008, 03:12
я понял, что стрим нуна передавать через сокеты, но где сам этот стрим? проблема не в передаче по сети, а в том, что я не смог найти поток, в который передаетца записаный звук с самого контрола... как переслать стрим по сети я сам сделать смогу в принципе сварганить...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)