<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=windows-1256">
<META content="MSHTML 6.00.2900.2180" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT face=Arial size=2>hello everybody in this great mailing list , i have 
some difficulties to follow my code .</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>i solved some problems thanks to Carine Liang , but 
i still have one problem and i think it is fatal one.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>when i encode the voice data in a wav file it is 
decoded without any errors it gives me 84 bytes&nbsp;wav file&nbsp;size&nbsp;for 
139 kbytes wav audio data .Naturally i wanted to return my file back to its 
normal state by decoding it i made up the decoder , Both are the same like the 
samples encoder and decoder.</FONT></DIV>
<DIV><FONT face=Arial size=2>Then , It gives me back bad file i can't open it 
whereas in the samples encoder and decoder it retrieve for me the file back to 
its original data format.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>here is my code :</FONT></DIV>
<DIV><FONT face=Arial size=2>for both the encoder and the decoder.</FONT></DIV>
<DIV><FONT face=Arial size=2>=============================</FONT></DIV>
<DIV><FONT face=Arial size=2>Speex Encoder ::</FONT></DIV>
<DIV><FONT face=Arial size=2>===========</FONT></DIV>
<DIV><FONT face=Arial size=2><FONT color=#0000ff size=2>
<P>#include</FONT><FONT size=2> "speex.h"</P></FONT><FONT color=#0000ff size=2>
<P>#include</FONT><FONT size=2> &lt;stdio.h&gt;</P></FONT><FONT color=#008000 
size=2>
<P>/*The frame size in hardcoded for this sample code but it doesn't have to 
be*/</P></FONT><FONT color=#0000ff size=2>
<P>#define</FONT><FONT size=2> FRAME_SIZE 160</P></FONT><FONT color=#0000ff 
size=2>
<P>int</FONT><FONT size=2> main(</FONT><FONT color=#0000ff 
size=2>int</FONT><FONT size=2> argc, </FONT><FONT color=#0000ff 
size=2>char</FONT><FONT size=2> **argv)</P>
<P>{</P>
<P></FONT><FONT color=#0000ff size=2>char</FONT><FONT size=2> *inFile;</P>
<P>FILE *fin;</P>
<P>FILE *fout;</P>
<P></FONT><FONT color=#0000ff size=2>short</FONT><FONT size=2> 
in[FRAME_SIZE];</P>
<P></FONT><FONT color=#0000ff size=2>float</FONT><FONT size=2> 
input[FRAME_SIZE];</P>
<P></FONT><FONT color=#0000ff size=2>char</FONT><FONT size=2> cbits[200];</P>
<P></FONT><FONT color=#0000ff size=2>int</FONT><FONT size=2> nbBytes;</P>
<P></FONT><FONT color=#008000 size=2>/*Holds the state of the 
encoder*/</P></FONT><FONT size=2>
<P></FONT><FONT color=#0000ff size=2>void</FONT><FONT size=2> *state;</P>
<P></FONT><FONT color=#008000 size=2>/*Holds bits so they can be read and 
written to by the Speex routines*/</P></FONT><FONT size=2>
<P>SpeexBits bits;</P>
<P></FONT><FONT color=#0000ff size=2>int</FONT><FONT size=2> i, tmp;</P>
<P></FONT><FONT color=#008000 size=2>/*Create a new encoder state in narrowband 
mode*/</P></FONT><FONT size=2>
<P>state = speex_encoder_init(&amp;speex_nb_mode);</P>
<P></FONT><FONT color=#008000 size=2>/*Set the quality to 8 (15 
kbps)*/</P></FONT><FONT size=2>
<P>tmp=8;</P>
<P>speex_encoder_ctl(state, SPEEX_SET_QUALITY, &amp;tmp);</P>
<P></FONT><FONT color=#008000 size=2>//inFile = argv[1];</P></FONT><FONT size=2>
<P>inFile = </FONT><FONT color=#0000ff size=2>new</FONT><FONT size=2> 
</FONT><FONT color=#0000ff size=2>char</FONT><FONT size=2>[10];</P>
<P>inFile = "ahmed.wav";</P>
<P>fin = fopen(inFile, "r");</P>
<P>fout = fopen("ahmed2.wav","w");</P>
<P></FONT><FONT color=#008000 size=2>/*Initialization of the structure that 
holds the bits*/</P></FONT><FONT size=2>
<P>speex_bits_init(&amp;bits);</P>
<P></FONT><FONT color=#0000ff size=2>while</FONT><FONT size=2> (1)</P>
<P>{</P>
<P></FONT><FONT color=#008000 size=2>/*Read a 16 bits/sample audio 
frame*/</P></FONT><FONT size=2>
<P>fread(in, </FONT><FONT color=#0000ff size=2>sizeof</FONT><FONT 
size=2>(</FONT><FONT color=#0000ff size=2>short</FONT><FONT size=2>), 
FRAME_SIZE, fin);</P>
<P></FONT><FONT color=#0000ff size=2>if</FONT><FONT size=2> (feof(fin))</P>
<P></FONT><FONT color=#0000ff size=2>break</FONT><FONT size=2>;</P>
<P></FONT><FONT color=#008000 size=2>/*Copy the 16 bits values to float so Speex 
can work on them*/</P></FONT><FONT size=2>
<P></FONT><FONT color=#0000ff size=2>for</FONT><FONT size=2> 
(i=0;i&lt;FRAME_SIZE;i++)</P>
<P>input[i]=in[i];</P>
<P></FONT><FONT color=#008000 size=2>/*Flush all the bits in the struct so we 
can encode a new frame*/</P></FONT><FONT size=2>
<P>speex_bits_reset(&amp;bits);</P>
<P></FONT><FONT color=#008000 size=2>/*Encode the frame*/</P></FONT><FONT 
size=2>
<P>speex_encode(state, input, &amp;bits);</P>
<P></FONT><FONT color=#008000 size=2>/*Copy the bits to an array of char that 
can be written*/</P></FONT><FONT size=2>
<P>nbBytes = speex_bits_write(&amp;bits, cbits, 200);</P>
<P></FONT><FONT color=#008000 size=2>/*Write the size of the frame first. This 
is what sampledec expects but</P>
<P>it's likely to be different in your own application*/</P></FONT><FONT size=2>
<P>fwrite(&amp;nbBytes, </FONT><FONT color=#0000ff size=2>sizeof</FONT><FONT 
size=2>(</FONT><FONT color=#0000ff size=2>int</FONT><FONT size=2>), 1, 
fout</FONT><FONT color=#008000 size=2>/*stdout*/</FONT><FONT size=2>);</P>
<P></FONT><FONT color=#008000 size=2>/*Write the compressed 
data*/</P></FONT><FONT size=2>
<P>fwrite(cbits, 1, nbBytes, fout</FONT><FONT color=#008000 
size=2>/*stdout*/</FONT><FONT size=2>);</P>
<P></P>
<P>}</P>
<P></P>
<P></FONT><FONT color=#008000 size=2>/*Destroy the encoder 
state*/</P></FONT><FONT size=2>
<P>speex_encoder_destroy(state);</P>
<P></FONT><FONT color=#008000 size=2>/*Destroy the bit-packing 
struct*/</P></FONT><FONT size=2>
<P>speex_bits_destroy(&amp;bits);</P>
<P>fclose(fin);</P>
<P>fclose(fout);</P>
<P></FONT><FONT color=#008000 size=2>//delete inFile;</P></FONT><FONT size=2>
<P></FONT><FONT color=#0000ff size=2>return</FONT><FONT size=2> 0;</P>
<P>}</P>
<P>&nbsp;</P>
<P>Here is the decoder&nbsp; ::</P>
<P>================</P><FONT color=#008000 size=2>
<P>// consSpexDec.cpp : Defines the entry point for the console application.</P>
<P>//</P></FONT><FONT color=#0000ff size=2>
<P>#include</FONT><FONT size=2> "stdafx.h"</P></FONT><FONT color=#0000ff size=2>
<P>#include</FONT><FONT size=2> "speex.h"</P></FONT><FONT color=#0000ff size=2>
<P>#include</FONT><FONT size=2> &lt;stdio.h&gt;</P></FONT><FONT color=#0000ff 
size=2>
<P>#define</FONT><FONT size=2> FRAME_SIZE 160</P></FONT><FONT color=#0000ff 
size=2>
<P>int</FONT><FONT size=2> _tmain(</FONT><FONT color=#0000ff 
size=2>int</FONT><FONT size=2> argc, _TCHAR* argv[])</P>
<P>{</P>
<P></FONT><FONT color=#0000ff size=2>char</FONT><FONT size=2> *outFile;</P>
<P>FILE *fout;</P>
<P>FILE *fin;</P>
<P></FONT><FONT color=#008000 size=2>/*Holds the audio that will be written to 
file (16 bits per sample)*/</P></FONT><FONT size=2>
<P></FONT><FONT color=#0000ff size=2>short</FONT><FONT size=2> 
out[FRAME_SIZE];</P>
<P></FONT><FONT color=#008000 size=2>/*Speex handle samples as float, so we need 
an array of floats*/</P></FONT><FONT size=2>
<P></FONT><FONT color=#0000ff size=2>float</FONT><FONT size=2> 
output[FRAME_SIZE];</P>
<P></FONT><FONT color=#0000ff size=2>char</FONT><FONT size=2> cbits[200];</P>
<P></FONT><FONT color=#0000ff size=2>int</FONT><FONT size=2> nbBytes;</P>
<P></FONT><FONT color=#008000 size=2>/*Holds the state of the 
decoder*/</P></FONT><FONT size=2>
<P></FONT><FONT color=#0000ff size=2>void</FONT><FONT size=2> *state;</P>
<P></FONT><FONT color=#008000 size=2>/*Holds bits so they can be read and 
written to by the Speex routines*/</P></FONT><FONT size=2>
<P>SpeexBits bits;</P>
<P></FONT><FONT color=#0000ff size=2>int</FONT><FONT size=2> i, tmp;</P>
<P></FONT><FONT color=#008000 size=2>/*Create a new decoder state in narrowband 
mode*/</P></FONT><FONT size=2>
<P>state = speex_decoder_init(&amp;speex_nb_mode);</P>
<P></FONT><FONT color=#008000 size=2>/*Set the perceptual enhancement 
on*/</P></FONT><FONT size=2>
<P>tmp=1;</P>
<P>speex_decoder_ctl(state, SPEEX_SET_ENH, &amp;tmp);</P>
<P></FONT><FONT color=#008000 size=2>//outFile = argv[1];</P></FONT><FONT 
size=2>
<P>outFile = "ahmed3.wav\0";</P>
<P>fout = fopen(outFile, "w");</P>
<P>fin = fopen("ahmed2.wav","r");</P>
<P></FONT><FONT color=#008000 size=2>/*Initialization of the structure that 
holds the bits*/</P></FONT><FONT size=2>
<P>speex_bits_init(&amp;bits);</P>
<P></FONT><FONT color=#0000ff size=2>while</FONT><FONT size=2> (1)</P>
<P>{</P>
<P></FONT><FONT color=#008000 size=2>/*Read the size encoded by sampleenc, this 
part will likely be </P>
<P>different in your application*/</P></FONT><FONT size=2>
<P>fread(&amp;nbBytes, </FONT><FONT color=#0000ff size=2>sizeof</FONT><FONT 
size=2>(</FONT><FONT color=#0000ff size=2>int</FONT><FONT size=2>), 1, 
fin</FONT><FONT color=#008000 size=2>/*stdin*/</FONT><FONT size=2>);</P>
<P>fprintf (stderr, "nbBytes: %d\n", nbBytes);</P>
<P></FONT><FONT color=#0000ff size=2>if</FONT><FONT size=2> 
(feof(fin</FONT><FONT color=#008000 size=2>/*stdin*/</FONT><FONT size=2>))</P>
<P></FONT><FONT color=#0000ff size=2>break</FONT><FONT size=2>;</P>
<P></P>
<P></FONT><FONT color=#008000 size=2>/*Read the "packet" encoded by 
sampleenc*/</P></FONT><FONT size=2>
<P>fread(cbits, 1, nbBytes, fin</FONT><FONT color=#008000 
size=2>/*stdin*/</FONT><FONT size=2>);</P>
<P></FONT><FONT color=#008000 size=2>/*Copy the data into the bit-stream 
struct*/</P></FONT><FONT size=2>
<P>speex_bits_read_from(&amp;bits, cbits, nbBytes);</P>
<P></FONT><FONT color=#008000 size=2>/*Decode the data*/</P></FONT><FONT size=2>
<P>speex_decode(state, &amp;bits, output);</P>
<P></FONT><FONT color=#008000 size=2>/*Copy from float to short (16 bits) for 
output*/</P></FONT><FONT size=2>
<P></FONT><FONT color=#0000ff size=2>for</FONT><FONT size=2> 
(i=0;i&lt;FRAME_SIZE;i++)</P>
<P>out[i]=output[i];</P>
<P></FONT><FONT color=#008000 size=2>/*Write the decoded audio to 
file*/</P></FONT><FONT size=2>
<P>fwrite(out, </FONT><FONT color=#0000ff size=2>sizeof</FONT><FONT 
size=2>(</FONT><FONT color=#0000ff size=2>short</FONT><FONT size=2>), 
FRAME_SIZE, fout);</P>
<P>}</P>
<P></P>
<P></FONT><FONT color=#008000 size=2>/*Destroy the decoder 
state*/</P></FONT><FONT size=2>
<P>speex_decoder_destroy(state);</P>
<P></FONT><FONT color=#008000 size=2>/*Destroy the bit-stream 
truct*/</P></FONT><FONT size=2>
<P>speex_bits_destroy(&amp;bits);</P>
<P>fclose(fout);</P>
<P></FONT><FONT color=#0000ff size=2>return</FONT><FONT size=2> 0;</P>
<P>}</P>
<P>&nbsp;</P>
<P>Please help me guys please</P></FONT></FONT></FONT></DIV></BODY></HTML>