Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.29;
Скачать: CL | DM;

Вниз

Передача аудио по сети   Найти похожие ветки 

 
S@shka ©   (2003-11-18 15:30) [0]

Необходимо передавать аудио по сети.
ТО есть
говорим в микрофон на одном компе слышим на другом.
Если кто-что может посоветовать.
Буду рад.


 
Карелин Артем ©   (2003-11-18 15:54) [1]

Совет такой: передавать звук исключительно по протоколу UDP.


 
Almax   (2003-11-18 16:06) [2]

Ваще, был такой вопрос уже, посмотри где-то в форуме. Там вроде немало ответов было.
Успехов!!!


 
Fredericco ©   (2003-11-18 18:36) [3]

Самый первый совет:
Начни делать сам, например с оцифровки звука. Столкнешся с проблемами - тогада пость.


 
S@shka ©   (2003-11-18 18:42) [4]

Гы :)
очень дельные советы. Особенно послений.


 
Fredericco ©   (2003-11-18 19:50) [5]

Дельнее?
Оцифровка, вывод звука:

function waveInAddBuffer; external mmsyst name "waveInAddBuffer";
function waveInClose; external mmsyst name "waveInClose";
function waveInGetDevCapsA; external mmsyst name "waveInGetDevCapsA";
function waveInGetDevCapsW; external mmsyst name "waveInGetDevCapsW";
function waveInGetDevCaps; external mmsyst name "waveInGetDevCapsA";
function waveInGetErrorTextA; external mmsyst name "waveInGetErrorTextA";
function waveInGetErrorTextW; external mmsyst name "waveInGetErrorTextW";
function waveInGetErrorText; external mmsyst name "waveInGetErrorTextA";
function waveInGetID; external mmsyst name "waveInGetID";
function waveInGetNumDevs; external mmsyst name "waveInGetNumDevs";
function waveInGetPosition; external mmsyst name "waveInGetPosition";
function waveInMessage; external mmsyst name "waveInMessage";
function waveInOpen; external mmsyst name "waveInOpen";
function waveInPrepareHeader; external mmsyst name "waveInPrepareHeader";
function waveInReset; external mmsyst name "waveInReset";
function waveInStart; external mmsyst name "waveInStart";
function waveInStop; external mmsyst name "waveInStop";
function waveInUnprepareHeader; external mmsyst name "waveInUnprepareHeader";
function waveOutBreakLoop; external mmsyst name "waveOutBreakLoop";
function waveOutClose; external mmsyst name "waveOutClose";
function waveOutGetDevCapsA; external mmsyst name "waveOutGetDevCapsA";
function waveOutGetDevCapsW; external mmsyst name "waveOutGetDevCapsW";
function waveOutGetDevCaps; external mmsyst name "waveOutGetDevCapsA";
function waveOutGetErrorTextA; external mmsyst name "waveOutGetErrorTextA";
function waveOutGetErrorTextW; external mmsyst name "waveOutGetErrorTextW";
function waveOutGetErrorText; external mmsyst name "waveOutGetErrorTextA";
function waveOutGetID; external mmsyst name "waveOutGetID";
function waveOutGetNumDevs; external mmsyst name "waveOutGetNumDevs";
function waveOutGetPitch; external mmsyst name "waveOutGetPitch";
function waveOutGetPlaybackRate; external mmsyst name "waveOutGetPlaybackRate";
function waveOutGetPosition; external mmsyst name "waveOutGetPosition";
function waveOutGetVolume; external mmsyst name "waveOutGetVolume";
function waveOutMessage; external mmsyst name "waveOutMessage";
function waveOutOpen; external mmsyst name "waveOutOpen";
function waveOutPause; external mmsyst name "waveOutPause";
function waveOutPrepareHeader; external mmsyst name "waveOutPrepareHeader";
function waveOutReset; external mmsyst name "waveOutReset";
function waveOutRestart; external mmsyst name "waveOutRestart";
function waveOutSetPitch; external mmsyst name "waveOutSetPitch";
function waveOutSetPlaybackRate; external mmsyst name "waveOutSetPlaybackRate";
function waveOutSetVolume; external mmsyst name "waveOutSetVolume";
function waveOutUnprepareHeader; external mmsyst name "waveOutUnprepareHeader";
function waveOutWrite; external mmsyst name "waveOutWrite";


Передача по сети:

TServerSocket
TClientSocket


 
DelphiN! ©   (2003-11-18 20:05) [6]

>Fredericco Меня тоже страшно интересует этот вопрос, не могли бы вы привести маленький примерчик по использованию выше приведенных вами функций(если не трудно), просто самому сейчас нет времени разбираться


 
Fredericco ©   (2003-11-18 20:24) [7]

Оцифровка:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes,graphics, Forms,
Dialogs,mmsystem, StdCtrls,shellapi, Controls;

type
TArrayBuf = array[0..1023]of byte;//1 KByte
PArrayBuf = ^TArrayBuf;
TForm1 = class(TForm)
private
{ Private declarations }
public
WaveFormat:TWaveFormatEx;
WaveIn:PHWaveIn;
IsOn:boolean;
Procedure WNDPROC(var msg:TMessage);override;
Procedure InitWaveIn(MyBool:boolean);
{ Public declarations }
end;

var
Form1: TForm1;
Bufi1:Array[0..1023] of double;

implementation

{$R *.dfm}

Procedure Tform1.WNDPROC(var msg:TMessage);
var
Hdr:PWaveHdr;
i,j,toI,fromI,k,p:integer;
// r:real;
begin
INHERITED;
case msg.Msg of
MM_WIM_OPEN:
begin
//


 
Fredericco ©   (2003-11-18 20:29) [8]

Отправка по сети от сервера клиенту:

function TSendToSocketTh.SendTextToHandleEx(sHandle:integer;Text:string):boolean;
var
i:integer;
s2:Pstring;
s:string;
b:PChar;
LReal,LNeed:integer;
begin
try
Result:=False;
New(s2);
s:=Text;
for i:=0 to Form1.ssDrv.Socket.ActiveConnections-1 do begin
if Form1.ssDrv.Socket.Connections[i].SocketHandle=sHandle then begin
LReal:=Form1.ssDrv.Socket.Connections[i].SendBuf(Pointer(s)^,Length(s));
if LReal>-1 then begin
Delete(s,1,LReal);
LNeed:=Length(s);
while LNeed>0 do begin
LReal:=Form1.ssDrv.Socket.Connections[i].SendBuf(Pointer(s)^,Length(s));
Delete(s,1,LReal);
LNeed:=Length(s);
end;
Result:=True;
Break;
end Else begin
Client[i].WaitingOnWrite:=True;
Result:=False;
Break;
end;
end;
end;
s:="";
s2^:="";
SetLength(s,0);
SetLength(s2^,0);
Dispose(s2);
except
Result:=False;
end;
end;

Флаг Client[i].WaitingOnWrite сбрасывается для каждого клиента отдельно в событии OnClientWrite. Если функция SendTextToHandleEx вернула Ложь, надо сохранить то, что пытались отправить, приостановить любую отправку этому клиенту, до тех пор пока флаг не будет сброшен.


 
S@shka ©   (2003-11-18 23:01) [9]

To Fredirico BIG THANKS
Я сегодня перерыл MSDN и по тихоньку
от
mciSendString
дошел приблизительно до того же.
Правда для сетки исп-льзовал UDP-компоненты.
Еще раз огромное спасибо.
Если не секрет откуда исходниги и есть ли инфа по данному вопросу или это все из MSD...


 
S@shka ©   (2003-11-19 10:06) [10]

To FREDERICO
Не мог бы расшифровать комментарии в WNDProc ()
А то не читаемы.
Большое спасибо


 
Fredericco ©   (2003-11-19 11:14) [11]

Там три нечитаемых комментария:
1) Начало оцифровки
2) Завершение оцифровки
3) В массиве Bufi1 лежит оцифрованный звук.


> Если не секрет откуда исходниги и есть ли инфа по данному
> вопросу или это все из MSD

Источники: F1, книги, голова, инет, Digitman © .


 
S@shka ©   (2003-11-19 12:34) [12]

Чтобы не раздувать форум написал по почте.
Тема закрыта


 
DelphiN! ©   (2003-11-19 13:33) [13]

>S@shka ©
Эгоист


 
Fredericco ©   (2003-11-19 13:34) [14]

2 DelphiN! © (19.11.03 13:33) [13]
А чего в примере непонятного?


 
DelphiN! ©   (2003-11-19 21:21) [15]

Fredericco ©> При InitWaveIn(true) у меня выполняется: if (openError<>0)or(PrepareError<>0)or(BufferAddError<>0)or(StartError<>0)then, тоесть ошибка!


 
Fredericco ©   (2003-11-20 12:24) [16]

DelphiN! © (19.11.03 21:21) [15]
Сам по себе микрофон работает?


 
Fredericco ©   (2003-11-20 12:25) [17]

Да, и приведи коды ошибок.


 
Digitman ©   (2003-11-20 12:36) [18]


> Fredericco


> Сам по себе микрофон работает?


да бог с тобой)
микрофон-то причем здесь ?)
его можно вообще выкинуть в мусор, AЦП-то встроенному без разницы источник аудиосигнала, будь то микрофон или еще что-то ... сигнал АЦП берет с текущего подключенного канала микшера вход.сигналов, каковым может быть и Mic-канал и LineIn-канал и любой другой... даже если к карте не подлючено ничего ко входу, АЦП сделает свое дело, если алгоритм старта АЦП правильно сработал


> DelphiN!


ты код для чего получил ?
для анализа правильной программной последовательности работы с АЦП, а не для бездумного сдирания с последующим забрасыванием помогающего тебе дурацкими вопросами)


 
Fredericco ©   (2003-11-20 12:48) [19]

2 Digitman © (20.11.03 12:36) [18]
По дурости спросил )))
Я тока из института приехал... а у нас сегодня к нулевой паре было ...


 
Digitman ©   (2003-11-20 13:13) [20]


> Fredericco



> а у нас сегодня к нулевой паре было


в смысле, "а у нас с собой было уже к нулевой паре" ?
))


 
Fredericco ©   (2003-11-20 13:23) [21]

В смысле: сонный я, сижу носом клюю, жду когда проснусь :-)))))


 
S@shka ©   (2003-11-24 11:51) [22]

Народ а по делу можно получить ответ на вопрос?
Без излишней демагогии :)
Кстати я нашел исходник тот что прислал.
У меня вот какой вопрос.
Звук оцифровывается на
44100
8 bit
MONO канал
Но по udp максимум кидается по 1500 байт. Соответственно
Размер буфера 1500 байт.
А вот как бы на стороне приемника хитро склеивать чтобы повысить качество???


 
Polevi ©   (2003-11-24 12:37) [23]

хитрым клеем


 
DelphiN! ©   (2003-11-24 21:52) [24]

Народ plzzz, не мог бы кто мне на мыло скинуть исходник работающего примера, для общения через микрофон по сети. Очень очень нужно, ото до меня чего-то не доходит в чем у меня ошибка.
Буду очень признателен. delphin1986@yandex.ru



Страницы: 1 вся ветка

Текущий архив: 2004.01.29;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.015 c
3-93375
--none--
2003-12-31 16:29
2004.01.29
ADOTable


1-93528
RustamBek
2004-01-19 10:36
2004.01.29
Межстрочный интервал в TRichEdit


14-93698
Knight
2004-01-06 12:18
2004.01.29
Можно ли построить диаграмму в Excel...


3-93363
Vick
2003-12-31 11:44
2004.01.29
Экспорт из DataSet в Excel


3-93366
Danilas
2004-01-02 20:11
2004.01.29
Как запустить процедуру в Interbase с помошью Делфи