dcc.voice
Starts a DCC Voice connection
Usage
dcc.voice [-g=<codec>] [-n] [-c] [-u] [-h=<sample_rate_in_hz>] [-m[=<boolean>]] [-i=<interface>] [-p=<port>] [-a=<fake address>] [-f=<fake port>] <nickname>
Description
Attempts a DCC Voice connection to <nickname>.
The -g option is used to select the GSM codec, available codecs are gsm, adpcm and null.
The ADPCM codec is the one that was used in previous KVIrc versions, it provides a 1:4 compression rate and is designed for 8 KHz audio sampling rate (but will work also with other sampling rates).
The GSM codec offers 1:10 compression at the cost of some quality and CPU time. If you have a good CPU and plan to transmit voice only, use this codec.<br> The null codec offers no compression and may be used to transfer plain audio data over a fast connection (usually loopback connection or local networks). The null codec with 44100 sampling rate would provide CD quality audio streaming, but it is practically not usable (at the time I'm writing) since requires a monster bandwidth. If the -g switch is not present, the ADPCM codec is used by default (for compatibility reasons).
The -h switch is used to select the sampling rate, if not given the sampling rate defaults to 8000 Hz. This switch accepts any value, but in fact the soundcards have limits on the values. Typically the lowest limit is 5 KHz and the upper limit is 44.1 KHz (but some soundcards support 96 KHz). It is also possible that the soundcard can't support a continuous range of frequencies and will select a discrete closest match instead.
The commonly used sample rates are 8000, 11025, 22050 and 44100 Hz.
The remaining parameters are equivalent to the ones used in dcc.send, so please refer to that help page for the full discussion. This help page contains only a brief resume of these parameters.
Switches
-g=<codec> | --codec=<codec>
Use the codec specified as parameter. Actually the supported codecs are null, adpcm and gsm.
-h=<rate> | --sample-rate=<rate>
Use the sample rate specified by <rage>. Valid sample rates are 8000, 11025, 22050 and 44100 Hz.
-m[=<boolean>] | --minimize[=<boolean>]
If the -m switch is passed, the default boolCreateMinimizedDccSend option is overridden with the <boolean> parameter passed. So actually by passing -m=1 will create a minimized DCC SEND even if the $option(boolCreateMinimizedDccSend) returns false.
In the same way, by passing -m=0 you will create a non minimized DCC SEND. If no <boolean> value is specified, it defaults to 1.
-n | --no-ctcp
Do not send the CTCP request to the target user, you will have to do it manually, or the remote user will have to connect manually (for example by using dcc.recv -c).
-c | --connect
Attempt to CONNECT to the remote host specified as <interface> and <port>, instead of listening (active connection instead of a passive one). In this case the -i and -p switches are mandatory.
The c switch takes precedence over n (In fact both should be mutually exclusive).
If the c and n switches are missing, this commands needs to be executed in a window that is bound to a connected IRC context (you need a third entity to accomplish the negotiation).
-i=<interface> | --ip=<interface>
Bind the local listening socket to the specified <interface> (which is an IP address, IPv4 or IPv6). If this switch is not specified, the socket is bound to the interface of the current IRC connection (if any) or to 127.0.0.1.
You can also specify a local interface name to get the address from (this works only for IPv4 interfaces since IPv6 ones seems to be unsupported by the system ioctl() calls at the moment (for Linux at least)).
Here go some examples:
-i=215.243.12.12: this will bind to the IPv4 interface with the specified address.
-i=3ffe:1001::1: this will bind to the IPv6 interface with the specified address.
-i=ppp0: this will bind to the IPv4 address of the interface ppp0 (if supported by the underlying system).
The -i switch parameter may serve also as a target address when the -c switch is used.
-p=<port> | --port=<port>
Bind the local listening socket to the specified <port>. If this switch is not specified, the port will be a random one chosen by the kernel.
-a=<fake address> | --fake-address=<fake address>
Send the <fake address> as target for the remote client in the requesting CTCP message. If this switch is not given, the CTCP will contain the real IP address of the listening interface.
-f=<fake port> | --fake-port=<fake port>
Send the <fake port> as target port for the remote client in the requesting CTCP message. If this switch is not given, the CTCP will contain the real port of the listening socket.

All these switches are meant to allow maximum flexibility of the DCC negotiation, earlier KVIrc releases had serious problems with firewalled and/or masqueraded machines. With the -a and -f switches you can work around it.

-u | --unlimited
If the 'u' switch is given, the connection attempt will never time out; this might be useful if you want to leave a listening socket for a friend of yours while you are sleeping and have the CTCP processing disabled. The 'u' switch works either in active and passive mode.
Examples

# Setup a DCC VOICE connection with Pragma (IRC user)
dcc.voice Pragma
# Setup a DCC VOICE connection with Pragma and use the GSM codec
dcc.voice -g=gsm Pragma
# Setup a DCC VOICE connection with Pragma, use the GSM codec and 22050 Hz sampling rate
dcc.voice -g=gsm -h=22050 Pragma
# Setup a listening socket for a DCC VOICE connection on interface 127.0.0.1 and port 8088
dcc.voice -n -i=127.0.0.1 -p=8088 Pippo
# Connect to the socket above
dcc.voice -c -i=127.0.0.1 -p=8088 Pluto
# Same as above but use the NULL codec with 11025 Hz sampling rate
dcc.voice -g=null -h=11025 -n -i=127.0.0.1 -p=8088 Pippo
# Connect to the socket above
dcc.voice -g=null -h=11025 -c -i=127.0.0.1 -p=8088 Pluto

Index, Commands