bonjour a tous,
voila j'essaye d'utiliser speex pour encoder un flux audio
dans un premier temps j'essaye d'utiliser des exemple de code fourni dans la doc pour cerner le fonctionnement et j'ai un petit soucis

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
char *inFile;
FILE *fin;
FILE *out;
short in[FRAME_SIZE];
float input[FRAME_SIZE];
printf("FRAME_SIZE: %i\n", FRAME_SIZE);
char cbits[4096];
int nbBytes;
/*Holds the state of the encoder*/
void *state;
/*Holds bits so they can be read and written to by the Speex routines*/
SpeexBits bits;
int i, tmp;
 
 
/*Create a new encoder state in narrowband mode*/
state = speex_encoder_init(&speex_nb_mode);
 
/*Set the quality to 8 (15 kbps)*/
tmp=8;
speex_encoder_ctl(state, SPEEX_SET_QUALITY, &tmp);
 
inFile = "test.mp3";
if ((fin = fopen(inFile, "r")) == NULL)
{
printf("Warning: Cannot open file!\n");
system("pause");
return 0;
}
 
if ((out = fopen("test.out", "w+")) == NULL)
{
printf("Warning: Cannot open file!\n");
system("pause");
return 0;
}
 
/*Initialization of the structure that holds the bits*/
speex_bits_init(&bits);
while (1)
{
/*Read a 16 bits/sample audio frame*/
fread(in, sizeof(short), FRAME_SIZE, fin);
 
if (feof(fin))
break;
/*Copy the 16 bits values to float so Speex can work on them*/
for (i=0;i<FRAME_SIZE;i++)
input[i]=in[i];
 
/*Flush all the bits in the struct so we can encode a new frame*/
speex_bits_reset(&bits);
 
/*Encode the frame*/
speex_encode(state, input, &bits);
int toto = 0;
while (toto < FRAME_SIZE)
{
	std::cout << input[toto] << " " << in[toto] << std::endl;
toto++;
}
/*Copy the bits to an array of char that can be written*/
nbBytes = speex_bits_write(&bits, cbits, FRAME_SIZE);
 
/*Write the size of the frame first. This is what sampledec expects but
it's likely to be different in your own application*/
fwrite(&nbBytes, sizeof(int), 1, out);
/*Write the compressed data*/
std::cout << nbBytes << std::endl;
fwrite(cbits, 1, nbBytes, out);
 
}
system("pause");
/*Destroy the encoder state*/
speex_encoder_destroy(state);
/*Destroy the bit-packing struct*/
speex_bits_destroy(&bits);
fclose(fin);
fclose(fout);
le problème que j'ai est que le fichier générer fait 42 octet alors que le fichier source test.mp3 fait 3.6 mo
le problème doit être flagrant mais pas moyen de le trouver, un peu d'aide ne serai pas de refus

cordialement