This software is based on the client - server architecture. Commmunication between the clients is established through the server. Initially server is started. Clients connects to the server host. Server sends the new client list to all the existing clients. The client can select destination user from the user combo box. The software also provides save and play (user can save the sound and play it later). Client also has volume control feature. When client application is started microphone select option (recording) is enabled and microphone mute option is checked (playing) automatically by the program (user doesn't have to worry about the external settings).
The recording and playing threads are created in
of the Display class.
record = new RecordSound(this);
play = new PlaySound1(this);
Thread functions are based on the code by great person, Paul Cheffers (from codeguru site). I am grateful to him for making my dream project into reality.
PreCreateHeader() of the
Display class (from constructor) creates some buffers for playing wavedata. (This prevents creation of buffers during runtime...)
When the client presses the connect button
OnConnect() of the
Display class the client connects to the server and displays the userlist and start button. On pressing the start button recording and playing is started by sending message to recording and playing threads. (
record->PostThreadMessage(WM_RECORDSOUND_STARTRECORDING, 0, 0);
play->PostThreadMessage(WM_PLAYSOUND_STARTPLAYING, 0, 0);
These messages will activate corresponding functions defined in the message maps of the respective thread classes.
On pressing the stop button recording and playing is stopped by in the same way as above (
OnStop Function). It also contains other functions which will be activated on pressing the buttons and some functions are activated from other classes. (
: When data arrives at the client it will call the
function which plays the sound by sending a message to the
play->PostThreadMessage(WM_PLAYSOUND_PLAYBLOCK, 0, (LPARAM) lpHdr);
Total length : 2020 bytes
- 15 : header (destination username or special status)
- 5 : Length of actual data
- 2000 : Reserved for actual data.
function creates buffers for recording data. These are added using
function. (Called when Start button is clicked...as explained earlier..)
Contains the functions for starting, playing and stopping wavedata. Buffers are created initially in the
are the special classes to add several extra features to Voice - Chat function. Some of the concepts are collected from various developers at the codeguru and codeproject sites. I am grateful to those developers....!!!
Running the Application
First start the server application (with port number
xxx). Then start a minimum of 2 clients on any hosts (same or different). Mention server host address and port
xxx with username
xyz. Then click the connect button. The userlist will be displayed. Select the user and click the start button to start the chat...
Note: Any client can chat with any other client and hence a client can receive data from any number of clients. Performance depends upon the situation. Developers are free to use their own ideas.. (please let me know if you see some new mechanism..)
I am eagerly awaiting your doubts and suggestions at firstname.lastname@example.org.
I am grateful to codeguru and codeproject site for connecting developers....and helping to realise their dreams..!!!