// Copyright (c) 2017-2024, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/blob/master/LICENSE.md #pragma once #include #include #include namespace audio { class Encoder { public: struct Format { std::uint32_t chanNr; std::uint32_t sampleRate; }; static std::unique_ptr Create(const std::string &filePath, const Format &frmt); Encoder(const std::string &filePath, const Format &frmt); virtual ~Encoder(); virtual std::uint32_t Encode(std::uint32_t samplesToWrite, std::int16_t *pcmData) = 0; float getCurrentPosition() { return position; } std::uint32_t GetFileSize() { return fileSize; } const Format format; protected: float position = 0; std::FILE *fd = nullptr; std::unique_ptr streamBuffer; std::uint32_t fileSize = 0; std::string filePath; bool isInitialized = false; }; } // namespace audio