// 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 #include namespace audio { class AudioFormat { private: unsigned int sampleRate = 0; unsigned int bitWidth = 0; unsigned int channels = 0; public: constexpr AudioFormat() = default; constexpr AudioFormat(unsigned int sampleRate, unsigned int bitWidth, unsigned int channels) noexcept : sampleRate(sampleRate), bitWidth(bitWidth), channels(channels) {} auto getSampleRate() const noexcept -> unsigned int; auto getBitWidth() const noexcept -> unsigned int; auto getChannels() const noexcept -> unsigned int; auto getBitrate() const noexcept -> unsigned long int; auto toString() const -> std::string; auto bytesToMicroseconds(unsigned int bytes) const noexcept -> std::chrono::microseconds; auto microsecondsToBytes(std::chrono::microseconds duration) const noexcept -> unsigned int; auto operator==(const AudioFormat &other) const -> bool; auto operator!=(const AudioFormat &other) const -> bool; auto operator>(const AudioFormat &other) const -> bool; auto operator<(const AudioFormat &other) const -> bool; auto operator<=(const AudioFormat &other) const -> bool; auto operator>=(const AudioFormat &other) const -> bool; auto isValid() const noexcept -> bool; auto isNull() const noexcept -> bool; static auto makeMatrix(std::set sampleRates, std::set bitWidths, std::set channels) -> std::vector; }; static constexpr inline auto nullFormat = AudioFormat(); }; // namespace audio