PicoPhone

PicoPhone is a simple Internet phone application with chat.

I made it, because all the Internet phones around are quite heavy and use complicated protocols, such as H.323, which has problems with NAT routers. PicoPhone uses a simple UDP-based protocol, which works very well with NAT. The program accepts connections on UDP port 11676 and makes connection to that port. Optionally a port number can follow the address (the colon is used as a separator), if the connection has to be made to another port (the NAT router on the receiving side should convert the port number to the default 11676).

PicoPhone allows multiple concurrent calls, but the audio device should allow multiple output streams to be opened simultaneously. Conferences are not set up automatically, i.e., if A calls B and C, B and C won't hear each other: B has to call C, or C has to call B for the complete conference to be set up.

On incoming calls the program plays the file ringin.wav, which should be present in the default windows location for wav files or in the same directory of PicoPhone.

This program is free.

Here is the executable for Windows (ver 1.30).
Here is the source code (ver 1.31).

If you don't have a static IP address, your parties don't know how to call you. You can use the free DNS2Go service for this purpose.

Command line parameters

When the --port parameter is given, the default UDP port used will be the given instead of 11676.

Operation

Enter a fully qualified domain name or an IP address and then press the Call key. You can put a comment before the address, but in this case you should enclose the address between < and >. If not specified, the address uses the standard PicoPhone port, 11676. A port can be specified after the address, using a colon as a separator. The syntax can be therefore:

address, or
address:port, or
name

, or
name

You can use the Hangup button to abort a proceeding call setup, to disconnect from one or more parties, or from everyone.

The Chat button opens the chat window. You can write messages to a single party or to everyone.
The Log button opens the log. If the button name is Log!!!, it means, that something new is present in the log.
The Msg button sends a short message to an unconnected party. The message will be written to the log file. If the receiving party has logging disabled, messages cannot be sent to that party.
The MIC button, when not depressed, disables audio acquisition and sending.
The VOL button, when not depressed, disables audio output without muting the overall Wave output of the audio card.
The Off button disables reception of calls and allows to specify a message to leave for the calling party.

Settings explanation

Identity: the name of the party. It will be presented when establishing calls.
Codec: GSM or Truespeech. Truespeech has a higher compression ratio and uses less bandwidth, but its quality is lower. The codecs have to be installed on the computer.
Input threshold (dB): if the signal level is lower than this, no transmission occurs.
Frames per packet: number of audio frames transmitted in one UDP packet. Higher is this number, less is the overhead for header transmission and lower the bandwidth used, but the delay of the receiver will be higher.
Min delay (ms): the receiver will impose this initial minimal delay..
Max delay (ms): the receiver won't allow a delay higher than this and will throw away packets which would increase the delay above this value.
10 dB mic gain: if checked, the microphone input will be digitally increased by 10 dB.
10 dB out gain: if checked, the audio output will be digitally increased by 10 dB.
Generate log: generates log of incoming calls and of received messages (not chat).
On incoming call: ask: the program will ask the user, if the call should be accepted or not.
On incoming call: refuse: the program will automatically refuse every call. The calling user will receive a message indicating that the call is being refused and the message will contain the identity of the user refusing the call.
On incoming call: accept: the program will automatically accept every call.
On incoming call: ignore: the program will ignore incoming calls. The calling user will receive a message indicating that the remote PicoPhone is not responding.
Process priority: the priority class of the process. It is useful to increase the process priority, when the audio is choppy due to other CPU-hungry applications.

Credits

Thanks to Jaroslaw Filiochowski for the added features "alternative port number" and "process priority".