WaveHeader.cpp 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. //
  2. // WaveHeader.c
  3. // PCM2Wave
  4. //
  5. // Created by hejinlai on 13-6-18.
  6. // Copyright (c) 2013年 yunzhisheng. All rights reserved.
  7. //
  8. #include <stdlib.h>
  9. #include "WaveHeader.h"
  10. // wav头部结构体
  11. struct wave_header {
  12. char riff[4];
  13. int fileLength;
  14. char wavTag[4];
  15. char fmt[4];
  16. int size;
  17. unsigned short formatTag;
  18. unsigned short channel;
  19. int sampleRate;
  20. int bytePerSec;
  21. unsigned short blockAlign;
  22. unsigned short bitPerSample;
  23. char data[4];
  24. int dataSize;
  25. };
  26. void *createWaveHeader(int fileLength, short channel, int sampleRate, short bitPerSample)
  27. {
  28. struct wave_header *header = (struct wave_header *)malloc(sizeof(struct wave_header));
  29. if (header == NULL) {
  30. return NULL;
  31. }
  32. // RIFF
  33. header->riff[0] = 'R';
  34. header->riff[1] = 'I';
  35. header->riff[2] = 'F';
  36. header->riff[3] = 'F';
  37. // file length
  38. header->fileLength = fileLength + (44 - 8);
  39. // WAVE
  40. header->wavTag[0] = 'W';
  41. header->wavTag[1] = 'A';
  42. header->wavTag[2] = 'V';
  43. header->wavTag[3] = 'E';
  44. // fmt
  45. header->fmt[0] = 'f';
  46. header->fmt[1] = 'm';
  47. header->fmt[2] = 't';
  48. header->fmt[3] = ' ';
  49. header->size = 16;
  50. header->formatTag = 1;
  51. header->channel = channel;
  52. header->sampleRate = sampleRate;
  53. header->bitPerSample = bitPerSample;
  54. header->blockAlign = (short)(header->channel * header->bitPerSample / 8);
  55. header->bytePerSec = header->blockAlign * header->sampleRate;
  56. // data
  57. header->data[0] = 'd';
  58. header->data[1] = 'a';
  59. header->data[2] = 't';
  60. header->data[3] = 'a';
  61. // data size
  62. header->dataSize = fileLength;
  63. return header;
  64. }