unit teamtalk3;
//  Header file v.0.9 for using teamtalk SDK in Delphi
//  by Dimitris Kounalakis <dcoun@medsite.info>
//  Based on Header C file from Teamtalk SDK v3.3a
//  http://www.bearware.dk/
// Modified by Barry Jennings January 19 2008.
// vip-webmaster@vipconduit.com http://www.vipconduit.com
// Combined definitions for the TeamTalk API with the voice logger.
// Added instance pointers to allow multiple instances of a client introduced
// in version 3.4 of the API.
// Made a number of other miscellaneous changes.
// Modified January 28 2008.
// vip-webmaster@vipconduit.com http://www.vipconduit.com
// Added AGC functions.
//  Modified February 3 2008.
// vip-webmaster@vipconduit.com http://www.vipconduit.com
// Changed type wordbool to longbool.
//  Modified February 7 2008.
// vip-webmaster@vipconduit.com http://www.vipconduit.com
// Updated the documentation for TT_SetPlaybackMode and TT_GetPlaybackMode.
//  Modified July 21 2008.
// vip-webmaster@vipconduit.com http://www.vipconduit.com
// Made changes for version 3.5.  Character data now passed as unicode.
// Added a handful of new functions.
interface
uses windows,messages,dialogs,SysUtils;

const TEAMTALK_VERSION='3.4';
      DLL='TeamTalk3.dll';

	/// \def WM_TEAMTALK_CONNECTSUCCESS
	/// Connected successfully to the server. TT_DoLogin can now be called
	/// in order to logon to the server.
	/// @param wParam = ignored
	/// @param lParam = ignored
	/// @see TT_DoLogin
WM_TEAMTALK_CONNECTSUCCESS=WM_USER + 451;

	/// \def WM_TEAMTALK_CONNECTFAILED
	/// Failed to connect to server.
	/// @param wParam = ignored
	/// @param lParam = ignored
WM_TEAMTALK_CONNECTFAILED=WM_USER + 452;

	/// \def WM_TEAMTALK_CONNECTIONLOST
	/// Connection to server has been lost.
	/// @param wParam = ignored
	/// @param lParam = ignored
WM_TEAMTALK_CONNECTIONLOST=WM_USER + 453;

	/// \def WM_TEAMTALK_ACCEPTED
	/// The call to TT_DoLogin was successful.
	/// @param wParam = your UserID
	/// @param lParam = ignored
	/// @see TT_DoLogin
WM_TEAMTALK_ACCEPTED=WM_USER + 454;

	/// \def WM_TEAMTALK_ADDUSER
	/// A new user has joined the channel.
	/// @param wParam = user's UserID
	/// @param lParam Channel ID
WM_TEAMTALK_ADDUSER=WM_USER + 455;

	/// \def WM_TEAMTALK_UPDATEUSER
	/// User information has changed.
	/// @param wParam = user's UserID
	/// @param lParam Channel ID
WM_TEAMTALK_UPDATEUSER=WM_USER + 456;

	/// \def WM_TEAMTALK_REMOVEUSER
	/// User has exited the current channel.
	/// @param wParam = user's UserID
	/// @param lParam Channel ID
WM_TEAMTALK_REMOVEUSER=WM_USER + 457;

	/// \def WM_TEAMTALK_ADDCHANNEL
	/// A new channel has been created.
	/// @param wParam = channel's ChannelID
	/// @param lParam = ignored
WM_TEAMTALK_ADDCHANNEL=WM_USER + 458;

	/// \def WM_TEAMTALK_UPDATECHANNEL
	/// A channel has been removed.
	/// wParam = channel's ChannelID
	/// lParam = ignored
WM_TEAMTALK_UPDATECHANNEL=WM_USER + 459;

	/// \def WM_TEAMTALK_REMOVECHANNEL
	/// A channel has been removed.
	/// @param wParam = channel's ChannelID
	/// @param lParam = ignored
WM_TEAMTALK_REMOVECHANNEL=WM_USER + 460;

	/// \def WM_TEAMTALK_USERMESSAGE
	/// A private message has been received.
	/// @param wParam The user's UserID.
	/// @param lParam = MessageID
	/// @see GetUserMessage
WM_TEAMTALK_USERMESSAGE=WM_USER + 461;

	/// \def WM_TEAMTALK_CHANNELMESSAGE
	/// A channel message has been received.
	///
	/// wParam = channel's ChannelID
	/// lParam = MessageID
WM_TEAMTALK_CHANNELMESSAGE=WM_USER + 462;

	/// \def WM_TEAMTALK_KICKED
	/// You have been kicked from the server.
	/// @param wParam = ignored
	/// @param lParam = ignored
WM_TEAMTALK_KICKED=WM_USER + 463;

	/// \def WM_TEAMTALK_SERVERUPDATE
	/// Server has updated its settings (server name, motd, etc.)
	/// @param wParam = ignored
	/// @param lParam = ignored
WM_TEAMTALK_SERVERUPDATE=WM_USER + 464;

	/// \def WM_TEAMTALK_JOINEDCHANNEL
	/// You have joined a new channel. You'll afterwards receive the
	/// WM_TEAMTALK_ADDUSER message for each of the users in the channel
	/// Note that WM_TEAMTALK_REMOVEUSER will not be called in order
	///	to remove the users from the channel you are currently
	/// participating in.
	/// @param wParam = Channel's ChannelID
	/// @param lParam = ignored
	/// @see WM_TEAMTALK_ADDUSER
	/// @see WM_TEAMTALK_REMOVEUSER
WM_TEAMTALK_JOINEDCHANNEL=WM_USER + 465;

	/// \def WM_TEAMTALK_ERROR
	/// Failed to perform a command. Look up the error number in the
	/// TT3CmdErrors.html file in the Server-directory of the SDK.
	/// Alternatively use TT_GetErrorMessage to get the error
	/// description.
	/// @param wParam = error number
	/// @param lParam = ignored
	/// @see TT_GetErrorMessage
WM_TEAMTALK_ERROR=WM_USER + 466;

	/// \def WM_TEAMTALK_USERTALKING
	/// A user is talking.
	/// @param wParam = user's UserID
	/// @param lParam = ignored
WM_TEAMTALK_USERTALKING=WM_USER + 467;

	/// \def WM_TEAMTALK_USERSTOPPEDTALKING
	/// A user has stopped talking.
	/// @param wParam = user's UserID
	/// @param lParam = ignored
WM_TEAMTALK_USERSTOPPEDTALKING=WM_USER + 468;

	/// \def WM_TEAMTALK_DIRCONNECTIONFAILED
	/// Establishing direct connection to a user failed and
	/// voice data must instead be forward through server.
	/// @param wParam = user's UserID
	/// @param lParam = ignored
WM_TEAMTALK_DIRCONNECTIONFAILED=WM_USER + 469;

	/// \def WM_TEAMTALK_LISTCOMMAND_COMPLETED
	/// A list command issued by TT*_Do* has completed.
	/// @see TT_DoLogin
	/// @see TT_DoJoinChannel
	/// @see TT_Admin_DoLogin
	/// @see TT_Admin_DoListBans
WM_TEAMTALK_LISTCOMMAND_COMPLETED=WM_USER + 470;

	/// \def WM_TEAMTALK_LEFTCHANNEL
	/// This message is posted when leaving a channel. The WPARAM
	/// contains the channel ID. Note that you may not be able to retrieve
	/// the channel you left if it's destroyed just after you leave it.
	///
	/// This message was added to support DoLeaveChannel.
	/// The server needs to support TeamTalk protocol 3.4
	/// (introduced in TeamTalk v. 3.3).
	/// @see TT_DoLeaveChannel
	/// @see TT_DoJoinChannel
WM_TEAMTALK_LEFTCHANNEL=WM_USER + 471;

	/// \def WM_TEAMTALK_LOGGEDOUT
	/// This message is posted when you log out of a server. In
	/// response to TT_DoLogout
	///
	/// The server needs to support TeamTalk protocol 3.4
	/// (introduced in TeamTalk v. 3.3).
	/// @see TT_DoLogout
WM_TEAMTALK_LOGGEDOUT=WM_USER + 472;

	/// \def WM_TEAMTALK_ADDFILE
	/// This message is posted when a new file is added to the
	/// channel a user is participating in. WPARAM contains
	/// the channel ID and LPARAM contains the file ID. Note
	/// that the file ID is not specific to the channel but
	/// is a global ID.
	///
	/// Use TT_Admin_GetChannelFileInfo or TT_GetChannelFileInfo to get
	/// information about the file.
	/// @param wParam Channel ID
	/// @param lParam File ID
	/// @see TT_Admin_GetChannelFileInfo
	/// @see TT_GetChannelFileInfo
WM_TEAMTALK_ADDFILE=WM_USER + 473;

	/// \def WM_TEAMTALK_REMOVEFILE
	/// This message is posted when a file is removed from the
	/// channel a user is participating in. WPARAM contains
	/// the channel ID and LPARAM contains the file ID.
	///
	/// Note that you may not be able to retrieve information
	/// about the file being removed because it's an async call.
WM_TEAMTALK_REMOVEFILE=WM_USER + 474;

	/// \def WM_TEAMTALK_TRANSFER_BEGIN
	/// This message is posted when a new file transfer is
	/// started. WPARAM contains the transfer id which can
	/// be passed to TT_Admin_GetFileTransferInfo.
	///
	/// @see TT_Admin_GetFileTransferInfo
WM_TEAMTALK_TRANSFER_BEGIN=WM_USER + 475;

	/// \def WM_TEAMTALK_TRANSFER_COMPLETED
	/// This message is posted when a file transfer is
	/// completed. WPARAM contains the transfer id.
	///
WM_TEAMTALK_TRANSFER_COMPLETED=WM_USER + 476;

	/// \def WM_TEAMTALK_TRANSFER_FAILED
	/// This message is posted if a file transfer
	/// fails. WPARAM contains the transfer id. A file
	/// transfer which was rejected by the server will
	/// have a transfer id of 0. LPARAM contains the
	/// error number. Use TT_GetErrorMessage to get the
	/// error description.
	/// @see TT_GetErrorMessage
WM_TEAMTALK_TRANSFER_FAILED=WM_USER + 477;


	/// \def WM_TEAMTALK_BROADCASTMESSAGE
	/// This message is posted if an admin has sent a broadcast
	/// text message to all users on the server.
	///
	/// Broadcast message were introduced in TeamTalk protocol
	/// version 3.4 (TeamTalk release 3.3)
	/// @param wParam The user's ID.
	/// @param lParam The message's ID
	/// @see TT_GetBroadcastMessage
WM_TEAMTALK_BROADCASTMESSAGE=WM_USER + 478;

	/// \def WM_TEAMTALK_ADMINMESSAGE
	/// This message is posted if an admin has sent you a
	/// text message. The message is extracted in the same
	/// way as regular user messages.
	///
	/// Admin messages were introduced in TeamTalk protocol
	/// version 3.4 (TeamTalk release 3.3)
	/// @see TT_GetUserMessage
	/// @param wParam The user's UserID.
	/// @param lParam = MessageID
WM_TEAMTALK_ADMINMESSAGE=WM_USER + 479;

	/// \def WM_TEAMTALK_USERLOGGEDIN
	/// This message is posted when a client logs on to a
	/// server (successful call to TT_DoLogin). Use
	/// TT_Admin_GetUser to get information about the user.
	///
	/// @param wParam The user's ID.
	/// @param lParam Unused
	/// @see TT_DoLogin
	/// @see TT_Admin_GetUser
	/// @see WM_TEAMTALK_USERLOGGEDOUT
WM_TEAMTALK_USERLOGGEDIN=WM_USER + 480;

	/// \def WM_TEAMTALK_USERLOGGEDOUT
	/// This message is posted when a client logs out of a
	/// server (successful call to TT_DoLogout). This message
	/// is also called with the user disconnects with
	/// TT_Disconnect
	///
	/// @param wParam The user's ID.
	/// @param lParam Unused
	/// @see TT_DoLogout
	/// @see TT_Disconnect
	/// @see WM_TEAMTALK_USERLOGGEDIN
WM_TEAMTALK_USERLOGGEDOUT=WM_USER + 481;

	/// \def WM_TEAMTALK_HOTKEY
	/// @param wParam = hotkey ID
	/// @param lParam is TRUE when hotkey is active and FALSE when
	/// it becomes inactive.
	/// @see TT_RegisterHotKey
	/// @see TT_UnregisterHotKey
WM_TEAMTALK_HOTKEY=WM_USER + 500;

	/// \def WM_TEAMTALK_KEYTEST
	/// @param wParam is the virtual key code.
	/// @param lParam is the TRUE when key is down and
	/// FALSE when released.
WM_TEAMTALK_KEYTEST=WM_USER + 501;

	/// \def WM_TEAMTALK_AUDIOFILE_STATUS
	/// @param wParam The user ID
	/// @param lParam Pointer to AudioFileStatus
WM_TEAMTALK_AUDIOFILE_STATUS = WM_USER + 502;

/// \def SOUNDSYSTEM_WINMM
	/// Initialize TT_LaunchSoundSystem with SOUNDSYSTEM_WINMM
	/// to use Windows sound system.
	/// @see TT_LaunchSoundSystem
SOUNDSYSTEM_WINMM=1;

	/// \def SOUNDSYSTEM_DSOUND
	/// Initialize TT_LaunchSoundSystem with SOUNDSYSTEM_DSOUND
	/// to use DirectSound.
	/// @see TT_LaunchSoundSystem
SOUNDSYSTEM_DSOUND=2;

	/// \def ENC_QUALITY_MAX
	/// Encoder quality to use. Higher value will increase CPU
	/// usage and voice quality.
	/// @see TT_LaunchSoundSystem
ENC_QUALITY_MAX=10;

	/// \def ENC_QUALITY_DEFAULT
	/// The default voice quality is 2 which is fine for most
	/// conversations.
	/// @see TT_LaunchSoundSystem
ENC_QUALITY_DEFAULT=2;

	/// \def ENC_QUALITY_MIN
	/// Encoder quality to use. Higher value will increase CPU
	/// usage and voice quality.
	/// @see TT_LaunchSoundSystem
ENC_QUALITY_MIN=1;

	/// \def SOUND_VU_MAX
	/// The maximum value of recorded audio.
	/// @see TT_GetCurrentInputLevel
	/// @see TT_SetVoiceActivationLevel
	/// @see TT_GetVoiceActivationLevel
SOUND_VU_MAX=20;

	/// \def SOUND_VU_MIN
	/// The minimum value of recorded audio.
	/// @see TT_GetCurrentInputLevel
	/// @see TT_SetVoiceActivationLevel
	/// @see TT_GetVoiceActivationLevel
SOUND_VU_MIN=0;

	/// \def SOUND_VOLUME_MAX
	/// The maximum volume for master volume and user.
	/// @see TT_SetMasterVolume
	/// @see TT_GetMasterVolume
	/// @see TT_SetUserVolume
	/// @see TT_GetUserVolume
SOUND_VOLUME_MAX=255;

	/// \def SOUND_VOLUME_MIN
	/// The minimum volume for master volume and user.
	/// @see TT_SetMasterVolume
	/// @see TT_GetMasterVolume
	/// @see TT_SetUserVolume
	/// @see TT_GetUserVolume
SOUND_VOLUME_MIN=0;

	/// \def GAIN_LEVEL_MAX
	/// The maximum gain level. A gain level of 4000 gains the
	/// volume by a factor four (new volume = gain level / 1000).
	/// A gain level of 1000 means no gain.
	/// @see TT_SetVoiceGainLevel
	/// @see TT_GetVoiceGainLevel
	/// @see TT_SetUserGainLevel
	/// @see TT_GetUserGainLevel
GAIN_LEVEL_MAX=8000;

	/// \def GAIN_LEVEL_DEFAULT
	/// The default gain level. A gain level of 1000 means no gain.
	/// Check GAIN_LEVEL_MAX and GAIN_LEVEL_MIN to see how to
	/// increase and lower gain level.
	/// @see TT_SetVoiceGainLevel
	/// @see TT_GetVoiceGainLevel
	/// @see TT_SetUserGainLevel
	/// @see TT_GetUserGainLevel
GAIN_LEVEL_DEFAULT=1000;


	/// \def GAIN_LEVEL_MIN
	/// The minimum gain level. A gain level of 100 is 1/10 of
	/// of the normal volume (new volume = gain level / 1000).
	/// @see TT_SetVoiceGainLevel
	/// @see TT_GetVoiceGainLevel
	/// @see TT_SetUserGainLevel
	/// @see TT_GetUserGainLevel
GAIN_LEVEL_MIN=100;

	/// \def COMPLEXITY_MAX
	/// The maximum complexity used by the audio encoder.
	/// The complexity setting determines how much time the
	///	the encoder is allowed to use to encode an audio frame.
COMPLEXITY_MAX=10;

		/// \def COMPLEXITY_DEFAULT
	/// The default complexity used by the audio encoder.
	/// The complexity setting determines how much time the
	///	the encoder is allowed to use to encode an audio frame.
COMPLEXITY_DEFAULT=2;

	/// \def COMPLEXITY_MIN
	/// The minimum complexity used by the audio encoder.
	/// The complexity setting determines how much time the
	///	the encoder is allowed to use to encode an audio frame.
COMPLEXITY_MIN=1;

	/// \def USERSTATUS_AVAILABLE
	/// User's status mode is set to available.
	/// @see TT_GetUser
	/// @see TT_DoChangeStatus
USERSTATUS_AVAILABLE=0;

	/// \def USERSTATUS_AWAY
	/// User's status mode is set to away.
	/// @see TT_GetUser
	/// @see TT_DoChangeStatus
USERSTATUS_AWAY=1;

	/// \def TT_STRLEN
	/// The maximum length of a string when extracting information
	/// from the TeamTalk client. As of TeamTalk 3.1.1 strings are
	/// encoded in UTF-8 to support unicode. You'll have to do this
	/// conversion yourself, look up WideCharToMultiByte(.) and
	/// MultiByteToWideChar(.) in the Win32-documentation.
TT_STRLEN=512;

	/// A struct to hold a banned user. This structure is use by TT_Admin_GetBannedUsers
	/// @see TT_Admin_GetBannedUsers
type int=longint;
type BOOL=longbool;
type Tttstr=array[0..TT_STRLEN-1]of WideChar;

type 	TT_BannedUser=record
		szIpAddress, szChannelPath,	szTime, szNick:Tttstr;   end;
type  PTT_BannedUser=^TT_BannedUser;

	/// A struct for holding a channel. This structure is used by both the client and admin.
	/// As client the field szPassword will not be filled but instead the bPassword field.
	/// @see TT_Admin_GetChannel  @see TT_GetChannel
type TT_channel=record
		nParentID, nChannelID:int;
		szName,	szTopic:Tttstr;
		szPassword:Tttstr;	//only set in TT_Admin_*
		bPassword, bStatic:BOOL;
		nDiskQuota:Int64;
		szOpPassword:Tttstr;	//only set in TT_Admin_*
        nMaxUsers: int;
    end;
type PTT_channel=^TT_channel;

	/// A struct for holding a user's information. This structure is used by both the client and admin.
	/// @see TT_GetUser  @see TT_Admin_GetUser
type TT_User=record
    nUserID:int;
		szNickName:Tttstr;
		nStatusMode:int;
		szStatusMsg:Tttstr;
		nChannelID:int;
		szAddress:Tttstr;
		nUdpPort:int;
		szVersion:Tttstr;
		nFrequency,	nPacketsLost,	nPacketsCount, nPlayingPacket:int;
		bForwarding, bTalking,bAdmin:BOOL;
    end;
type PTT_User=^TT_User;

	/// A struct for holding a file transfer's information.
	/// @see TT_GetFileTransferInfo @see TT_Admin_GetFileTransferInfo
type TT_FileTransfer=record
    nTransferID, nChannelID:int;
		szLocalFilePath, szRemoteFileName:Tttstr;
		nFileSize, nTransferred:int64;
		bInbound:BOOL; //TRUE if download and FALSE if upload
    end;
type PTT_FileTransfer=^TT_FileTransfer;

	/// A struct for holding information about a file.
	/// @see TT_GetChannelFileInfo  @see TT_Admin_GetChannelFileInfo
type  TT_FileInfo=record
		nFileID:int;
		szFileName:Tttstr;
		nFileSize:int64;
    end;
type PTT_FileInfo=^TT_FileInfo;

	/// A struct for holding information about a server. This structure is only used by the admin.
	/// @see TT_Admin_GetServerProperties
type TT_ServerProperties=record
    szServerName,	szServerPasswd,	szMOTD,	szOpMePassword:Tttstr;
		bAllowChannels,	bAllowOperators:BOOL;
		nMaxUsers:int;
		bAutoSave,bShowAllUsers:BOOL;
    end;
type PTT_ServerProperties=^TT_ServerProperties;

	/// An enum for the different playback modes.
	///
	/// Mode PLAYBACKMODE_STABLE allows playback to buffer audio and
	/// only starts skipping packets if the buffer holds more than 10 packets.
	/// Mode PLAYBACKMODE_LOWLATENCY tries to keep the buffer below
	/// 2 packets after which it will start skipping packets.
	/// Mode PLAYBACKMODE_VARIABLE changes the sample rate of playback
	/// in order to ensure low lantency.
	/// Mode PLAYBACKMODE_JITTER uses a jitter buffer for keeping low latency.
	/// @see TT_SetPlaybackMode
	/// @see TT_GetPlaybackMode
type PlaybackMode = (
		PLAYBACKMODE_STABLE = 0,
		PLAYBACKMODE_LOWLATENCY = 1,
		PLAYBACKMODE_VARIABLE = 2,
		PLAYBACKMODE_JITTER = 3);

/// Status messages for audio files being written to disk.
/// @see AudioFile
type AudioFileStatus = (
		AFS_WAV_ERROR = 0,
		AFS_WAV_STARTED = 1,
		AFS_WAV_FINISHED = 2,
		AFS_ENCODING_ERROR = 3,
		AFS_ENCODING_BEGIN = 4,
		AFS_ENCODING_FINISHED = 5);

/// A struct for holding information about a recording performed by
/// the admin.
///
/// @see TT_Admin_DoSubscribe
/// @see TT_Admin_SetChannelAudioFolder
/// @see WM_TEAMTALK_AUDIOFILE_STATUS
type AudioFile = record
  UserID: int;
  NFileStatus: AudioFileStatus;
  szFileName: tttstr
end;

/// Events and/or data users can subscribe to.
///
/// @see TT_DoSubscribe
/// @see TT_DoUnsubscribe
/// @see TT_DoUserSubscribe
/// @see TT_DoUserUnsubscribe
/// @see TT_Admin_DoSubscribe
/// @see TT_Admin_DoUnsubscribe
/// @see TT_Admin_DoUserSubscribe
/// @see TT_Admin_DoUserUnsubscribe
type Subscriptions = (
		SUBSCRIBE_NONE = $00,
		SUBSCRIBE_AUDIO = $01,
		SUBSCRIBE_USER_MSG = $02,
		SUBSCRIBE_CHANNEL_MSG = $04,
		SUBSCRIBE_BROADCAST_MSG = $08,
		SUBSCRIBE_ALL = $FF);

	/// Initialize the TeamTalk client. This function must be invoked before any
	/// other of the TT_* functions can be called. Call TT_CloseTeamTalk to
	/// shutdown the TeamTalk client.
	///
	/// @param hWnd The window handle which will receive the WM_TEAMTALK_* messages.
	/// @param bLLMouseHook Install low-level mouse. When debugging it's best to
	/// to disable it otherwise the mouse cursor will be slow.
	/// @param pNewClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @see TT_CloseTeamTalk
function TT_InitTeamTalk(hWnd:HWND; bLLMouseHook:BOOL; var pNewClientInstance:pointer):BOOL; cdecl; external DLL;

	/// Close the TeamTalk client and release its resources.
	/// You'll need to call TT_InitTeamTalk before you call
	/// any of the other TT_* functions.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @see TT_InitTeamTalk
function TT_CloseTeamTalk(pClientInstance:pointer):BOOL;  cdecl; external DLL;

	/// Get the number of input devices.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param nSoundSystem the sound system to examine.
	/// @see SOUNDSYSTEM_DSOUND
	/// @see SOUNDSYSTEM_WINMM
	/// @see TT_GetInputDevice
function TT_GetInputDevicesCount(pClientInstance:pointer; nSoundSystem:int):int;   cdecl; external DLL;

	/// Get information about an input device. Note that DirectSound is
	/// HIGHLY recommended.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param nSoundSystem The sound system to examine. Can be either
	/// SOUNDSYSTEM_DSOUND or SOUNDSYSTEM_WINMM
	/// @param nIndex The index of the device to extract.
	/// @param szName Will receive the name of the device.
	/// @param lpnDeviceID Will receive the device's ID
	/// @see SOUNDSYSTEM_DSOUND
	/// @see SOUNDSYSTEM_WINMM
	/// @see TT_GetInputDevicesCount
function TT_GetInputDevice(pClientInstance:pointer; nSoundSystem:int; nIndex:int; var szName:Tttstr; var lpnDeviceID:int):BOOL;  cdecl; external DLL;

	/// Get the number of output devices.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param nSoundSystem the sound system to examine.
	/// @see SOUNDSYSTEM_DSOUND
	/// @see SOUNDSYSTEM_WINMM
	/// @see TT_GetOutputDevice
function TT_GetOutputDevicesCount(pClientInstance:pointer; nSoundSystem:int):int;  cdecl; external DLL;

	/// Get information about an input device.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param nSoundSystem the sound system to examine.
	/// @param nIndex the index of the device to extract.
	/// @param szName will receive the name of the device.
	/// @param lpbSupports3D will receive whether the device supports 3D audio.
	/// @param lpnDeviceID will receive the device's ID
	/// @see SOUNDSYSTEM_DSOUND
	/// @see SOUNDSYSTEM_WINMM
	/// @see TT_GetOutputDevicesCount
function TT_GetOutputDevice(pClientInstance:pointer; nSoundSystem:int; nIndex:int; var szName:Tttstr;
		    var lpbSupports3D:BOOL; var lpnDeviceID:int):BOOL;  cdecl; external DLL;

	/// Launch the sound system.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param nSoundSystem Should be SOUNDSYSTEM_DSOUND for DirectSound
	/// and SOUNDSYSTEM_WINMM for Windows sound system.
	/// @param nInputDeviceID Should be the device ID extracted through TT_GetInputDevice.
	/// Pass -1 to use the default device.
	/// @param nOutputDeviceID Should be the device ID extracted through TT_GetOutputDevice.
	/// Pass -1 to use the default device.
	/// @param nRecorderFreq The frequency the client's recorder should use. It can either be
	/// 8000 Hz, 16000 Hz or 32000 Hz.
	/// @param nQuality is the quality that the client's encoder should use. A value between 1 and 10 is
	/// accepted. 4 gives an acceptable voice quality for most use.
	/// @see SOUNDSYSTEM_DSOUND
	/// @see SOUNDSYSTEM_WINMM
	/// @see TT_GetInputDevice
	/// @see TT_GetOutputDevice
	/// @see ENC_QUALITY_MAX
	/// @see ENC_QUALITY_MIN
function TT_LaunchSoundSystem(pClientInstance:pointer; nSoundSystem:int;
		nInputDeviceID:int; nOutputDeviceID:int; nRecorderFreq:int;
		nQuality:int):BOOL;   cdecl; external DLL;

	/// Whether sound system has been initialized successfully.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @see TT_LaunchSoundSystem
	/// @see TT_ShutdownSoundSystem
function TT_IsSoundSystemInitialized(pClientInstance:pointer):BOOL;  cdecl; external DLL;

	/// Shutdown the sound system.
	///
	/// Remember to disconnect from the server and shutdown the
	/// sound system when you quit your application.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @see TT_LaunchSoundSystem
function TT_ShutdownSoundSystem(pClientInstance:pointer):BOOL;   cdecl; external DLL;

	/// Restart the sound system
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param nSoundSystem Should be SOUNDSYSTEM_DSOUND for DirectSound
	/// and SOUNDSYSTEM_WINMM for Windows sound system.
	/// @param nInputDeviceID Should be the device ID extracted through TT_GetInputDevice.
	/// Pass -1 to use the default device.
	/// @param nOutputDeviceID Should be the device ID extracted through TT_GetOutputDevice.
	/// Pass -1 to use the default device.
function RestartSoundSystem(pClientInstance:pointer; nSoundSystem:int; nInputDeviceID:int; nOutputDeviceID:int):bool; cdecl; external DLL;

	/// Experimental
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
function TT_SetEncoderComplexity(pClientInstance:pointer; nComplexity:int):BOOL;   cdecl; external DLL;

	/// Experimental
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
function TT_GetEncoderComplexity(pClientInstance:pointer):int;  cdecl; external DLL;

	/// Perform a record and playback test of specified sound devices.
	///
	/// Note that this test cannot be performed while the sound system is launch.
	/// Call TT_StopSoundLoopbackTest() to stop the loopback test.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param nSoundSystem 1 for Windows audio, 2 for DirectSound
	/// @param nInputDeviceID Should be the device ID extracted through TT_GetInputDevice.
	/// Pass -1 to use the default device.
	/// @param nOutputDeviceID Should be the device ID extracted through TT_GetOutputDevice.
	/// Pass -1 to use the default device.
	/// @param nRecorderFreq The frequency the client's recorder should use. It can either be
	/// 8000 Hz, 16000 Hz or 32000 Hz.
	/// @see TT_LaunchSoundSystem
	/// @see TT_StopSoundLoopbackTest
function TT_StartSoundLoopbackTest(pClientInstance:pointer; nSoundSystem:int;
		nInputDeviceID:int; nOutputDeviceID:int; nRecorderFreq:int):BOOL;  cdecl; external DLL;

	/// Stop recorder and playback test.
	///
	/// Don't call this function if you have initialized the sound
	/// system through TT_LaunchSoundSystem.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @see TT_LaunchSoundSystem
function TT_StopSoundLoopbackTest(pClientInstance:pointer):BOOL;  cdecl; external DLL;

	/// Get the number of samples required for TeamTalk to send
	/// a packet using the specified recorder frequency and quality.
	///
	/// @param nRecorderFreq Should be either 8000, 16000 or 32000 Hz.
	/// @param nQuality A value between ENC_QUALITY_MIN and ENC_QUALITY_MAX
	/// @see ENC_QUALITY_MIN
	/// @see ENC_QUALITY_MAX
function TT_GetSamplesPerPacket(nRecorderFreq:int; nQuality:int):int;  cdecl; external DLL;

	/// Get the number of bytes in a packet with the specified settings.
	///
	/// @param nRecorderFreq Should be either 8000, 16000 or 32000 Hz.
	/// @param nQuality A value between ENC_QUALITY_MIN and ENC_QUALITY_MAX
	/// @see ENC_QUALITY_MIN
	/// @see ENC_QUALITY_MAX
function TT_GetPacketSize(nRecorderFreq:int; nQuality:int):int;  cdecl; external DLL;

	/// Get the value of the currently recorded audio.
	///
	/// Returns a value between SOUND_VU_MIN and SOUND_VU_MAX
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @see SOUND_VU_MIN
	/// @see SOUND_VU_MAX
function TT_GetCurrentInputLevel(pClientInstance:pointer):int; cdecl; external DLL;

	/// Set master volume. Note that it does not affect the Windows mixer.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @see SOUND_VOLUME_MAX
	/// @see SOUND_VOLUME_MIN
function TT_SetMasterVolume(pClientInstance:pointer; nVolume:int):BOOL;  cdecl; external DLL;

	/// Get master volume.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @see SOUND_VOLUME_MAX
	/// @see SOUND_VOLUME_MIN
	/// @return Returns the master volume.
function TT_GetMasterVolume(pClientInstance:pointer):int;  cdecl; external DLL;

	/// Set all users mute.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
function TT_MuteAll(pClientInstance:pointer; bMuteAll:BOOL):BOOL;  cdecl; external DLL;

	/// Is all users set to mute.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
function TT_IsAllMute(pClientInstance:pointer):BOOL;  cdecl; external DLL;

	/// Enable denoising of outgoing audio
	/// @see TT_IsDenoising
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
function TT_EnableDenoising(pClientInstance:pointer; bEnable:BOOL):BOOL;  cdecl; external DLL;

	/// Is denoising outgoing audio
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @see TT_EnableDenoising
function TT_IsDenoising(pClientInstance:pointer):BOOL;  cdecl; external DLL;

	/// Set voice gaining of recorded audio.
	/// The gain level ranges from 100 - 4000 where 1000 is no gain.
	/// So 100 is 1/10 of the original volume and 8000 is 8 times the original volume.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @see TT_GetVoiceGainLevel
function TT_SetVoiceGainLevel(pClientInstance:pointer; nLevel:int):BOOL;   cdecl; external DLL;

	/// Get voice gain level of outgoing audio
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @see TT_SetVoiceGainLevel
function TT_GetVoiceGainLevel(pClientInstance:pointer):int;  cdecl; external DLL;

	/// Enable voice activation.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
function TT_EnableVoiceActivation(pClientInstance:pointer; bEnable:BOOL):BOOL;   cdecl; external DLL;

	/// Whether voice activation is enabled.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
function TT_IsVoiceActivated(pClientInstance:pointer):BOOL;  cdecl; external DLL;

	/// Set voice activation level.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param nLevel must be between SOUND_VU_MIN and SOUND_VU_MAX
	/// @see SOUND_VU_MIN
	/// @see SOUND_VU_MAX
function TT_SetVoiceActivationLevel(pClientInstance:pointer; nLevel:int):BOOL;  cdecl; external DLL;

	/// Get voice activation level.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @return Returns a value between SOUND_VU_MIN and  SOUND_VU_MAX
	/// @see SOUND_VU_MIN
	/// @see SOUND_VU_MAX
function TT_GetVoiceActivationLevel(pClientInstance:pointer):int;  cdecl; external DLL;

	/// Enable Automatic Gain Control
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param bEnable Whether to enable AGC.
function TT_EnableAGC(PClientInstance:pointer; bEnable:bool):BOOL; cdecl; external DLL;

	/// Set Automatic Gain Control settings.
	///
	/// Since microphone volumes may vary AGC can be used to adjust a signal
	/// to a reference volume. That way users will speak at the same volume
	/// level.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param nGainLevel A value from 0 to 32768. Default is 8000.
	/// @param nMaxIncrement Used so volume
	/// should not be amplified too quickly (maximal gain increase in dB/second).
	/// Default is 12.
	/// @param nMaxDecrement Negative value! Used so volume
	/// should not be attenuated too quickly (maximal gain decrease in dB/second).
	/// Default is -40.
	/// @param nMaxGain Ensure volume doesn't become too loud (maximal gain in dB).
	/// Default is 30.
function TT_SetAGCSettings(pClientInstance:pointer; nGainLevel:int;
nMaxIncrement:int; nMaxDecrement:int; nMaxGain:int):BOOL; cdecl; external DLL;

	/// Get Automatic Gain Control settings.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param lpnGainLevel A value from 0 to 32768.
	/// @param lpnMaxIncrement Used so volume
	/// should not be amplified too quickly (maximal gain increase in dB/second).
	/// @param lpnMaxDecrement Negative value! Used so volume
	/// should not be attenuated too quickly (maximal gain decrease in dB/second).
	/// @param lpnMaxGain Ensure volume doesn't become too loud (maximal gain in dB).
	/// @see TT_EnableAGC
function TT_GetAGCSettings(pClientInstance: pointer; var lpnGainLevel: int;
var lpnMaxIncrement:int; var lpnMaxDecrement:int;
var lpnMaxGain:int):BOOL; cdecl; external DLL;

	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @see TT_SetUserPosition
function TT_EnableAutoPositioning(pClientInstance: pointer; bEnable:BOOL):BOOL;  cdecl; external DLL;

	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @see TT_SetUserPosition
function TT_IsAutoPositioning(pClientInstance:pointer):BOOL;  cdecl; external DLL;

	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @see TT_SetUserPosition
function TT_AutoPositionUsers(pClientInstance:pointer):BOOL;  cdecl; external DLL;

	/// Set the playback mode used for playing user's sound.
	///
	/// There's four ways to play sound from users:
	/// PLAYBACKMODE_STABLE uses a very defensive approach for playback
	/// where it tries to play all audio packets which are received from
	/// a client.
	/// PLAYBACKMODE_LOWLATENCY uses a very agressive approach for playback
	/// where it tries to keep the playback buffer empty by skipping packets
	/// if needed.
	/// PLAYBACKMODE_VARIABLE uses variable playback rate which increases
	/// and decreases the samplerate of the user's sound to prevent either a
	/// buffer overflow or buffer underflow of incoming packets.
	/// PLAYBACKMODE_JITTER uses a jitter buffer to ensure real-time playback of
	/// user's sound.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param mode See PlaybackMode enumeration for types of playback
	/// @see PlaybackMode
	/// @see TT_GetPlaybackMode
  function TT_SetPlaybackMode(pClientInstance:pointer; mode:int):BOOL; cdecl; external DLL;

	/// The currently selected playback mode.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @return See PlaybackMode enumeration for types of playback
	/// @see TT_SetPlaybackMode
	/// @see PlaybackMode
function TT_GetPlaybackMode(pClientInstance:pointer):int; cdecl; external DLL;

	/// Enable echo cancellation (experimental). Still not working properly.
	///
	/// Note that it's very CPU intensive.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
function TT_EnableEchoCancellation(pClientInstance:pointer; bEnable:BOOL):BOOL;  cdecl; external DLL;

	/// Whether echo cancellation is active. Default is false.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
function TT_IsEchoCancelling(pClientInstance:pointer):BOOL; cdecl; external DLL;

	/// Connect to a server. This is a non-blocking call,
	/// the message WM_TEAMTALK_CONNECTSUCCESS will be sent once
	/// the connection has been established or WM_TEAMTALK_CONNECTFAILED
	/// if connection could not be established.
	/// Sound system must be initialized before you connect
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param lpszHostAddress The IP-address or hostname of the server.
	/// @param nTcpPort The host port of the server (TCP).
	/// @param nUdpPort The sound port of the server (UDP).
	/// @param nLocalTcpPort The local Tcp port which should be used.
	/// Setting it to 0 makes Windows select a port number (recommended).
	/// @param nLocalUdpPort The local Udp port which should be used.
	/// Setting it to 0 makes Windows select a port number (recommended).
	/// @see WM_TEAMTALK_CONNECTSUCCESS
	/// @see WM_TEAMTALK_CONNECTFAILED
function TT_Connect(pClientInstance: pointer; const lpszHostAddress:PWideChar; nTcpPort:int;
		       nUdpPort:int; nLocalTcpPort:int; nLocalUdpPort:int):BOOL;  cdecl; external DLL;

	/// Whether the client is connected to a server.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
function TT_IsConnected(pClientInstance:pointer):BOOL; cdecl; external DLL;

	/// Whether the client is currently connecting to a server.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
function TT_IsConnecting(pClientInstance:pointer):BOOL; cdecl; external DLL;

	/// Disconnect from a server.
	///
	/// Remember to disconnect from the server and afterwards
	/// shutdown the sound system when you quit your application.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
function TT_Disconnect(pClientInstance:pointer):BOOL; cdecl; external DLL;

	/// Logon to a TeamTalk server.
	///
	/// Once connected to a server call TT_DoLogin(..) to logon. If the
	/// login is successful WM_TEAMTALK_ACCEPTED is posted to your HWND,
	/// otherwise WM_TEAMTALK_ERROR. Once logged on you're not in a channel.
	/// Call TT_DoJoinChannel to join a channel.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param lpszNickName is the nick name to use.
	/// @param lpszServerPassword is the server's password.
	/// @see TT_DoJoinChannel
	/// @see WM_TEAMTALK_ACCEPTED
	/// @see WM_TEAMTALK_ERROR
function TT_DoLogin(pClientInstance:pointer; const lpszNickName:PWideChar; const lpszServerPassword:PWideChar):BOOL; cdecl; external DLL;

	/// Whether the client is authorized on the server (has received the
	/// WM_TEAMTALK_ACCEPTED message). Use TT_DoLogin(..) to log on to
	/// server and TT_DoLogout() to log out of the server.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @see WM_TEAMTALK_ACCEPTED
function TT_IsAuthorized(pClientInstance:pointer):bool; cdecl; external DLL;

	/// Logout of a server.
	///
	/// If successful the message WM_TEAMTALK_LOGGEDOUT will be posted.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @see WM_TEAMTALK_LOGGEDOUT
function TT_DoLogout(pClientInstance:pointer):BOOL; cdecl; external DLL;

	/// Join a channel.
	///
	/// DoJoinChannel(...) also works as a channel creator. It's a bit similar to IRC.
	/// If you try to join a channel which does not exist it will be created as a new
	/// channel. If you are the last user in the channel you're leaving then the channel
	/// will be removed on the server (unless it's a static channel). Subchannels are
	/// separated by '/' so to create a channel called "foo" with the password "bar"
	/// and the topic "FooBar" you call DoJoinChannel in the following way:
	/// DoJoinChannel("/foo", "bar", "FooBar").
	///
	/// If the channel is created successfully the message WM_TEAMTALK_ADDCHANNEL
	/// will be sent, followed by WM_TEAMTALK_JOINEDCHANNEL.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param lpszChannelPath The channel to join. Channels are separated by a '/'.
	/// @param lpszPassword The password for the channel to join or for a new channel.
	/// @param lpszTopic A topic that can be set for a new channel. Don't include a topic
	/// if the channel already exists.
	/// @param lpszOpPassword The password a user can specify to become channel operator.
	/// The password must be sent as a channel message using the prefix "/op".
	/// @see TT_DoChannelMessage
	/// @see WM_TEAMTALK_ADDCHANNEL
	/// @see WM_TEAMTALK_JOINEDCHANNEL
function TT_DoJoinChannel(pClientInstance:pointer; const lpszChannelPath:PWideChar; const lpszPassword:PWideChar;
      const lpszTopic:PWideChar; const lpszOpPassword:PWideChar):BOOL;  cdecl; external DLL;

	/// Leave a channel.
	///
	/// Note that TT_DoLeaveChannel() doesn't take any parameters since a user can
	/// only participate in one channel at the time.
	/// If command is successful the message WM_TEAMTALK_REMOVEUSER will be sent
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @see DoJoinChannel
	/// @see WM_TEAMTALK_REMOVEUSER
	/// @see WM_TEAMTALK_LEFTCHANNEL
function TT_DoLeaveChannel(pClientInstance:pointer):BOOL;  cdecl; external DLL;

	/// Change your nick name.
	///
	/// The message WM_TEAMTALK_UPDATEUSER will be posted if the update
	/// was successful.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param lpszNewNick is the new nick name to use.
	/// @see WM_TEAMTALK_UPDATEUSER
function TT_DoChangeNick(pClientInstance:pointer; const lpszNewNick:PWideChar):BOOL; cdecl; external DLL;

	/// Change your current status
	///
	/// The message WM_TEAMTALK_UPDATEUSER will be posted if the update
	/// was successful.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param nStatusMode should be 0 for available and 1 for away.
	/// @param lpszStatusMessage The users message associated with the status mode.
	/// @see USERSTATUS_AVAILABLE
	/// @see USERSTATUS_AWAY
	/// @see WM_TEAMTALK_UPDATEUSER
function TT_DoChangeStatus(pClientInstance:pointer; nStatusMode:int; const lpszStatusMessage:PWideChar):BOOL; cdecl; external DLL;

	/// Send a private message to a user.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param nToUserID The user who'll receive the message.
	/// @param lpszContent The message can be multi-line (include EOL)
	/// but should not be longer than TT_STRLEN - 1 characters.
function TT_DoUserMessage(pClientInstance:pointer; nToUserID:int; const lpszContent:PWideChar):BOOL; cdecl; external DLL;

	/// Send a message to the channel you're currently participating in.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param lpszContent is the message. The message can be multi line but should not
	/// be longer than TT_STRLEN - 1 characters.
function TT_DoChannelMessage(pClientInstance:pointer; const lpszContent:PWideChar):BOOL; cdecl; external DLL;

	/// Make another user channel operator. Requires that you are channel operator.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param nUserID is the user who should become channel operator.
function TT_DoChannelOp(pClientInstance:pointer; nUserID:int):BOOL; cdecl; external DLL;

	/// Kick a user from the channel you are currently participating in.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
function TT_DoKick(pClientInstance:pointer; nUserID:int):BOOL; cdecl; external DLL;

	/// Get the server's message of the day (MOTD).
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param szMotd will receive the MOTD.
function TT_GetMessageOfTheDay(pClientInstance:pointer; var szMotd:Tttstr):BOOL; cdecl; external DLL;

	/// Get the server's name
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param szName will receive the server's name.
function TT_GetServerName(pClientInstance:pointer; var szName:Tttstr):BOOL; cdecl; external DLL;

	/// Get the server's client properties
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
function TT_GetServerProperties(pClientInstance:pointer; var ServerProperties:TT_ServerProperties):bool; cdecl; external DLL;

	/// Get the root channel's ID
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @return Returns the ID of the root channel. If -1 is returned no root channel exists.
function TT_GetRootChannelID(pClientInstance:pointer):int; cdecl; external DLL;

	/// Get the channel current user is participating in.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @return Returns the ID of the current channel. If 0 is returned the
	/// user is not participating in a channel.
function TT_GetMyChannelID(pClientInstance:pointer):int; cdecl; external DLL;

	/// Get the channel with a specific ID.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param nChannelID The ID of the channel to get information about.
	/// @param lpChannel A pointer to a Channel struct which will receive the channel's data.
	/// @return FALSE if unable to retrieve channel otherwise TRUE
function TT_GetChannel(pClientInstance:pointer; nChannelID:int; var lpChannel:TT_Channel):BOOL; cdecl; external DLL;

	/// Get the channel's path. Channels are separated by '/'
	/// @param nChannelID The channel's ID
	/// @param szChannelPath Will receive the channel's path.
	/// @return Returns TRUE if channel exists.                                  	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
function TT_GetChannelPath(pClientInstance:pointer; nChannelID:int; var szChannelPath:Tttstr):BOOL; cdecl; external DLL;

	/// Get the number of users in a channel.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param nChannelID is the ID of the channel.
function TT_GetChannelUserCount(pClientInstance:pointer; nChannelID:int):int; cdecl; external DLL;

	/// Get a channel message.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param nChannelID the ID of the channel to extract the message.
	/// @param nMsgID the ID of the message to extract.
	/// @param lpnFromUserID The ID of the user who sent the message.
	/// @param szContent The content of the message.
function TT_GetChannelMessage(pClientInstance:pointer; nChannelID:int; nMsgID:int;
          var lpnFromUserID:int;	var szContent:Tttstr):BOOL; cdecl; external DLL;

	/// Check whether user is operator of a channel
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param nUserID the ID of the user to check.
	/// @param nChannelID the ID of the channel to check whether user
	/// is operator of.
function TT_IsChannelOperator(pClientInstance:pointer; const nUserID:int; const nChannelID:int):BOOL; cdecl; external DLL;

	/// Get a message which was broadcasted to all users from an administrator.
	/// This function will most likely be called as a result of the message
	/// WM_TEAMTALK_BROADCASTMESSAGE.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param nMsgID The ID of the message broadcasted.
	/// @param szContent The content of the message broadcasted.
	/// @see WM_TEAMTALK_BROADCASTMESSAGE
function TT_GetBroadcastMessage(pClientInstance:pointer; nMsgID:int; var szContent:Tttstr):BOOL; cdecl; external DLL;

	/// Get the user's user ID
	///
	/// @return Returns the user ID assigned to the current user on the server.
	/// -1 is returned if no ID has been assigned to the user.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
function TT_GetMyUserID(pClientInstance:pointer):int; cdecl; external DLL;

	/// Get the user with the specified ID.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param nUserID the ID of the user to extract.
	/// @param lpUser will receive the user's nick name.
	/// @see USERSTATUS_AVAILABLE
	/// @see USERSTATUS_AWAY
function TT_GetUser(pClientInstance:pointer; nUserID:int; var lpUser:TT_User):BOOL; cdecl; external DLL;

	/// Get a private message from a user.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param nUserID The ID of the user who sent the message.
	/// @param nMsgID The ID of the message to extract.
	/// @param szContent Will receive the content of the message to extract.
function TT_GetUserMessage(pClientInstance:pointer; nUserID:int; nMsgID:int; var szContent:Tttstr):BOOL; cdecl; external DLL;

	/// Set the volume of a user. Note that it's a virtual volume
	/// which is being set since the master volume affects the user
	/// volume.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param nUserID The user ID of the user whose volume will be changed.
	/// @param nVolume Must be between SOUND_VOLUME_MIN and SOUND_VOLUME_MAX
	/// @see SOUND_VOLUME_MIN
	/// @see SOUND_VOLUME_MAX
function TT_SetUserVolume(pClientInstance:pointer; nUserID:int; nVolume:int):BOOL; cdecl; external DLL;

	/// Get the volume of a user. Note that it's a virtual volume
	/// which is being set since the master volume affects the user
	/// volume.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @see SOUND_VOLUME_MIN
	/// @see SOUND_VOLUME_MAX
function TT_GetUserVolume(pClientInstance:pointer; nUserID:int):int; cdecl; external DLL;

	/// Use software to gain a user's volume.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param nUserID The ID of the user who should have sound gained.
	/// @param nGainLevel The gain level for the user. A value from
	/// GAIN_LEVEL_MIN to GAIN_LEVEL_MAX
	/// @see TT_GetUserGainLevel
	/// @see GAIN_LEVEL_MIN
	/// @see GAIN_LEVEL_MAX
	/// @see GAIN_LEVEL_DEFAULT
function TT_SetUserGainLevel(pClientInstance:pointer; nUserID:int; nGainLevel:int):BOOL;  cdecl; external DLL;

	/// Get the software gain level for a user.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param nUserID The ID of the user whose gain level should be retrieved.
	/// @see TT_SetUserGainLevel
	/// @see GAIN_LEVEL_MIN
	/// @see GAIN_LEVEL_MAX
	/// @see GAIN_LEVEL_DEFAULT
	/// @return The gain level for the user. A value from GAIN_LEVEL_MIN to GAIN_LEVEL_MAX
function TT_GetUserGainLevel(pClientInstance:pointer; nUserID:int):int; cdecl; external DLL;

	/// Mute a user.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param nUserID The user ID of the user to mute (or unmute).
	/// @param bMute TRUE will mute, FALSE will unmute.
function TT_SetUserMute(pClientInstance:pointer; nUserID:int; bMute:BOOL):BOOL; cdecl; external DLL;

	/// Check if a user is muted.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @see TT_SetUserMute
function TT_IsUserMute(pClientInstance:pointer; nUserID:int):BOOL; cdecl; external DLL;

	/// Check if a user is talking.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @see WM_TEAMTALK_USERTALKING
	/// @see WM_TEAMTALK_USERSTOPPEDTALKING
function TT_IsUserTalking(pClientInstance: pointer; nUserID:int):BOOL; cdecl; external DLL;

	/// Set the position of a user.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
function TT_SetUserPosition(pClientInstance:pointer; nUserID:int; x:double; y:double; z:double):BOOL; cdecl; external DLL;

	/// Get a user's position.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
function TT_GetUserPosition(pClientInstance:pointer; nUserID:int; var x:double; var y:double; var z:double):BOOL; cdecl; external DLL;

	/// When set to true the server will broadcast audio packets
	/// instead of the client. Forwarding through the server is enabled by default.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
function TT_ForwardToAll(pClientInstance:pointer; bForward:BOOL):BOOL; cdecl; external DLL;

	/// Whether server is broadcasting packets or the client is doing it.
	///
	/// @return Returns true if the server is forwarding the client's voice packets.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
function TT_IsForwardingToAll(pClientInstance:pointer):BOOL; cdecl; external DLL;

	/// Get the number of bytes sent. Note that the number of bytes
	/// transferred does not include TCP/IP overhead.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
function TT_GetBytesReceived(pClientInstance:pointer):int; cdecl; external DLL;

	/// Get the number of bytes received. Note that the number of bytes
	/// transferred does not include TCP/IP overhead.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
function TT_GetBytesSent(pClientInstance:pointer):int; cdecl; external DLL;

	/// Start transmitting voice data.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
function TT_StartTransmitting(pClientInstance:pointer):BOOL; cdecl; external DLL;

	/// Stop transmitting voice data.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
function TT_StopTransmitting(pClientInstance:pointer):BOOL; cdecl; external DLL;

	/// Register a global hotkey which send WM_TEAMTALK_HOTKEY
	/// to the HWND passed to TT_InitTeamTalk. WPARAM will contain the
	/// hotkey id and LPARAM will be 1 for hotkey active and 0 for hotkey
	/// inactive. A hotkey can be used as a push-to-talk key combination.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param nHotKeyID is the ID of the hotkey to register. It will be
	/// passed as the WPARAM when the hotkey becomes either active or inactive.
	/// @param bCtrl Set to true if Ctrl should be down to activate the hotkey.
	/// @param bAlt Set to true if Alt should be down to activate the hotkey.
	/// @param bShift Set to true if Shift should be down to activate the hotkey.
	/// @param bWin Set to true if Win should be down to activate the hotkey.
	/// @param nVirtualKey is the identifier of a virtual key like e.g. VK_DOWN or
	/// VK_LBUTTON. Set it to 0 if you only use modifiers.
	/// @see TT_InitTeamTalk
procedure TT_RegisterHotKey(pClientInstance:pointer; nHotKeyID:int; bCtrl:BOOL; bAlt:BOOL;	bShift:BOOL;
              bWin:BOOL; nVirtualKey:UINT); cdecl; external DLL;

	/// Unregister a registered hotkey.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @see TT_RegisterHotKey
procedure TT_UnregisterHotKey(pClientInstance:pointer; nHotKeyID:int); cdecl; external DLL;

	/// Check whether hotkey is active.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param nHotKeyID is the ID of the registered hotkey.
function TT_IsHotKeyActive(pClientInstance:pointer; nHotKeyID:int):BOOL; cdecl; external DLL;

	/// Install a test hook so the HWND will be messaged when
	/// a key or mouse button is pressed.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param hWnd is the handle of the window which will be
	/// notified.
	/// @see TT_RemoveTestHook
function TT_InstallTestHook(pClientInstance:pointer; hWnd:HWND):BOOL; cdecl; external DLL;

	/// Remove the test hook again so the hWnd in TT_InstallTestHook
	/// will no longer be notified.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @see TT_RemoveTestHook
procedure TT_RemoveTestHook(pClientInstance:pointer); cdecl; external DLL;

	/// A function pointer for callbacks when a user is talking. The user's
	/// raw audio can be extracted and stored on disk.
	///
	/// @param nUserID The ID of the user who is talking. Note that
	/// nUserID will be 0 for yourself while unconnected.
	/// @param nSampleRate The frequency/sample rate of the user's audio.
	/// @param pRawAudio Array pointer to the user's raw audio. If pRawAudio is
	/// NULL it means that the user stopped talking.
	/// @param nSamples The number of samples in the pRawAudio array. If nSamples
	/// is 0 it means that the user stopped talking.
type TTalkingCallback=procedure(nUserID:int; nSampleRate:int; const pRawAudio:PSmallInt;
nSamples:int; pUserData:pointer); cdecl;

	/// Register for callbacks when a user is talking so you can receive the
	/// user's raw audio.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param talkCallback A function pointer to the function which
	/// will receive callbacks.
	/// @param pUserData User data.
	/// @see TT_UnregisterTalkingCallback
	/// @see TalkingCallback
function TT_RegisterTalkingCallback(pClientInstance:pointer; talkCallback:TTalkingCallback; pUserData:pointer):BOOL; cdecl; external DLL;

	/// Unregister callbacks for when a user is talking.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @see TT_RegisterTalkingCallback
function TT_UnregisterTalkingCallback(pClientInstance:pointer):BOOL; cdecl; external DLL;

	/// Send a file to the specified channel. It must be the same channel
	/// as the user is currently partipating in. The file being uploaded
	/// must have a file size which is less than the disk quota of the channel,
	/// minus the sum of all the files in the channel. The disk quota of a
	/// channel can be obtained in the nDiskQuota of the Channel-struct passed
	/// to TT_GetChannel.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param szLocalFilePath The path of the file to upload, e.g. C:\test.txt.
	/// @see Channel
	/// @see TT_GetChannel
function TT_DoSendFile(pClientInstance:pointer; const szLocalFilePath:PWideChar):BOOL; cdecl; external DLL;

	/// Download a file from the specified channel. It must be the same channel
	/// as the user is currently participating in.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param nFileID The ID of the file which is passed by WM_TEAMTALK_ADDFILE.
	/// @param szLocalFilePath The path of where to store the file, e.g. C:\test.txt.
	/// @see WM_TEAMTALK_ADDFILE
	/// @see TT_GetChannelFilesCount
	/// @see TT_GetChannelFileID
function TT_DoRecvFile(pClientInstance:pointer; nFileID:int; const szLocalFilePath:PWideChar):BOOL; cdecl; external DLL;

	/// Delete a file from a channel. The user must be operator of the channel
	/// where the file is located.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param nFileID The ID of the file to delete. The ID of the file which is passed by WM_TEAMTALK_ADDFILE.
	/// @see WM_TEAMTALK_ADDFILE
	/// @see TT_GetChannelFilesCount
	/// @see TT_GetChannelFileID
function TT_DoDeleteFile(pClientInstance:pointer; nFileID:int):BOOL; cdecl; external DLL;

	/// Get the number of files in the specified channel. Use TT_GetChannelFileID
	/// to do an index-based sweep of the files in the channel.
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param nChannelID The ID of the channel where the file is located.
	/// @param lpnFilesCount A pointer which will be passed the number of files.
	/// @see TT_GetChannelFileID
function TT_GetChannelFilesCount(pClientInstance:pointer; nChannelID:int; var lpnFilesCount:int):BOOL; cdecl; external DLL;

	/// Get information about a file in a channel.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param nChannelID The ID of the channel where the file is located.
	/// @param nFileIndex The index of the file (nFileIndex >= 0 && nFileIndex < TT_GetChannelFilesCount).
	/// @param lpnFileID A pointer which will received the ID of the file. Use TT_GetChannelFileInfo to get more info.
	/// @see TT_GetChannelFilesCount
function TT_GetChannelFileID(pClientInstance:pointer; nChannelID:int; nFileIndex:int; var lpnFileID:int):BOOL; cdecl; external DLL;

	/// Get information about a file which can be downloaded.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param nFileID The ID of the file.
	/// @param lpFileInfo A pointer to a FileInfo-struct which will receive file information.
function TT_GetChannelFileInfo(pClientInstance:pointer; nFileID:int; var lpFileInfo:TT_FileInfo):BOOL; cdecl; external DLL; //checkout WM_TEAMTALK_ADDFILE

	/// Get information about an active file transfer. An active file transfer is
	/// one which has been post through the message WM_TEAMTALK_TRANSFER_BEGIN.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param nTransferID The ID of the file transfer to investigate. Transfer ID is passed by WM_TEAMTALK_TRANSFER_BEGIN.
	/// @param lpTransfer A pointer to a struct which will receive the file transfer information.
	/// @see WM_TEAMTALK_TRANSFER_BEGIN
function TT_GetFileTransferInfo(pClientInstance:pointer; nTransferID:int; var lpTransfer:TT_FileTransfer):BOOL; cdecl; external DLL;

	/// Cancel an active file transfer. An active file transfer is
	/// one which has been post through the message WM_TEAMTALK_TRANSFER_BEGIN.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param nTransferID The ID of the file transfer to investigate. Transfer ID is passed by WM_TEAMTALK_TRANSFER_BEGIN.
function TT_CancelFileTranfer(pClientInstance:pointer; nTransferID:int):BOOL; cdecl; external DLL;

	/// Subscribe to user events/data. This setting will affect the server
	/// globally unlike TT_Admin_DoUserSubscribe() which only affects a
	/// single user.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param uSubscriptions Union of Subscriptions to subscribe to.
	/// @see Subscriptions
function TT_DoSubscribe(PClientInstance: pointer; uSubscriptions: Subscriptions):BOOL; cdecl; external DLL;

	/// Unsubscribe to user events/data. This setting will affect the server
	/// globally unlike TT_Admin_DoUserUnsubscribe() which only affects a
	/// single user.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param uSubscriptions Union of Subscriptions to unsubscribe.
	/// @see Subscriptions
function TT_DoUnsubscribe(PClientInstance: pointer; uSubscriptions: Subscriptions):BOOL; cdecl; external DLL;

	/// Subscribe to user events/data.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param nUserID The ID of the user this should affect.
	/// @param uSubscriptions Union of Subscriptions to subscribe to.
	/// @see Subscriptions
function TT_DoUserSubscribe(PClientInstance: pointer; nUserID: int; uSubscriptions: Subscriptions):BOOL; cdecl; external DLL;

	/// Unsubscribe to user events/data. This can be used to ignore messages
	/// or voice data from a specific user.
	///
	/// @param pClientInstance Pointer to client instance created by TT_InitTeamTalk.
	/// @param nUserID The ID of the user this should affect.
	/// @param uSubscriptions Union of Subscriptions to unsubscribe.
	/// @see Subscriptions
function TT_DoUserUnsubscribe(PClientInstance: pointer; nUserID: int; uSubscriptions: Subscriptions):BOOL; cdecl; external DLL;

	/// Get a description of an error code posted by either
	/// WM_TEAMTALK_ERROR or WM_TEAMTALK_TRANSFER_FAILED
	///
	/// @see WM_TEAMTALK_ERROR
	/// @see WM_TEAMTALK_TRANSFER_FAILED
procedure TT_GetErrorMessage(nError:int; var szErrorMsg:Tttstr); cdecl; external DLL;

	/// Initialize the TeamTalk administrator module. The administrator module
	/// works in similar was as the client by sending message to the HWND which
	/// is passed to the function.
	/// @param pNewAdminInstance Pointer to a new instance admin instance.
function TT_Admin_Init(hWnd:HWND; var pNewAdminInstance:pointer):BOOL; cdecl; external DLL;

	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
function TT_Admin_Close(pAdminInstance:pointer):bool; cdecl external DLL;

	/// Connect to a TeamTalk server.
	///
	/// @param pAdminInstance Pointer to a new instance admin instance.
	/// @param szHostAddress The IP-address or hostname of the TeamTalk server.
	/// @param nTcpPort The TCP host port of the TeamTalk server.
	/// @see WM_TEAMTALK_CONNECTSUCCESS
	/// @see WM_TEAMTALK_CONNECTFAILED
function TT_Admin_Connect(pAdminInstance:pointer; const szHostAddress:PWideChar; nTcpPort:int):BOOL; cdecl; external DLL;

	/// @param pAdminInstance Pointer to a new instance admin instance.
function TT_Admin_Disconnect(pAdminInstance:pointer):BOOL; cdecl; external DLL;

	/// @param pAdminInstance Pointer to a new instance admin instance.
function TT_Admin_IsConnected(pAdminInstance:pointer):BOOL; cdecl; external DLL;

	/// @param pAdminInstance Pointer to a new instance admin instance.
function TT_Admin_IsConnecting(pAdminInstance:pointer):BOOL; cdecl external DLL;

	/// Check if admin has performed login and has been authorized.
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
function TT_Admin_IsAuthorized(pAdminInstance:pointer):bool; cdecl; external DLL;

	/// Get the User ID assigned to the administrator login.
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
	/// @return Returns -1 on error.
function TT_Admin_GetMyUserID(pAdminInstance:pointer):int; cdecl external DLL;

	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
function TT_Admin_GetServerProperties(pAdminInstance:pointer; var lpServerInfo:TT_ServerProperties):BOOL; cdecl; external DLL;

	/// Logon a connected TeamTalk server.
	///
	/// This function should be called once the WM_TEAMTALK_CONNECTSUCCESS has
	/// been sent to the HWND which was passed to the TT_Admin_Init.
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
	/// @param szUsername The administrator username.
	/// @param szPasswd The administrator password.
	///@see TT_Admin_Init
	///@see WM_TEAMTALK_CONNECTSUCCESS
function TT_Admin_DoLogin(pAdminInstance:pointer; const szUsername:PWideChar; const szPasswd:PWideChar):BOOL; cdecl; external DLL;

	/// Make a new channel. The new channel is static by default.
	///
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
	/// @param szChannelPath The path of the new channel.
	/// @param szPassword The password for the new channel.
	/// @param szTopic The topic of the new channel.
	/// @param nDiskQuota The number of bytes the channel should have available for file storage.
function TT_Admin_DoMakeChannel(pAdminInstance:pointer; const szChannelPath:PWideChar; const szPassword:PWideChar;
    const szTopic:PWideChar; const szOpPassword:PWideChar; nDiskQuota:int64):BOOL; cdecl; external DLL;

	/// Update a channel's properties.
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
	/// @param lpChanInfo A Channel-structure containing information about
	/// the channel being created. The Channel's member "nParentChannelID"
	/// and "szName" are ignored.
function TT_Admin_DoUpdateChannel(pAdminInstance:pointer; LPChannelInfo: PTT_Channel):bool; cdecl external DLL;

	/// Remove a channel from a server. Note that if there's any users in the channel they will
	/// be kicked and subchannels will be deleted as well.
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
function TT_Admin_DoRemoveChannel(pAdminInstance:pointer; nChannelID:int):BOOL; cdecl; external DLL;

		/// Issue command to move a user from one channel to another.
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
	/// @param nUserID User to be moved.
	/// @param szDestChannel Channel path of where user should be put into.
function TT_Admin_DoMoveUser(pAdminInstance:pointer;nUserID:int;
                    const szDestChannel:PWideChar):BOOL; cdecl; external DLL;

	/// Issue command to move a user from one channel to another.
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
	/// @param nUserID User to be moved.
	/// @param nDestChannelID ID of channel where user should be move into.
function TT_Admin_DoMoveUserByID(pAdminInstance:pointer; nUserID:int;
                    nDestChannelID:int):BOOL; cdecl; external DLL;

	/// Update server properties.
	///
	/// @param lpServerInfo A structure holding the information to be set on the server.
function TT_Admin_DoServerUpdate(pAdminInstance:pointer; const lpServerInfo:TT_ServerProperties):BOOL; cdecl; external DLL;

	/// Kick user off a server. To ban a user call TT_Admin_DoBan.
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
	///@see TT_Admin_DoBan
function TT_Admin_DoKick(pAdminInstance:pointer; nUserID:int):BOOL; cdecl; external DLL;

	/// Make user operator of a channel.
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
function TT_Admin_DoMakeOperator(pAdminInstance:pointer; nUserID:int; nChannelID:int):BOOL; cdecl; external DLL;

	/// Issue a ban command on a user in a specific channel. The ban applies to the user's
	/// IP-address. Call TT_Admin_DoKick to kick the user off the server.
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
	///@see TT_Admin_DoKick
function TT_Admin_DoBan(pAdminInstance:pointer; nUserID:int):BOOL; cdecl; external DLL;

	/// Unban the user with the specified IP-address.
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
function TT_Admin_DoUnBan(pAdminInstance:pointer; const szIpAddress:PWideChar):BOOL; cdecl; external DLL;

	/// Issue a command to the list of users.
	///
	/// This command issues a list command which will notify the HWND passed to
	/// TT_Admin_Init when it's completed by sending the message
	/// WM_TEAMTALK_LISTCOMMAND_COMPLETED. Once completed call
	/// the function TT_Admin_GetBannedUsers to get the list of users.
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
	///@see TT_Admin_Init
	///@see WM_TEAMTALK_LISTCOMMAND_COMPLETED
	///@see TT_Admin_GetBannedUsers
function TT_Admin_DoListBans(pAdminInstance:pointer):BOOL; cdecl; external DLL;

	/// Send administrator message to a user. The WM_TEAMTALK_ADMINMESSAGE
	/// will be posted in the client. The user should reply to the admin with
	/// TT_DoSendUserMessage(.) and the WM_TEAMTALK_USERMESSAGE will be posted
	/// in the admin.
	///
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
	/// @param nUserID The user who should receive the message
	/// @param szMessage The content of the message
	/// @see TT_DoSendUserMessage
	/// @see TT_GetUserMessage
	/// @see TT_DoSendChannelMessage
function TT_Admin_DoAdminMessage(pAdminInstance:pointer; nUserID:int; szMessage:PWideChar):bool; cdecl; external DLL;

	/// Send a text-message to a channel.
	///
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
	/// @param nChannelID The ID of the channel
	/// @param szMessage The content of the message
function TT_Admin_DoChannelMessage(pAdminInstance:pointer; nChannelID:int; szMessage:PWideChar):bool; cdecl; external DLL;

	/// Broadcast a message to all authorized users on the server.
	///
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
	/// @param szMessage The content of the message
function TT_Admin_DoBroadcastMessage(pAdminInstance:pointer; szMessage:PWideChar):bool; cdecl; external DLL;

	/// Send a file to the specified channel. Note that as admin the size of the
	/// disk quota does not apply. TT_Admin_UpdateChannel can be used to modify
	/// the size of the disk quota of a channel.
	///
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
	/// @param nChannelID ID of the channel to send to.
	/// @param szLocalFilePath The path of the file to upload, e.g. C:\test.txt.
	/// @see TT_Admin_UpdateChannel
function TT_Admin_DoSendFile(pAdminInstance:pointer; nChannelID:int; szLocalFilePath:PWideChar):bool; cdecl; external DLL;

	/// Download a file from the specified channel.
	///
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
	/// @param nChannelID ID of the channel to download from.
	/// @param nFileID The ID of the file which is passed by WM_TEAMTALK_ADDFILE.
	/// @param szLocalFilePath The path of where to store the file, e.g. C:\test.txt.
	/// @see WM_TEAMTALK_ADDFILE
	/// @see TT_Admin_GetChannelFilesCount
	/// @see TT_Admin_GetChannelFileID
function TT_Admin_DoRecvFile(pAdminInstance:pointer; nChannelID:int; nFileID:int;
szLocalFilePath:PWideChar):bool; cdecl; external DLL;

	/// Delete a file from a channel.
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
	/// @param nChannelID The ID of the channel where the file is located.
	/// @param nFileID The ID of the file to delete. The ID of the file which
	/// is passed by WM_TEAMTALK_ADDFILE.
	/// @see WM_TEAMTALK_ADDFILE
	/// @see TT_Admin_GetChannelFilesCount
	/// @see TT_Admin_GetChannelFileID
function TT_Admin_DoDeleteFile(pAdminInstance:pointer; nChannelID:int; nFileID:int):bool; cdecl; external DLL;

	/// Issue command to set a new username and password for the remote administrator.
	/// An empty username or password will disable remote logins.
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
function TT_Admin_DoUpdateAdmin(pAdminInstance:pointer; const szUsername:PWideChar; const szPassword:PWideChar):BOOL; cdecl; external DLL;

	/// Save the server's current state to its settings file (typically TeamTalkService.xml).
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
function TT_Admin_DoSaveConfig(pAdminInstance:pointer):BOOL; cdecl; external DLL;

	/// Quit from server.
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
function TT_Admin_DoQuit(pAdminInstance:pointer):BOOL; cdecl; external DLL;

	/// Get information about a user.
	///
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
	/// @param nUserID The ID of the user to get information about.
	/// @param lpUser A User struct to be filled with user information.
	/// @see USERSTATUS_AVAILABLE @see USERSTATUS_AWAY
function TT_Admin_GetUser(pAdminInstance:pointer; nUserID:int; var lpUser:TT_User):BOOL; cdecl; external DLL;

	/// Check wheher a user is operator of a channel.
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
function TT_Admin_IsChannelOperator(pAdminInstance:pointer; nUserID:int; nChannelID:int):BOOL; cdecl; external DLL;

	/// Get the channel with a specific ID.
	///
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
	/// @param nChannelID The ID of the channel to get information about.
	/// @param lpChannel A pointer to a Channel struct which will receive the channel's data.
	/// @return FALSE if unable to retrieve channel otherwise TRUE
function TT_Admin_GetChannel(pAdminInstance:pointer; nChannelID:int; lpChannel:TT_Channel):BOOL; cdecl; external DLL;

	/// Get the channel's path. Channels are separated by '/'
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
	/// @param nChannelID The channel's ID
	/// @param szChannelPath Will receive the channel's path.
	/// @return Returns TRUE if channel exists.
function TT_Admin_GetChannelPath(pAdminInstance:pointer; nChannelID:int; var szChannelPath:Tttstr):BOOL; cdecl; external DLL;

	/// Get the ID of the specified channel
	///
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
	/// @param szChannelPath The path of the channel which ID you want
	/// to obtain.
	/// @return The channel ID or -1 if the channel doesn't exist.
function TT_Admin_GetChannelID(pAdminInstance:pointer; szChannelPath:Tttstr):int; cdecl; external DLL;

	/// Get a private message from a user.
	///
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
	/// @param nUserID The ID of the user who sent the message.
	/// @param nMsgID The ID of the message to extract.
	/// @param szContent Will receive the content of the message to extract.
function TT_Admin_GetUserMessage(pAdminInstance:pointer; nUserID:int;
nMsgID: int; var szContent:Tttstr):bool; cdecl; external DLL;

	/// Get a channel message.
	///
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
	/// @param nChannelID the ID of the channel to extract the message.
	/// @param nMsgID the ID of the message to extract.
	/// @param lpnFromUserID The ID of the user who sent the message.
	/// @param szContent The content of the message.
function TT_Admin_GetChannelMessage(pAdminInstance:pointer; nChannelID:int;
nMsgID:int; var lpnFromUserID:int; var szContent:Tttstr):bool; cdecl; external DLL;

	/// Get a message which was broadcasted to all users from an administrator.
	/// This function will most likely be called as a result of the message
	/// WM_TEAMTALK_BROADCASTMESSAGE.
	///
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
	/// @param nMsgID The ID of the message broadcasted.
	/// @param szContent The content of the message broadcasted.
	/// @see WM_TEAMTALK_BROADCASTMESSAGE
function TT_Admin_GetBroadcastMessage(pAdminInstance:pointer; nMsgID:int;
var szContent:Tttstr):bool; cdecl; external DLL;

	/// Get a list of banned users.
	///
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
	/// @param lpBannedUsers A preallocated array to hold banned users.
	/// @param nCount The max number of banned users the lpBannedUsers array can hold.
	/// @param lpnHowMany The number of banned users in the list to extract. This
	/// parameter can be NULL.
function TT_Admin_GetBannedUsers(pAdminInstance:pointer; var lpBannedUsers:array of TT_BannedUser;
nCount:int; var lpnHowMany:int):BOOL; cdecl; external DLL;

	/// Get the number of files in the specified channel. Use TT_Admin_GetChannelFileID
	/// to do an index-based sweep of the files in the channel.
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
	/// @param nChannelID The ID of the channel where the file is located.
	/// @param lpnFilesCount A pointer which will be passed the number of files.
	/// @see TT_Admin_GetChannelFileID
function TT_Admin_GetChannelFilesCount(pAdminInstance:pointer; nChannelID:int; var lpnFilesCount:int):BOOL; cdecl; external DLL;

	/// Get information about a file in a channel.
	///
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
	/// @param nChannelID The ID of the channel where the file is located.
	/// @param nFileIndex The index of the file (nFileIndex >= 0 && nFileIndex < TT_Admin_GetChannelFilesCount).
	/// @param lpnFileID A pointer which will received the ID of the file. Use TT_Admin_GetChannelFileInfo to get more info.
	/// @see TT_GetChannelFilesCount
function TT_Admin_GetChannelFileID(pAdminInstance:pointer; nChannelID:int; nFileIndex:int;
var lpnFileID:int):BOOL; cdecl; external DLL;

	/// Get information about a file which can be downloaded.
	///
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
	/// @param nFileID The ID of the file.
	/// @param lpFileInfo A pointer to a FileInfo-struct which will receive file information.
function TT_Admin_GetChannelFileInfo(pAdminInstance:pointer; nFileID:int;
var lpFileInfo:TT_FileInfo):BOOL; cdecl; external DLL;

	/// Get information about an active file transfer. An active file transfer is
	/// one which has been post through the message WM_TEAMTALK_TRANSFER_BEGIN.
	///
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
	/// @param nTransferID The ID of the file transfer to investigate. Transfer ID is passed by WM_TEAMTALK_TRANSFER_BEGIN.
	/// @param lpTransfer A pointer to a struct which will receive the file transfer information.
	/// @see WM_TEAMTALK_TRANSFER_BEGIN
function TT_Admin_GetFileTransferInfo(pAdminInstance:pointer; nTransferID:int;
var lpTransfer:TT_FileTransfer):BOOL; cdecl; external DLL;

	/// Cancel an active file transfer. An active file transfer is
	/// one which has been post through the message WM_TEAMTALK_TRANSFER_BEGIN.
	///
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
	/// @param nTransferID The ID of the file transfer to investigate. Transfer ID is passed by WM_TEAMTALK_TRANSFER_BEGIN.
function TT_Admin_CancelFileTranfer(pAdminInstance:pointer; nTransferID:int):BOOL; cdecl; external DLL;

	/// Set the default disk quota for new channels.
	///
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
	/// @param nChannelDiskQuota The number of bytes which each channel should have by default for file storage.
function TT_Admin_DoFileShare(pAdminInstance:pointer;
var nChannelDiskQuota:int64):BOOL; cdecl; external DLL;

	/// Get information the current file share settings.
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
	///@param szFilesRoot The location where the server stores its files.
	/// @param lpnChannelDiskQuota The default disk quota of a channel.
	/// @param lpnMaxDiskUsage The server's maximum for file storage.
function TT_Admin_GetFileShare(pAdminInstance:pointer; var szFilesRoot:Tttstr; var lpnChannelDiskQuota:int64;
            var lpnMaxDiskUsage:int64):BOOL; cdecl; external DLL;

	/// Subscribe to user events/data. This setting will affect the server
	/// globally unlike TT_Admin_DoUserSubscribe() which only affects a
	/// single user.
	///
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
	/// @param uSubscriptions Union of Subscriptions to subscribe to.
	/// @see Subscriptions
function TT_Admin_DoSubscribe(pAdminInstance: pointer; uSubscriptions: Subscriptions):BOOL; cdecl; external DLL;

	/// Unsubscribe to user events/data. This setting will affect the server
	/// globally unlike TT_Admin_DoUserUnsubscribe() which only affects a
	/// single user.
	///
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
	/// @param uSubscriptions Union of Subscriptions to unsubscribe.
	/// @see Subscriptions
function TT_Admin_DoUnsubscribe(pAdminInstance: pointer; uSubscriptions: Subscriptions):BOOL; cdecl; external DLL;

	/// Subscribe to user events/data.
	///
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
	/// @param nUserID The ID of the user this should affect.
	/// @param uSubscriptions Union of Subscriptions to subscribe to.
	/// @see Subscriptions
function TT_Admin_DoUserSubscribe(pAdminInstance: pointer; nUserID: int; uSubscriptions: Subscriptions):BOOL; cdecl; external DLL;

	/// Unsubscribe to user events/data. This can be used to ignore messages
	/// or voice data from a specific user.
	///
	/// @param pAdminInstance Pointer to admin instance created by TT_Admin_Init.
	/// @param nUserID The ID of the user this should affect.
	/// @param uSubscriptions Union of Subscriptions to unsubscribe.
	/// @see Subscriptions
function TT_Admin_DoUserUnsubscribe(pAdminInstance: pointer; nUserID: int; uSubscriptions: Subscriptions):BOOL; cdecl; external DLL;

	/// Get the number of Windows Mixers available.
	/// The index from 0 to TT_Mixer_GetMixerCount()-1 should be passed to the
	/// TT_Mixer_* functions.
	/// @see TT_Mixer_GetMixerName
function TT_Mixer_GetMixerCount():int; cdecl; external DLL;

	/// Get the name of a Windows Mixer based on its name.
	/// @param nMixerIndex The index of the mixer. Ranging from 0 to TT_Mixer_GetMixerCount()-1.
	/// @param szMixerName The output string receiving the name of the device.
function TT_Mixer_GetMixerName(nMixerIndex:int; var szMixerName:Tttstr):BOOL; cdecl; external DLL;

	/// The Windows mixer devices which can be queried by the TT_Mixer_* functions.
	/// Wave-In devices which are not in the enum-structure can be accessed by
	/// DEVICE_WAVEIN_BYINDEX which allows the user to query based on an index.
	///
	/// @see TT_Mixer_SetWaveOutMute
	/// @see TT_Mixer_SetWaveOutVolume
	/// @see TT_Mixer_SetWaveInSelected
	/// @see TT_Mixer_SetWaveInVolume
	/// @see TT_Mixer_GetWaveInDeviceName
	/// @see TT_Mixer_SetWaveInDeviceSelected

const DEVICE_WAVEOUT_MASTER=0;
      DEVICE_WAVEOUT_WAVE=1;
      DEVICE_WAVEOUT_MICROPHONE=2;
      DEVICE_WAVEIN_MICROPHONE=3;
      DEVICE_WAVEIN_LINEIN=4;
      DEVICE_WAVEIN_WAVEOUT=5;

	/// Mute or unmute a Windows Mixer Wave-Out device from the 'enum' of devices.
	/// @param nMixerIndex The index of the mixer. Ranging from 0 to TT_Mixer_GetMixerCount()-1.
	/// @param nDevice One of the DEVICE_WAVEOUT_* values from the 'enum' of devices.
	/// @param bMute True if device should be muted, False if it should be unmuted.
	/// @see TT_Mixer_GetWaveOutMute
function TT_Mixer_SetWaveOutMute(nMixerIndex:int; nDevice:int; bMute:BOOL):BOOL; cdecl; external DLL;

	/// Get the mute state of a Windows Mixer Wave-Out device from the 'enum' of devices.
	/// @param nMixerIndex The index of the mixer. Ranging from 0 to TT_Mixer_GetMixerCount()-1.
	/// @param nDevice One of the DEVICE_WAVEOUT_* values from the 'enum' of devices.
	/// @see TT_Mixer_SetWaveOutMute
function TT_Mixer_GetWaveOutMute(nMixerIndex:int; nDevice:int):BOOL; cdecl; external DLL;

	/// Set the volume of a Windows Mixer Wave-Out device from the 'enum' of devices.
	/// @param nMixerIndex The index of the mixer. Ranging from 0 to TT_Mixer_GetMixerCount()-1.
	/// @param nDevice One of the DEVICE_WAVEOUT_* values from the 'enum' of devices.
	/// @param nVolume A value ranging from 0 to 65535.
function TT_Mixer_SetWaveOutVolume(nMixerIndex:int; nDevice:int; nVolume:int):BOOL; cdecl; external DLL;

	/// Get the volume of a Windows Mixer Wave-Out device from the 'enum' of devices.
	/// @param nMixerIndex The index of the mixer. Ranging from 0 to TT_Mixer_GetMixerCount()-1.
	/// @param nDevice One of the DEVICE_WAVEOUT_* values from the 'enum' of devices.
	/// @return A value ranging from 0 to 65535.
function TT_Mixer_GetWaveOutVolume(nMixerIndex:int; nDevice:int):int; cdecl; external DLL;

	/// Set the selected state of a Windows Mixer Wave-In device from the 'enum' of devices.
	/// @param nDevice One of the DEVICE_WAVEOUT_* values from the 'enum' of devices.
	/// @param nMixerIndex The index of the mixer. Ranging from 0 to TT_Mixer_GetMixerCount()-1.
function TT_Mixer_SetWaveInSelected(nMixerIndex:int; nDevice:int):BOOL; cdecl; external DLL;

	/// Get the selected state of a Windows Mixer Wave-In device from the 'enum' of devices.
	/// @param nDevice One of the DEVICE_WAVEOUT_* values from the 'enum' of devices.
	/// @param nMixerIndex The index of the mixer. Ranging from 0 to TT_Mixer_GetMixerCount()-1.
function TT_Mixer_GetWaveInSelected(nMixerIndex:int; nDevice:int):BOOL; cdecl; external DLL;

	/// Set the volume of a Windows Mixer Wave-In device from the 'enum' of devices.
	/// @param nMixerIndex The index of the mixer. Ranging from 0 to TT_Mixer_GetMixerCount()-1.
	/// @param nDevice One of the DEVICE_WAVEOUT_* values from the 'enum' of devices.
	/// @param nVolume A value ranging from 0 to 65535.
function TT_Mixer_SetWaveInVolume(nMixerIndex:int; nDevice:int; nVolume:int):BOOL; cdecl; external DLL;

	/// Get the volume of a Windows Mixer Wave-In device from the 'enum' of devices.
	/// @param nMixerIndex The index of the mixer. Ranging from 0 to TT_Mixer_GetMixerCount()-1.
	/// @param nDevice One of the DEVICE_WAVEOUT_* values from the 'enum' of devices.
	/// @return A value ranging from 0 to 65535.
function TT_Mixer_GetWaveInVolume(nMixerIndex:int; nDevice:int):int; cdecl; external DLL;

	/// Enable and disable microphone boost
	///
	/// @param nMixerIndex The mixer to access.
	/// @param bEnable True to enable, False to disable.
function TT_Mixer_SetWaveInBoost(nMixerIndex:int; bEnable:BOOL):BOOL; cdecl; external DLL;

	/// See if microphone boost is enabled.
	///
	/// @param nMixerIndex The mixer to access.
function TT_Mixer_GetWaveInBoost(nMixerIndex:int):BOOL; cdecl; external DLL;

	/// Get the number of Windows Mixer Wave-In devices.
	/// @param nMixerIndex The index of the mixer. Ranging from 0 to TT_Mixer_GetMixerCount()-1.
function TT_Mixer_GetWaveInDeviceCount(nMixerIndex:int):int; cdecl; external DLL;

	/// Get the name of the Wave-In device with the specified index.
	/// @param nMixerIndex The index of the mixer. Ranging from 0 to TT_Mixer_GetMixerCount()-1.
	/// @param nDeviceIndex The index of the device. Randing from 0 to  TT_Mixer_GetWaveInDeviceCount()-1.
	/// @param szDeviceName The output string of the name of the device.
	/// @see TT_Mixer_GetWaveInDeviceCount
function TT_Mixer_GetWaveInDeviceName(nMixerIndex:int; nDeviceIndex:int; var szDeviceName:Tttstr):BOOL; cdecl; external DLL;

	/// Set the selected state of a Wave-In device in the Windows Mixer.
	/// @param nMixerIndex The index of the mixer. Ranging from 0 to TT_Mixer_GetMixerCount()-1.
	/// @param nDeviceIndex The index of the device. Randing from 0 to  TT_Mixer_GetWaveInDeviceCount()-1.
	/// @see TT_Mixer_GetWaveInDeviceCount
function TT_Mixer_SetWaveInDeviceSelected(nMixerIndex:int; nDeviceIndex:int):BOOL; cdecl; external DLL;

	/// Get the selected state of a Wave-In device in the Windows Mixer.
	/// @param nMixerIndex The index of the mixer. Ranging from 0 to TT_Mixer_GetMixerCount()-1.
	/// @param nDeviceIndex The index of the device. Randing from 0 to  TT_Mixer_GetWaveInDeviceCount()-1.
	/// @see TT_Mixer_GetWaveInDeviceCount
function TT_Mixer_GetWaveInDeviceSelected(nMixerIndex:int; nDeviceIndex:int):BOOL; cdecl; external DLL;

implementation

end.
