A compilation fails in the downloadable tarball. Here is an end of result. I will attach a full build log and a config log
i686-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I. -I.. -I./portmixer/px_common -pthread -O2 -march=pentium3 -pipe -Wall -Wextra -Wno-unused-parameter -Wpointer-arith -DLIBVER=\"2.0rc2\" -O2 -march=pentium3 -pipe -MT audio_encode.lo -MD -MP -MF .deps/audio_encode.Tpo -c audio_encode.c -fPIC -DPIC -o .libs/audio_encode.o
audio_encode.c: In function 'input_postprocess':
audio_encode.c:159: error: dereferencing pointer to incomplete type
audio_encode.c:167: error: dereferencing pointer to incomplete type
audio_encode.c: In function 'audio_send_encoded_audio':
audio_encode.c:274: warning: implicit declaration of function 'iax_send_cng'
audio_encode.c:328: warning: pointer targets in passing argument 3 of 'iax_send_voice' differ in signedness
audio_encode.c:328: error: too many arguments to function 'iax_send_voice'
make[2]: *** [audio_encode.lo] Error 1
make[2]: Leaving directory `/var/tmp/portage/net-libs/iaxclient-2.0_rc2/work/iaxclient-2.0rc2/lib'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/var/tmp/portage/net-libs/iaxclient-2.0_rc2/work/iaxclient-2.0rc2'
make: *** [all] Error 2
Build log
Logged In: YES
user_id=1783311
Originator: YES
File Added: build.log
Logged In: YES
user_id=1783311
Originator: YES
File Added: config.log
Config log
Logged In: NO
2.0.0 and 2.0.1 do the same thing when compiling.
What platform is being used to develop this library?
Logged In: YES
user_id=1299295
Originator: NO
Compilation also fails in 2.0.1 in exactly the same way when it is compiled using speex 1.2 beta2 (direct from tarball) in an Ubuntu 7.10 box
The cause of this failure is an API change in the speex library, which *no longer allows* direct access to data fields in the SpeexPreprocessState struct.
Therefore attempts in direct accessing:
st->speech_prob (line 159)
st->loudness2 (line 167)
would fail.
In addition, these two data fields do not exist in the internal struct in SpeexPreprocessState struct in 1.2 beta2
Please clean up the code so that it can compile under speex 1.2 as advertised.
This patch did the trick for me. Moreover you must do ./configure with SPEEX_LIBS='-lspeex -lspeexdsp'. And there are some more issues in the example programs, but I figure these need not compile in order to have the lib.
--- lib/audio_encode.c~ 2007-11-28 22:03:29.000000000 +0100
+++ lib/audio_encode.c 2008-11-17 09:46:38.000000000 +0100
@@ -149,13 +149,17 @@
iaxci_silence_threshold > 0.0f )
silent = !speex_preprocess(st, (spx_int16_t *)audio, NULL);
+ int32_t iprob;
+ speex_preprocess_ctl(st, SPEEX_PREPROCESS_GET_PROB, &iprob);
+
+
/* Analog AGC: Bring speex AGC gain out to mixer, with lots of hysteresis */
/* use a higher continuation threshold for AAGC than for VAD itself */
if ( !silent &&
iaxci_silence_threshold != 0.0f &&
(iaxci_filters & IAXC_FILTER_AGC) &&
(iaxci_filters & IAXC_FILTER_AAGC) &&
- st->speech_prob > 0.20f )
+ iprob > 20 )
{
static int i = 0;
@@ -163,7 +167,9 @@
if ( (i & 0x3f) == 0 )
{
- const float loudness = st->loudness2;
+ int32_t iloudness;
+ speex_preprocess_ctl(st, SPEEX_PREPROCESS_GET_AGC_LOUDNESS, &iloudness);
+ const float loudness = iloudness;
if ( loudness > 8000.0f || loudness < 4000.0f )
{