программа на C - PullRequest
       16

программа на C

0 голосов
/ 11 марта 2011
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).Я думаю, что ошибка в том, что я хочу прочитать образцы PCM размером 2 байта, и мне нужно где-то их хранить.Какой тип данных я могу использовать для хранения 2-байтового значения pcm (значение pcm не является значением int).Пожалуйста, сообщите.

1 Ответ

2 голосов
/ 11 марта 2011

На этой строке:

num_bytes_read = fread(ptr,1,pcm_sample_size,fptr);//read one sample

ptr указывает на адрес значения, поэтому он должен быть sizeof(double) и 1, поскольку вы читаете только одно значение.

Результатом фреда является количество прочитанных элементов, а не количество байтов.

Вы инициализируете 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 разных значения, это не "квадрат". Я позволю вам исправить ваш код в соответствии с вашей реальной логикой.

...