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.
194 lines
6.7 KiB
194 lines
6.7 KiB
/* |
|
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 */ |
|
|
|
|