Anklang-0.3.0-1416-gfa8ce8d2 anklang-0.3.0-1416-gfa8ce8d2
ASE — Anklang Sound Engine (C++)

« « « Anklang Documentation
Loading...
Searching...
No Matches
transport.cc
Go to the documentation of this file.
1 // This Source Code Form is licensed MPL-2.0: http://mozilla.org/MPL/2.0
2#include "transport.hh"
3#include "utils.hh"
4#include "internal.hh"
5
6namespace Ase {
7
8// == SpeakerArrangement ==
9// Count the number of channels described by the SpeakerArrangement.
11speaker_arrangement_count_channels (SpeakerArrangement spa)
12{
13 const uint64_t bits = uint64_t (speaker_arrangement_channels (spa));
14 if_constexpr (sizeof (bits) == sizeof (long))
15 return __builtin_popcountl (bits);
16 return __builtin_popcountll (bits);
17}
18
19// Check if the SpeakerArrangement describes auxillary channels.
20bool
21speaker_arrangement_is_aux (SpeakerArrangement spa)
22{
24}
25
26// Retrieve the bitmask describing the SpeakerArrangement channels.
28speaker_arrangement_channels (SpeakerArrangement spa)
29{
30 const uint64_t bits = uint64_t (spa) & uint64_t (speaker_arrangement_channels_mask);
31 return SpeakerArrangement (bits);
32}
33
34const char*
35speaker_arrangement_bit_name (SpeakerArrangement spa)
36{
37 switch (spa)
38 { // https://wikipedia.org/wiki/Surround_sound
39 case SpeakerArrangement::NONE: return "-";
40 // case SpeakerArrangement::MONO: return "Mono";
41 case SpeakerArrangement::FRONT_LEFT: return "FL";
42 case SpeakerArrangement::FRONT_RIGHT: return "FR";
43 case SpeakerArrangement::FRONT_CENTER: return "FC";
44 case SpeakerArrangement::LOW_FREQUENCY: return "LFE";
45 case SpeakerArrangement::BACK_LEFT: return "BL";
46 case SpeakerArrangement::BACK_RIGHT: return "BR";
47 case SpeakerArrangement::AUX: return "AUX";
48 case SpeakerArrangement::STEREO: return "Stereo";
49 case SpeakerArrangement::STEREO_21: return "Stereo-2.1";
50 case SpeakerArrangement::STEREO_30: return "Stereo-3.0";
51 case SpeakerArrangement::STEREO_31: return "Stereo-3.1";
52 case SpeakerArrangement::SURROUND_50: return "Surround-5.0";
53 case SpeakerArrangement::SURROUND_51: return "Surround-5.1";
54#if 0 // TODO: dynamic multichannel support
55 case SpeakerArrangement::FRONT_LEFT_OF_CENTER: return "FLC";
56 case SpeakerArrangement::FRONT_RIGHT_OF_CENTER: return "FRC";
57 case SpeakerArrangement::BACK_CENTER: return "BC";
58 case SpeakerArrangement::SIDE_LEFT: return "SL";
59 case SpeakerArrangement::SIDE_RIGHT: return "SR";
60 case SpeakerArrangement::TOP_CENTER: return "TC";
61 case SpeakerArrangement::TOP_FRONT_LEFT: return "TFL";
62 case SpeakerArrangement::TOP_FRONT_CENTER: return "TFC";
63 case SpeakerArrangement::TOP_FRONT_RIGHT: return "TFR";
64 case SpeakerArrangement::TOP_BACK_LEFT: return "TBL";
65 case SpeakerArrangement::TOP_BACK_CENTER: return "TBC";
66 case SpeakerArrangement::TOP_BACK_RIGHT: return "TBR";
67 case SpeakerArrangement::SIDE_SURROUND_50: return "Side-Surround-5.0";
68 case SpeakerArrangement::SIDE_SURROUND_51: return "Side-Surround-5.1";
69#endif
70 }
71 return nullptr;
72}
73
75speaker_arrangement_desc (SpeakerArrangement spa)
76{
77 const bool isaux = speaker_arrangement_is_aux (spa);
78 const SpeakerArrangement chan = speaker_arrangement_channels (spa);
79 const char *chname = SpeakerArrangement::MONO == chan ? "Mono" : speaker_arrangement_bit_name (chan);
80 std::string s (chname ? chname : "<INVALID>");
81 if (isaux)
82 s = std::string (speaker_arrangement_bit_name (SpeakerArrangement::AUX)) + "(" + s + ")";
83 return s;
84}
85
86} // Ase
#define if_constexpr
Indentation helper for editors that cannot (yet) decipher if constexpr
Definition internal.hh:41
The Anklang C++ API namespace.
Definition api.hh:8
SpeakerArrangement
Flags to indicate channel arrangements of a bus.
Definition transport.hh:10
@ FRONT_LEFT
Stereo Left (FL)
@ FRONT_RIGHT
Stereo Right (FR)
@ AUX
Flag for side chain uses.
@ LOW_FREQUENCY
Low Frequency Effects (LFE)
@ MONO
Single Channel (M)
uint8_t uint8
An 8-bit unsigned integer.
Definition cxxaux.hh:21
typedef uint64_t