/*============================================================================= Copyright (c) 2011-2017 Bolero MURAKAMI https://github.com/bolero-MURAKAMI/Sprout Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) =============================================================================*/ #ifndef SPROUT_COMPOST_SOURCES_SOURCE_HPP #define SPROUT_COMPOST_SOURCES_SOURCE_HPP #include #include #include // // COMPOST_LOAD_SOURCE // #define COMPOST_LOAD_SOURCE // // COMPOST_SRC_VERSION // #define COMPOST_SRC_VERSION(NUM) NUM namespace sprout { namespace compost { namespace sources { // // version_type // typedef unsigned long version_type; // // info_type // struct info_type { public: std::uint16_t format_tag; // format ID std::uint16_t channels; // channels std::uint32_t samples_per_sec; // sampling rate std::uint32_t bytes_per_sec; // data speed (Byte/sec) std::uint16_t block_size; // block size (Byte/sample*channels) std::uint16_t bits_per_sample; // bits per sample (bit/sample) std::size_t size; // elements }; // // sound_type // template struct sound_type { public: typedef Elem element_type; typedef element_type value_type; typedef std::size_t size_type; SPROUT_STATIC_CONSTEXPR size_type static_size = Size; typedef sprout::array elements_type; private: elements_type elements_; public: template SPROUT_CONSTEXPR sound_type(info_type const& info, Elems const&... elems) : elements_{{ (info.bits_per_sample == 8 ? elems / static_cast(0x80) - 1 : elems / static_cast(0x8000) )... }} { static_assert(sizeof...(Elems) == static_size, "sound_type<>: unmatch source size"); } SPROUT_CONSTEXPR value_type const& operator()(size_type x) const { return elements_[x]; } SPROUT_CONSTEXPR size_type size() const { return static_size; } SPROUT_CONSTEXPR elements_type const& elements() const { return elements_; } }; template SPROUT_CONSTEXPR_OR_CONST typename sprout::compost::sources::sound_type::size_type sprout::compost::sources::sound_type::static_size; } // namespace sources } // namespace compost } // namespace sprout #endif // #ifndef SPROUT_COMPOST_SOURCES_SOURCE_HPP