Exemple #1
0
float *ReadWaveFile(WAVHDR *WavHdr, int *SampleNum, FILE *fp)
{

  float *data;
  short  *datashort;
  unsigned char *datachar;

  assert(fp);
  ReadWaveHdr(WavHdr, fp);
  (*SampleNum) = (WavHdr->Subchunk2Size)*8/(WavHdr->BitsPerSample);
  
  if (WavHdr->BitsPerSample == 8) 
    {
      fseek(fp, 44, SEEK_SET);
      datachar = (unsigned char *)malloc ((*SampleNum)*sizeof(char));
      fread((void *)datachar, sizeof(char), (*SampleNum), fp);
      data = char2float(datachar, (*SampleNum));
      free(datachar);
    }
  else 
    { 
      fseek(fp, 44, SEEK_SET);
      datashort = (short *)malloc ((*SampleNum)*sizeof(short));
      fread((void *)datashort, sizeof(short), (*SampleNum), fp);
      data = short2float(datashort, (*SampleNum));
      free(datashort);
    };

  return data;
}
Exemple #2
0
int main(int argc, char** argv)
{
    int i;
    unsigned int mask = 0x1F80;
    
    __asm {
        ldmxcsr mask;
        stmxcsr mask;
    }
    
    // set the rounding mode to round toward zero instead of the default round to nearest.
    mask |= (3L << 13);
    
    __asm {
        ldmxcsr mask;
    }
    
    floats = (float*) GlobalAlloc(GPTR, 32 * sizeof(float));
    shorts = (short*) GlobalAlloc(GPTR, 32 * sizeof(short));
    
    floats = (float*) (((unsigned int)floats + 15L) & ~15L);
    shorts = (short*) (((unsigned int)shorts + 15L) & ~15L);
        
    for (i = 0; i < 16; i++) {
        shorts[i] = (short)(i * 3.1415f);
        printf("reference: %f\n", (float)shorts[i]);
    }
    
    short2float(shorts, floats, 16);
    
    for (i = 0; i < 16; i++)
        printf("%f\n", floats[i]);
    
    printf("-----------------------\n");
    
    for (i = 0; i < 16; i++) {
        floats[i] = i * 3.1415f;
        printf("reference: %d\n", (short)floats[i]);
    }
    
    float2short(floats, shorts, 16);
    
    for (i = 0; i < 16; i++)
        printf("%d\n", shorts[i]);
    
    return 0;
}