audio.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #ifndef AUDIO_H
  2. #define AUDIO_H
  3. #include <queue>
  4. #include <stdint.h>
  5. #include "vad-model.h"
  6. #include "offline-stream.h"
  7. #ifndef WAV_HEADER_SIZE
  8. #define WAV_HEADER_SIZE 44
  9. #endif
  10. using namespace std;
  11. class AudioFrame {
  12. private:
  13. int start;
  14. int end;
  15. int len;
  16. public:
  17. AudioFrame();
  18. AudioFrame(int len);
  19. ~AudioFrame();
  20. int SetStart(int val);
  21. int SetEnd(int val);
  22. int GetStart();
  23. int GetLen();
  24. int Disp();
  25. };
  26. class Audio {
  27. private:
  28. float *speech_data;
  29. int16_t *speech_buff;
  30. int speech_len;
  31. int speech_align_len;
  32. int offset;
  33. float align_size;
  34. int data_type;
  35. queue<AudioFrame *> frame_queue;
  36. public:
  37. Audio(int data_type);
  38. Audio(int data_type, int size);
  39. ~Audio();
  40. void Disp();
  41. bool LoadWav(const char* filename, int32_t* sampling_rate);
  42. void WavResample(int32_t sampling_rate, const float *waveform, int32_t n);
  43. bool LoadWav(const char* buf, int n_len, int32_t* sampling_rate);
  44. bool LoadPcmwav(const char* buf, int n_file_len, int32_t* sampling_rate);
  45. bool LoadPcmwav(const char* filename, int32_t* sampling_rate);
  46. int FetchChunck(float *&dout, int len);
  47. int Fetch(float *&dout, int &len, int &flag);
  48. void Padding();
  49. void Split(OfflineStream* offline_streamj);
  50. void Split(VadModel* vad_obj, vector<std::vector<int>>& vad_segments);
  51. float GetTimeLen();
  52. int GetQueueSize() { return (int)frame_queue.size(); }
  53. };
  54. #endif