Salve,
sto implementando una sorta di compressione dei file audio, (lo vuole cosi) .
Ecco tra i tanti problemi ho questo: devo fare in modo, che quando ho campioni audio uguali (entro certi limiti) di cambiarli in valori uguali.
Questo è il codice e la parte in questione dovrebbe andare nell if ls.
Suggerimenti?
Codice PHP:
int main(int argc, char **argv)
{
FILE *in,*out;
WAVHDR whr;
int i,i1,i2,js,ls,i4,ths;
signed short sample,samples[513][2],sample_o[2];
unsigned long pos;
in = fopen("h:\\canzoni\\audio.wav","rb");
if(in == NULL)
return -1;
out = fopen("c:\\out.raw","wb+");
if(out == NULL){
fclose(in);
return -2;
}
fread(&whr,sizeof(WAVHDR),1,in);
pos = 0;
i4 = 0;
for(i=0;i<10000;i++){
pos = 0;
for(i1=0;i1<513;i1++){
for(i2=0;i2<2;i2++){
signed short s;
fread(&sample,sizeof(short),1,in);
if(pos == 0){
sample_o[i2] = sample;
s = sample;
}
else{
s = sample - sample_o[i2];
sample_o[i2] = sample;
}
samples[i1][i2] = s;
}
if(pos == 0)
i1++;
pos++;
}
if(ls){ //qui
signed short s,s1;
for(i1=2;i1<513;i1++){
for(i2=0;i2<2;i2++){
}
}
}
js = 1;
if(js && whr.wNumChannels == 2){
for(i1=2;i1<513;i1++)
samples[i1][1] = samples[i1][0] - samples[i1][1];
}
{
int m[4];
m[0] = m[2] = samples[2][0];
m[1] = m[3] = samples[2][1];
for(i1=3;i1<513;i1++){
for(i2=0;i2<2;i2++){
int i3;
signed short s;
s = samples[i1][i2];
i3 = i2;
if(s < 0)
i3+= 2;
m[i3] += s;
m[i3] >>= 1;
}
}
samples[1][0] = m[0];
samples[1][1] = m[1];
for(i1=2;i1<513;i1++){
for(i2=0;i2<2;i2++){
signed short s,s1;
int i3;
s = samples[i1][i2];
i3 = i2;
if(s < 0)
i3+= 2;
s1 = s - m[i3];
if(s < 0 && !s1){
s1 = -1;
i4++;
}
samples[i1][i2] = s1;
}
}
}
fwrite(samples,sizeof(samples),1,out);
}
fclose(in);
fclose(out);
return 0;
}
Grazie