О давно подобное писать пробывал, кстати и на форум тоже что выложил, ну ща посмотрим....
ага, есть пример записи через микрофон:
в форму:
'
'автор - неизвестен
'пример с сайта vbplanet.km.ru
'
Sub CloseSound()
 im Result&
 im errormsg%
 im ReturnString As String * 1024
 im ErrorString As String * 1024
Result& = mciSendString("close mysound", ReturnString, 1024, 0)
End Sub
Sub RecordSound()
'записать звук с микрофона (6 сек.)
 im Result&
 im errormsg%
 im ReturnString As String * 1024
 im ErrorString As String * 1024
CloseSound
Result& = mciSendString("open new type waveaudio alias mysound", ReturnString, 1024, 0)
If Not Result& = 0 Then
errormsg% = mciGetErrorString(Result&, ErrorString, 1024)
MsgBox ErrorString, 0, "Error"
Exit Sub
End If
Result& = mciSendString("set mysound time format ms bitspersample 8 samplespersec 11025", ReturnString, 1024, 0)
If Not Result& = 0 Then
errormsg% = mciGetErrorString(Result&, ErrorString, 1024)
MsgBox ErrorString, 0, "Error"
Exit Sub
End If
Result& = mciSendString("record mysound to 60000", ReturnString, 1024, 0)
If Not Result& = 0 Then
errormsg% = mciGetErrorString(Result&, ErrorString, 1024)
MsgBox ErrorString, 0, "Error"
Exit Sub
End If
End Sub
Sub PlayRecSound()
 im Result&
 im errormsg%
 im ReturnString As String * 1024
 im ErrorString As String * 1024
Result& = mciSendString("stop mysound", ReturnString, 1024, 0)
If Not Result& = 0 Then
errormsg% = mciGetErrorString(Result&, ErrorString, 1024)
MsgBox ErrorString, 0, "Error"
End If
Result& = mciSendString("play mysound from 1 wait", ReturnString, 1024, 0)
If Not Result& = 0 Then
errormsg% = mciGetErrorString(Result&, ErrorString, 1024)
MsgBox ErrorString, 0, "Error"
End If
End Sub
Private Sub Command1_Click()
RecordSound
End Sub
Private Sub Command2_Click()
Call PlayRecSound
End Sub
Private Sub Form_Unload(Cancel As Integer)
CloseSound
End Sub
в модуль:
Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
Declare Function mciGetErrorString Lib "winmm.dll" Alias "mciGetErrorStringA" (ByVal dwError As Long, ByVal lpstrBuffer As String, ByVal uLength As Long) As Long
так вот то что передаём вроде в Result&, потом надо это строку просто по сети передать. Это моё мнение! Я не проверял! Так как мне надо было в риальном времени голос передавать и на передачу тратится время, в вашем случае для голосоваой может прокатит.
А про экономию траффика не хотите подумать?
Нужен алгоритм сжатия в реальнном времени, т.е. чтобы данные сжимались настолько быстро, что задержка в передаче/приеме их по сети былабы не заметна...