wav_parser.h 930 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #pragma once
  2. #include <toolbox/stream/stream.h>
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. typedef enum {
  7. FormatTagPCM = 0x0001,
  8. FormatTagIEEE_FLOAT = 0x0003,
  9. } FormatTag;
  10. typedef struct {
  11. uint8_t riff[4];
  12. uint32_t size;
  13. uint8_t wave[4];
  14. } WavHeaderChunk;
  15. typedef struct {
  16. uint8_t fmt[4];
  17. uint32_t size;
  18. uint16_t tag;
  19. uint16_t channels;
  20. uint32_t sample_rate;
  21. uint32_t byte_per_sec;
  22. uint16_t block_align;
  23. uint16_t bits_per_sample;
  24. } WavFormatChunk;
  25. typedef struct {
  26. uint8_t data[4];
  27. uint32_t size;
  28. } WavDataChunk;
  29. typedef struct WavParser WavParser;
  30. WavParser* wav_parser_alloc();
  31. void wav_parser_free(WavParser* parser);
  32. bool wav_parser_parse(WavParser* parser, Stream* stream);
  33. size_t wav_parser_get_data_start(WavParser* parser);
  34. size_t wav_parser_get_data_end(WavParser* parser);
  35. size_t wav_parser_get_data_len(WavParser* parser);
  36. #ifdef __cplusplus
  37. }
  38. #endif