Iros
 
Loading...
Searching...
No Matches
frame_info.h
Go to the documentation of this file.
1#pragma once
2
7#include "di/types/integers.h"
9
10namespace audio {
17
19 using enum SampleFormat;
20 return di::make_enumerators<"SampleFormat">(
21 di::enumerator<"SignedInt16LE", SignedInt16LE>, di::enumerator<"SignedInt24LE", SignedInt24LE>,
22 di::enumerator<"SignedInt32LE", SignedInt32LE>, di::enumerator<"Float32LE", Float32LE>);
23}
24
25constexpr auto format_bytes_per_sample(SampleFormat format) -> usize {
26 using enum SampleFormat;
27 switch (format) {
28 case SignedInt16LE:
29 return 2;
30 case SignedInt24LE:
31 return 3;
32 case SignedInt32LE:
33 case Float32LE:
34 return 4;
35 }
37}
38
39struct FrameInfo {
43
44 constexpr auto operator==(FrameInfo const&) const -> bool = default;
45 constexpr auto operator<=>(FrameInfo const&) const = default;
46
48 return di::make_fields<"FrameInfo">(di::field<"channel_count", &FrameInfo::channel_count>,
49 di::field<"format", &FrameInfo::format>,
50 di::field<"sample_rate_hz", &FrameInfo::sample_rate_hz>);
51 }
52};
53}
Definition wav.cpp:17
constexpr auto format_bytes_per_sample(SampleFormat format) -> usize
Definition frame_info.h:25
constexpr auto tag_invoke(di::Tag< di::reflect >, di::InPlaceType< SampleFormat >)
Definition frame_info.h:18
SampleFormat
Definition frame_info.h:11
@ SignedInt24LE
Definition frame_info.h:13
@ SignedInt32LE
Definition frame_info.h:14
@ SignedInt16LE
Definition frame_info.h:12
@ Float32LE
Definition frame_info.h:15
size_t usize
Definition integers.h:33
__UINT32_TYPE__ u32
Definition integers.h:11
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
constexpr auto make_fields
Definition field.h:80
constexpr auto enumerator
Definition enumerator.h:36
constexpr auto field
Definition field.h:42
constexpr auto make_enumerators
Definition enumerator.h:74
void unreachable()
Definition unreachable.h:4
Definition frame_info.h:39
constexpr auto operator==(FrameInfo const &) const -> bool=default
u32 channel_count
Definition frame_info.h:40
SampleFormat format
Definition frame_info.h:41
constexpr friend auto tag_invoke(di::Tag< di::reflect >, di::InPlaceType< FrameInfo >)
Definition frame_info.h:47
constexpr auto operator<=>(FrameInfo const &) const =default
u32 sample_rate_hz
Definition frame_info.h:42
Definition in_place_type.h:5