afe_audio_processor.h 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #ifndef AFE_AUDIO_PROCESSOR_H
  2. #define AFE_AUDIO_PROCESSOR_H
  3. #include <esp_afe_sr_models.h>
  4. #include <freertos/FreeRTOS.h>
  5. #include <freertos/task.h>
  6. #include <freertos/event_groups.h>
  7. #include <string>
  8. #include <vector>
  9. #include <functional>
  10. #include "audio_processor.h"
  11. #include "audio_codec.h"
  12. class AfeAudioProcessor : public AudioProcessor {
  13. public:
  14. AfeAudioProcessor();
  15. ~AfeAudioProcessor();
  16. void Initialize(AudioCodec* codec, int frame_duration_ms) override;
  17. void Feed(std::vector<int16_t>&& data) override;
  18. void Start() override;
  19. void Stop() override;
  20. bool IsRunning() override;
  21. void OnOutput(std::function<void(std::vector<int16_t>&& data)> callback) override;
  22. void OnVadStateChange(std::function<void(bool speaking)> callback) override;
  23. size_t GetFeedSize() override;
  24. void EnableDeviceAec(bool enable) override;
  25. private:
  26. EventGroupHandle_t event_group_ = nullptr;
  27. esp_afe_sr_iface_t* afe_iface_ = nullptr;
  28. esp_afe_sr_data_t* afe_data_ = nullptr;
  29. std::function<void(std::vector<int16_t>&& data)> output_callback_;
  30. std::function<void(bool speaking)> vad_state_change_callback_;
  31. AudioCodec* codec_ = nullptr;
  32. int frame_samples_ = 0;
  33. bool is_speaking_ = false;
  34. std::vector<int16_t> output_buffer_;
  35. void AudioProcessorTask();
  36. };
  37. #endif