AWavLoader.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #pragma once
  2. #include <AK/String.h>
  3. #include <AK/RefPtr.h>
  4. #include <AK/StringView.h>
  5. #include <LibCore/CFile.h>
  6. #include <LibAudio/ABuffer.h>
  7. class ABuffer;
  8. namespace AK {
  9. class ByteBuffer;
  10. }
  11. // Parses a WAV file and produces an ABuffer instance from it
  12. class AWavLoader {
  13. public:
  14. explicit AWavLoader(const StringView& path);
  15. bool has_error() const { return !m_error_string.is_null(); }
  16. const char* error_string() { return m_error_string.characters(); }
  17. RefPtr<ABuffer> get_more_samples(size_t max_bytes_to_read_from_input = 128 * KB);
  18. void reset();
  19. void seek(const int position);
  20. int loaded_samples() const { return m_loaded_samples; }
  21. int total_samples() const { return m_total_samples; }
  22. u32 sample_rate() const { return m_sample_rate; }
  23. u16 num_channels() const { return m_num_channels; }
  24. u16 bits_per_sample() const { return m_bits_per_sample; }
  25. private:
  26. bool parse_header();
  27. RefPtr<CFile> m_file;
  28. String m_error_string;
  29. OwnPtr<AResampleHelper> m_resampler;
  30. u32 m_sample_rate { 0 };
  31. u16 m_num_channels { 0 };
  32. u16 m_bits_per_sample { 0 };
  33. int m_loaded_samples { 0 };
  34. int m_total_samples { 0 };
  35. };