You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
195 lines
6.7 KiB
195 lines
6.7 KiB
14 years ago
|
/*
|
||
|
HawkVoice Direct Interface (HVDI) cross platform network voice library
|
||
|
Copyright (C) 2001 Phil Frisbie, Jr. (phil@hawksoft.com)
|
||
|
|
||
|
This library is free software; you can redistribute it and/or
|
||
|
modify it under the terms of the GNU Library General Public
|
||
|
License as published by the Free Software Foundation; either
|
||
|
version 2 of the License, or (at your option) any later version.
|
||
|
|
||
|
This library is distributed in the hope that it will be useful,
|
||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||
|
Library General Public License for more details.
|
||
|
|
||
|
You should have received a copy of the GNU Library General Public
|
||
|
License along with this library; if not, write to the
|
||
|
Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||
|
Boston, MA 02111-1307, USA.
|
||
|
|
||
|
Or go to http://www.gnu.org/copyleft/lgpl.html
|
||
|
*/
|
||
|
|
||
|
#ifndef HVDI_H
|
||
|
#define HVDI_H
|
||
|
|
||
|
#include "blowfish/blowfish.h"
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#define HVDI_MAJOR_VERSION 0
|
||
|
#define HVDI_MINOR_VERSION 7
|
||
|
#define HVDI_VERSION_STRING "HVDI 0.7 beta"
|
||
|
|
||
|
/* This was copied from nl.h so that it did not need to be included */
|
||
|
|
||
|
#if defined WIN32 || defined WIN64
|
||
|
#pragma warning (disable:4514) /* disable "unreferenced inline function has
|
||
|
been removed" warning */
|
||
|
/* The default build for Windows is as a DLL. */
|
||
|
/* If you want a static library, define WIN_STATIC_LIB. */
|
||
|
#ifdef WIN_STATIC_LIB
|
||
|
#define NL_EXP
|
||
|
#else
|
||
|
#if defined __LCC__
|
||
|
#define NL_EXP extern
|
||
|
#else
|
||
|
#define NL_EXP __declspec(dllexport)
|
||
|
#endif
|
||
|
#endif
|
||
|
#define NL_APIENTRY __stdcall
|
||
|
#define NL_CALLBACK __cdecl
|
||
|
#ifdef __GNUC__
|
||
|
#define NL_INLINE extern __inline__
|
||
|
#else
|
||
|
#define NL_INLINE __inline
|
||
|
#endif
|
||
|
#else
|
||
|
#define NL_EXP extern
|
||
|
#define NL_APIENTRY
|
||
|
#define NL_CALLBACK
|
||
|
#ifdef __GNUC__
|
||
|
#define NL_INLINE extern __inline__
|
||
|
#else
|
||
|
#define NL_INLINE inline /* assuming C99 compliant compiler */
|
||
|
#endif /* __GNUC__ */
|
||
|
#endif /* WIN32 || WIN64 */
|
||
|
|
||
|
#ifndef NL_INVALID
|
||
|
#define NL_INVALID (-1)
|
||
|
#define NL_FALSE (0)
|
||
|
#define NL_TRUE (1)
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/* We will use HVDI or hvdi to prefix all HawkVoiceDI defines and functions */
|
||
|
|
||
|
/*
|
||
|
The internal state of the codec. This is READ ONLY! You can read hvdi_dec_state->codec
|
||
|
if you want to know what type of codec is being used on the other side, but DO NOT
|
||
|
write to this structure!! I could have hidden these structures behind an index, but
|
||
|
this IS low level quick and dirty ;)
|
||
|
|
||
|
hvdi_enc_state and hvdi_dec_state are defined separately to help the compiler spot
|
||
|
your mistakes ;)
|
||
|
*/
|
||
|
typedef struct
|
||
|
{
|
||
|
unsigned char codec; /* the codec used with the last packet */
|
||
|
unsigned short sequence;/* the sequence number of the last packet */
|
||
|
void *state; /* the codec state */
|
||
|
} hvdi_enc_state;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
unsigned char codec; /* the codec used with the last packet */
|
||
|
unsigned short sequence;/* the sequence number of the last packet */
|
||
|
void *state; /* the codec state */
|
||
|
} hvdi_dec_state;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
int rate; /* HVDI_VOX_FAST, HVDI_VOX_MEDIUM, or HVDI_VOX_SLOW */
|
||
|
int noisethreshold; /* 0(always pass) to 1000(never pass), 300 is a good starting point */
|
||
|
int samplecount; /* init to 0; used internally by hvdiVOX */
|
||
|
} hvdi_vox;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
unsigned long lcmrate; /* least common multiple of rates */
|
||
|
unsigned long inskip, outskip; /* LCM increments for I & O rates */
|
||
|
unsigned long total;
|
||
|
unsigned long intot, outtot; /* total samples in terms of LCM rate */
|
||
|
long lastsamp;
|
||
|
} hvdi_rate;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
unsigned int sample_max;
|
||
|
int counter;
|
||
|
float gain;
|
||
|
float peak;
|
||
|
int silence_counter;
|
||
|
} hvdi_agc;
|
||
|
|
||
|
/* The basic codecs, from hawkvoice.h */
|
||
|
#define HV_2_4K_CODEC 0x0001 /* LPC-10 2.4 Kbps codec */
|
||
|
#define HV_4_8K_CODEC 0x0002 /* LPC 4.8 Kbps codec */
|
||
|
#define HV_13_2K_CODEC 0x0004 /* GSM 13.2 Kbps codec */
|
||
|
#define HV_32K_CODEC 0x0008 /* Intel/DVI ADPCM 32 Kbps codec */
|
||
|
#define HV_64K_CODEC 0x0010 /* G.711 u-law 64 Kbps codec */
|
||
|
#define HV_1_4K_CODEC 0x0011 /* OpenLPC 1.4 Kbps codec */
|
||
|
#define HV_1_8K_CODEC 0x0012 /* OpenLPC 1.8 Kbps codec */
|
||
|
|
||
|
/* Alternate codec names */
|
||
|
#define HV_LPC10_CODEC HV_2_4K_CODEC
|
||
|
#define HV_LPC_CODEC HV_4_8K_CODEC
|
||
|
#define HV_GSM_CODEC HV_13_2K_CODEC
|
||
|
#define HV_ADPCM_32_CODEC HV_32K_CODEC
|
||
|
#define HV_PCM_64_CODEC HV_64K_CODEC
|
||
|
#define HV_G_711_CODEC HV_64K_CODEC
|
||
|
#define HV_ULAW_CODEC HV_64K_CODEC
|
||
|
#define HV_LPC_1_4_CODEC HV_1_4K_CODEC
|
||
|
#define HV_LPC_1_8_CODEC HV_1_8K_CODEC
|
||
|
|
||
|
/* VOX options */
|
||
|
/* how many samples of silence to wait after voice stops */
|
||
|
#define HVDI_VOX_FAST 4000 /* 1/2 second */
|
||
|
#define HVDI_VOX_MEDIUM 8000 /* 1 second */
|
||
|
#define HVDI_VOX_SLOW 12000 /* 1 1/2 seconds */
|
||
|
|
||
|
|
||
|
/* HawkVoiceDI API */
|
||
|
|
||
|
NL_EXP hvdi_enc_state* NL_APIENTRY hvdiCreateEncoderState(void);
|
||
|
|
||
|
NL_EXP hvdi_dec_state* NL_APIENTRY hvdiCreateDecoderState(void);
|
||
|
|
||
|
NL_EXP void NL_APIENTRY hvdiFreeEncoderState(hvdi_enc_state *state);
|
||
|
|
||
|
NL_EXP void NL_APIENTRY hvdiFreeDecoderState(hvdi_dec_state *state);
|
||
|
|
||
|
NL_EXP int NL_APIENTRY hvdiSetCodec(unsigned char codec, hvdi_enc_state *state);
|
||
|
|
||
|
NL_EXP BF_KEY* NL_APIENTRY hvdiMakeEncryptionKey(const char *string);
|
||
|
|
||
|
NL_EXP int NL_APIENTRY hvdiIsVoicePacket(unsigned char *packet, int length);
|
||
|
|
||
|
NL_EXP int NL_APIENTRY hvdiDecodePacket(unsigned char *packet, int paclen, short *buffer,
|
||
|
int buflen, BF_KEY *key, hvdi_dec_state *state);
|
||
|
|
||
|
NL_EXP int NL_APIENTRY hvdiEncodePacket(short *buffer, int buflen, unsigned char *packet,
|
||
|
int paclen, BF_KEY *key, hvdi_enc_state *state);
|
||
|
|
||
|
NL_EXP int NL_APIENTRY hvdiVOX(short *buffer, int buflen, hvdi_vox *vox);
|
||
|
|
||
|
NL_EXP void NL_APIENTRY hvdiRateInit(hvdi_rate *rate, int inrate, int outrate);
|
||
|
|
||
|
NL_EXP void NL_APIENTRY hvdiRateFlow(hvdi_rate *rate, short *inbuf, short *outbuf, int *inlen, int *outlen);
|
||
|
|
||
|
NL_EXP void NL_APIENTRY hvdiAGCInit(hvdi_agc *agc, float level);
|
||
|
|
||
|
NL_EXP void NL_APIENTRY hvdiAGC(hvdi_agc *agc, short *buffer, int len);
|
||
|
|
||
|
NL_EXP void NL_APIENTRY hvdiMix(short *outbuf, short **inbuf, int number, int inlen);
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
} /* extern "C" */
|
||
|
#endif
|
||
|
|
||
|
#endif /* HVDI_H */
|
||
|
|