[Speex-dev] How can I use preprocessor standalone with a wav file?
Alexander Lcd
lcd877 at gmx.net
Wed Aug 31 08:16:01 PDT 2011
I have been tyring to use the preprocessor standalone by feeding it pcm data from a headerless pcm file (mono, 22050hz)
and then write the result to another file. Unfortunately, all I get back is noise (first frame is set to 0, rest is noise).
Frame size is set to 440.
I just modified testdenoise.c slightly to read/write from a file (see below) but I can't get useful results. What am I doing wrong? Do I need to perform additional initializations?
I am using 1.2rc1, target platform is windows (using Visual Studio).
Thank you for your help.
----------------- Modified version of testdenoise.c ----------------------
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <speex/speex_preprocess.h>
#include <stdio.h>
#define NN 440
int main()
{
short in[NN];
int i;
SpeexPreprocessState *st;
int count=0;
float f;
char *inFile = "C:\\Temp\\in.wav"; //.wav file containing only pcm data, no header info
int close_in=0;
char *outFile= "C:\\Temp\\out.wav";
FILE *fin, *fout=NULL;
fin = fopen(inFile, "rb");
if (!fin)
{
perror(inFile);
exit(1);
}
close_in=1;
fout = fopen(outFile, "wb");
if (!fout)
{
perror(outFile);
if (close_in == 1)
fclose(fin);
exit(1);
}
st = speex_preprocess_state_init(NN, 22050);
i=1;
speex_preprocess_ctl(st, SPEEX_PREPROCESS_SET_AGC, &i); //enabling AGC; denoise is enabled by default
i=8000;
speex_preprocess_ctl(st, SPEEX_PREPROCESS_SET_AGC_LEVEL, &i);
while (1)
{
int vad;
fread(in, sizeof(short), NN, fin);
if (feof(fin))
break;
vad = speex_preprocess_run(st, in);
fwrite(in, sizeof(short), NN, fout);
count++;
}
speex_preprocess_state_destroy(st);
fclose(fin);
fclose(fout);
return 0;
}
--
Empfehlen Sie GMX DSL Ihren Freunden und Bekannten und wir
belohnen Sie mit bis zu 50,- Euro! https://freundschaftswerbung.gmx.de
More information about the Speex-dev
mailing list