WavWriter.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. /*
  2. * Copyright (c) 2020, William McPherson <willmcpherson2@gmail.com>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/ByteString.h>
  8. #include <AK/Noncopyable.h>
  9. #include <AK/RefPtr.h>
  10. #include <AK/StringView.h>
  11. #include <LibAudio/Encoder.h>
  12. #include <LibAudio/Sample.h>
  13. #include <LibAudio/SampleFormats.h>
  14. #include <LibCore/File.h>
  15. #include <LibCore/Forward.h>
  16. namespace Audio {
  17. class WavWriter : public Encoder {
  18. AK_MAKE_NONCOPYABLE(WavWriter);
  19. AK_MAKE_NONMOVABLE(WavWriter);
  20. public:
  21. static ErrorOr<NonnullOwnPtr<WavWriter>> create_from_file(StringView path, int sample_rate = 44100, u16 num_channels = 2, PcmSampleFormat sample_format = PcmSampleFormat::Int16);
  22. WavWriter(int sample_rate = 44100, u16 num_channels = 2, PcmSampleFormat sample_format = PcmSampleFormat::Int16);
  23. ~WavWriter();
  24. virtual ErrorOr<void> write_samples(ReadonlySpan<Sample> samples) override;
  25. virtual ErrorOr<void> finalize() override;
  26. ErrorOr<void> set_file(StringView path);
  27. private:
  28. ErrorOr<void> write_header();
  29. OwnPtr<Core::OutputBufferedFile> m_file;
  30. bool m_finalized { false };
  31. u32 m_sample_rate;
  32. u16 m_num_channels;
  33. PcmSampleFormat m_sample_format;
  34. u32 m_data_sz { 0 };
  35. };
  36. }