r96128
2007-Dec-06 06:00 UTC
[Speex-dev] Some question about speexcodex 1.2 beta2 on linux
Hi,
I am an user of speex codec.Can I ask some question about the speexcodec
1.2beta2
on installed to linux(fedora 6) thanks!
After I downloaded the latest version of codec
then I type the commands to install :
configure -prefix=/home/...../test -enable-shared -enable-static
make
make install
then I try to compile my encode.c
here is the encode.c of mine:
====================================#include <speex/speex.h>
#include <speex/speex_preprocess.h>
#include <stdio.h>
#define MAX_FRAME_SIZE 320
int main() {
FILE *fin, *fout;
short in[MAX_FRAME_SIZE];
char cbits[200];
int nbBytes = 0;
void *state;
SpeexBits bits;
int m_frame_size;
int m_channels = 1;
// SpeeX encode options
int m_bitrate = (8 << 10);
int m_complexity = 3;
int m_quality = 8;
int m_encMode = 6;
int m_iAGC = 0;
int m_iDenoise = 0;
SpeexPreprocessState *m_preProcesser;
int nOff = 0, nOn = 1;
int modex=30;
speex_bits_init(&bits);
state = speex_encoder_init(&speex_nb_mode);
speex_encoder_ctl(state,SPEEX_RESET_STATE,NULL);
speex_encoder_ctl(state,SPEEX_RESET_STATE,NULL);
speex_encoder_ctl(state,SPEEX_GET_FRAME_SIZE,&m_frame_size);
speex_encoder_ctl(state,SPEEX_SET_VAD, &nOff);
speex_encoder_ctl(state,SPEEX_SET_DTX, &nOn);
speex_encoder_ctl(state,SPEEX_SET_MODE,&m_encMode);
speex_encoder_ctl(state,SPEEX_SET_BITRATE,&m_bitrate);
// speex_encoder_ctl(state, SPEEX_SET_QUALITY, &tmp);
m_preProcesser = speex_preprocess_state_init(m_frame_size, 8000);
speex_preprocess_ctl(m_preProcesser, SPEEX_PREPROCESS_SET_DENOISE,
&m_iDenoise);
speex_preprocess_ctl(m_preProcesser, SPEEX_PREPROCESS_SET_AGC,
&m_iAGC);
fin = fopen("test.pcm", "r+b");
fout = fopen("out.spx", "w+b");
if (fin == NULL || fout == NULL){
printf("FILE open error!!\n");
return 1;
}
while(1){
fread(in, sizeof(short), m_frame_size, fin);
if(feof(fin))
break;
speex_bits_reset(&bits);
if (m_preProcesser)
speex_preprocess(m_preProcesser, in, NULL);
speex_encode_int(state, in, &bits);
nbBytes = speex_bits_write(&bits, cbits, 200);
fwrite(&nbBytes, sizeof(int), 1, fout);
#ifdef _DEBUG
printf("Encode nbBytes: %d\n", nbBytes);
#endif
fwrite(cbits, 1, nbBytes, fout);
//fflush(fout);
}
speex_encoder_destroy(state);
speex_bits_destroy(&bits);
fclose(fin);
fclose(fout);
return 0;
}
============================
then I used gcc or g++ to compile this file with the static libery
command:
gcc encode.c ../test/lib/libspeex.so
the result of compiling is ok
then when I run the program it shows
'./a.out: symbol lookup error: ./a.out: undefined symbol:
speex_preprocess_state_init
how can I compile the file?
thanks for the viewing for this mail
--
Open WebMail Project (http://openwebmail.org)
Jean-Marc Valin
2007-Dec-07 12:50 UTC
[Speex-dev] Some question about speexcodex 1.2 beta2 on linux
Just link with libspeexdsp (you might have svn and not 1.2beta2 installed) Jean-Marc r96128 a ?crit :> Hi, > I am an user of speex codec.Can I ask some question about the speexcodec 1.2beta2 > on installed to linux(fedora 6) thanks! > > After I downloaded the latest version of codec > then I type the commands to install : > > configure -prefix=/home/...../test -enable-shared -enable-static > make > make install > > then I try to compile my encode.c > here is the encode.c of mine: > ====================================> #include <speex/speex.h> > #include <speex/speex_preprocess.h> > #include <stdio.h> > > #define MAX_FRAME_SIZE 320 > > int main() { > FILE *fin, *fout; > short in[MAX_FRAME_SIZE]; > char cbits[200]; > int nbBytes = 0; > void *state; > SpeexBits bits; > int m_frame_size; > int m_channels = 1; > > // SpeeX encode options > int m_bitrate = (8 << 10); > int m_complexity = 3; > int m_quality = 8; > int m_encMode = 6; > int m_iAGC = 0; > int m_iDenoise = 0; > > SpeexPreprocessState *m_preProcesser; > int nOff = 0, nOn = 1; > int modex=30; > speex_bits_init(&bits); > state = speex_encoder_init(&speex_nb_mode); > speex_encoder_ctl(state,SPEEX_RESET_STATE,NULL); > speex_encoder_ctl(state,SPEEX_RESET_STATE,NULL); > speex_encoder_ctl(state,SPEEX_GET_FRAME_SIZE,&m_frame_size); > speex_encoder_ctl(state,SPEEX_SET_VAD, &nOff); > speex_encoder_ctl(state,SPEEX_SET_DTX, &nOn); > speex_encoder_ctl(state,SPEEX_SET_MODE,&m_encMode); > speex_encoder_ctl(state,SPEEX_SET_BITRATE,&m_bitrate); > // speex_encoder_ctl(state, SPEEX_SET_QUALITY, &tmp); > > m_preProcesser = speex_preprocess_state_init(m_frame_size, 8000); > speex_preprocess_ctl(m_preProcesser, SPEEX_PREPROCESS_SET_DENOISE, > &m_iDenoise); > speex_preprocess_ctl(m_preProcesser, SPEEX_PREPROCESS_SET_AGC, &m_iAGC); > > fin = fopen("test.pcm", "r+b"); > fout = fopen("out.spx", "w+b"); > > if (fin == NULL || fout == NULL){ > printf("FILE open error!!\n"); > return 1; > } > > while(1){ > fread(in, sizeof(short), m_frame_size, fin); > if(feof(fin)) > break; > > speex_bits_reset(&bits); > > if (m_preProcesser) > speex_preprocess(m_preProcesser, in, NULL); > > speex_encode_int(state, in, &bits); > nbBytes = speex_bits_write(&bits, cbits, 200); > > fwrite(&nbBytes, sizeof(int), 1, fout); > #ifdef _DEBUG > printf("Encode nbBytes: %d\n", nbBytes); > #endif > fwrite(cbits, 1, nbBytes, fout); > //fflush(fout); > } > > speex_encoder_destroy(state); > speex_bits_destroy(&bits); > fclose(fin); > fclose(fout); > return 0; > } > > > ============================> > > then I used gcc or g++ to compile this file with the static libery > command: > > gcc encode.c ../test/lib/libspeex.so > > the result of compiling is ok > then when I run the program it shows > > './a.out: symbol lookup error: ./a.out: undefined symbol: > speex_preprocess_state_init > > how can I compile the file? > > thanks for the viewing for this mail > > > -- > Open WebMail Project (http://openwebmail.org) > > _______________________________________________ > Speex-dev mailing list > Speex-dev@xiph.org > http://lists.xiph.org/mailman/listinfo/speex-dev > >
Conrad Parker
2007-Dec-07 13:07 UTC
[Speex-dev] Some question about speexcodex 1.2 beta2 on linux
On 05/12/2007, r96128 <r96128@csie.ntu.edu.tw> wrote:> then I used gcc or g++ to compile this file with the static libery > command: > > gcc encode.c ../test/lib/libspeex.so > > the result of compiling is ok > then when I run the program it shows > > './a.out: symbol lookup error: ./a.out: undefined symbol: > speex_preprocess_state_initHi, The speex_preprocess* functions were recently moved into the new library libspeexdsp. So, you will need to link against both libspeex.so and libspeexdsp.so. cheers, Conrad.