double buf[1000];
double value;
double *ptr = &value;
for(i=0; i < no_of_iterations; i++) {
for(j=0; j < chunkSize; j++) {
num_bytes_read = fread(ptr,1,pcm_sample_size,fptr); //read one sample
if(num_bytes_read == 2) {
sum_sq += (*ptr) * (*ptr); //calculate power of each sample
buf[j] = *ptr;
}
else {
flag = 0;
break;
}
}
if(!flag) {
printf("exiting loop");
break;
}
power = sum_sq/chunkSize;//calculate rms value of signals for chunkSize samples
if(power < threshold) //compare with some value
printf("power is lower than threshold"); //silence-don't write
else { //write
ret = fwrite(buf,1,pcm_sample_size,optr);
if(ret != 1)
printf("error in fwrite %d", ret);
}
}
printf("done");
fclose(fptr);
fclose(optr);
以上是我的代码,根据某些条件将一些pcm样本写入文件,但我得到了fread错误。 控件不会输入if(num_bytes_read == 2)块。我认为错误是因为我想读取大小为2字节的pcm样本,我需要在某处存储它。我可以使用什么数据类型来存储2个字节的pcm值(pcm值不是int值)。 请指教。
答案 0 :(得分:2)
在这一行:
num_bytes_read = fread(ptr,1,pcm_sample_size,fptr);//read one sample
ptr指向值的地址所以它必须是sizeof(double)
和1,因为你只读了一个值。
fread的结果是读取的项目数,而不是字节数。
您是否正在初始化sum_sq
所需的位置?
阅读2个双打:
double readbuf[2];
num_items_read = fread( readbuf, sizeof(double), 2, fptr );
if( num_items_read == 2 )
{
covariance_sum += readbuf[0] * readbuf[1];
}
不确定你想要成倍增加,但显然如果它是2个不同的值,它不是“正方形”。我会让你修改你的代码到你的实际逻辑。