Environment: Windows NT4/2000 and Visual C++ 5.0 (and greater)
This is the simplest prototype to demonstrate how to realize a basic voice communication via Internet/Network on PC platforms. The technique in this demo can be applied to develop the PC Internet voice communication software, such as Internet Phone.
To save development time, I borrowed the idea of Client/Server design in Microsoft MSDN sample "GlabolChat".
This sample has been tested in a intranet consisted of NT 4.0 Server/Workstation and a LAN consisted of Win2000 Professional. The CPUs in the testing PC are at least Intel P2 266 or faster, and sound card, mike, and speaker are must.
In the tests, it can work smoothly in bi-directional voice talk with the a acceptable sound quality.
The basic system design
This sample contain two modules, Talkserver and Talkclient.
The basic system diagram is like:
Server module has two types of sockets, server sockets and client sockets. One server socket supports a certain network protocol and listens to the incoming connection with such protocol. When a client connection request comes, the server socket creates a client socket to build the link with the client. The client socket works to receive the messages from its client, transit the message to peer client socket, then the peer client socket sends the messages to the target client. The client socket also gets the messages from the peer socket and sends these messages to its client.
The user can use the client modules to communicate in voice with each other. The socket in the client is implemented as sending/receiving messages to/from the server.
The method to capture and transit sound data in client module is building and running a wave input device, when this wave input device records enough to size of the data buffer in its wave header structure, it notifies client instance. When the client receives the wave input device message, client retrieves the sound data in the wave input device buffer, then encodes the sound data into the voice communication message and sends to the peer (or target) client.
To play a voice message is similar. The client has a wave out device. After the client receives a voice message from the other client, it decodes the sound data from the message, puts the sound data to the wave output device and drives it to play the sound.
Change sound quality
By changing the wave device buffer and wave format type defined in vtDef.h, you can change the sound quality in some kind of levels.