Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions include/adm/common_definitions.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,24 @@ namespace adm {
ADM_EXPORT const std::map<std::string, adm::AudioTrackFormatId>
audioTrackFormatLookupTable();

/**
* @brief Lookup table for AudioStreamFormats
*
* Specified speaker labels:
*
* - M+000, M+022, M-022, M+SC, M-SC, M+030, M-030, M+045, M-045,
* M+060, M-060, M+090, M-090, M+110, M-110, M+135, M-135, M+180
* - U+000, U+030, U-030, U+045, U-045, U+090, U-090, U+110, U-110,
* U+135, U-135, U+180, UH+180
* - T+000, B+000, B+045, B-045
* - LFE1, LFE2
*
* @return Map with the speaker label specified in ITU-R BS.2051 as key and
* the corresponding AudioStreamFormatID as value.
*/
ADM_EXPORT const std::map<std::string, adm::AudioStreamFormatId>
audioStreamFormatLookupTable();

/**
* @brief Lookup table for SpeakerLabels of loudspeaker setup
*
Expand Down Expand Up @@ -87,5 +105,12 @@ namespace adm {
*/
ADM_EXPORT const adm::AudioTrackFormatId audioTrackFormatHoaLookup(
int order, int degree, std::string normalization);
ADM_EXPORT const adm::AudioTrackFormatId audioTrackFormatHoaLookup(
int order, int degree, int normalization);

ADM_EXPORT const adm::AudioStreamFormatId audioStreamFormatHoaLookup(
int order, int degree, std::string normalization);
ADM_EXPORT const adm::AudioStreamFormatId audioStreamFormatHoaLookup(
int order, int degree, int normalization);

} // namespace adm
139 changes: 128 additions & 11 deletions src/common_definitions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,20 @@ namespace adm {
return std::map<std::string, adm::AudioPackFormatId>{
{"0+1+0", adm::parseAudioPackFormatId("AP_00010001")},
{"0+2+0", adm::parseAudioPackFormatId("AP_00010002")},
{"0+3+0", adm::parseAudioPackFormatId("AP_0001000a")},
{"0+4+0", adm::parseAudioPackFormatId("AP_0001000b")},
{"0+5+0", adm::parseAudioPackFormatId("AP_00010003")},
{"0+6+0", adm::parseAudioPackFormatId("AP_0001000d")},
{"0+7+0", adm::parseAudioPackFormatId("AP_0001000f")},
{"2+5+0", adm::parseAudioPackFormatId("AP_00010004")},
{"2+7+0", adm::parseAudioPackFormatId("AP_00010014")},
{"3+7+0", adm::parseAudioPackFormatId("AP_00010007")},
{"4+5+0", adm::parseAudioPackFormatId("AP_00010005")},
{"4+5+1", adm::parseAudioPackFormatId("AP_00010010")},
{"3+7+0", adm::parseAudioPackFormatId("AP_00010007")},
{"4+7+0", adm::parseAudioPackFormatId("AP_00010017")},
{"4+9+0", adm::parseAudioPackFormatId("AP_00010008")},
{"9+9+0", adm::parseAudioPackFormatId("AP_00010011")},
{"9+10+3", adm::parseAudioPackFormatId("AP_00010009")},
{"0+7+0", adm::parseAudioPackFormatId("AP_0001000f")},
{"4+7+0", adm::parseAudioPackFormatId("AP_00010017")},
{"SN3D-Order1-3D", adm::parseAudioPackFormatId("AP_00040001")},
{"SN3D-Order2-3D", adm::parseAudioPackFormatId("AP_00040002")},
{"SN3D-Order3-3D", adm::parseAudioPackFormatId("AP_00040003")},
Expand Down Expand Up @@ -60,6 +65,8 @@ namespace adm {
{"M-090", adm::parseAudioTrackFormatId("AT_0001000b_01")},
{"M+110", adm::parseAudioTrackFormatId("AT_00010005_01")},
{"M-110", adm::parseAudioTrackFormatId("AT_00010006_01")},
{"M+135_Diff", adm::parseAudioTrackFormatId("AT_0001001a_01")},
{"M-135_Diff", adm::parseAudioTrackFormatId("AT_0001001b_01")},
{"M+135", adm::parseAudioTrackFormatId("AT_0001001c_01")},
{"M-135", adm::parseAudioTrackFormatId("AT_0001001d_01")},
{"M+180", adm::parseAudioTrackFormatId("AT_00010009_01")},
Expand Down Expand Up @@ -102,15 +109,84 @@ namespace adm {
{"LFE2", adm::parseAudioTrackFormatId("AT_00010021_01")}};
};

ADM_EXPORT const std::map<std::string, adm::AudioStreamFormatId>
audioStreamFormatLookupTable() {
return std::map<std::string, adm::AudioStreamFormatId>{
{"M+000", adm::parseAudioStreamFormatId("AS_00010003")},
{"M+022", adm::parseAudioStreamFormatId("AS_00010007")},
{"M-022", adm::parseAudioStreamFormatId("AS_00010008")},
{"M+SC", adm::parseAudioStreamFormatId("AS_00010024")},
{"M-SC", adm::parseAudioStreamFormatId("AS_00010025")},
{"M+030", adm::parseAudioStreamFormatId("AS_00010001")},
{"M-030", adm::parseAudioStreamFormatId("AS_00010002")},
{"M+045", adm::parseAudioStreamFormatId("AS_00010026")},
{"M-045", adm::parseAudioStreamFormatId("AS_00010027")},
{"M+060", adm::parseAudioStreamFormatId("AS_00010018")},
{"M-060", adm::parseAudioStreamFormatId("AS_00010019")},
{"M+090", adm::parseAudioStreamFormatId("AS_0001000a")},
{"M-090", adm::parseAudioStreamFormatId("AS_0001000b")},
{"M+110", adm::parseAudioStreamFormatId("AS_00010005")},
{"M-110", adm::parseAudioStreamFormatId("AS_00010006")},
{"M+135_Diff", adm::parseAudioStreamFormatId("AS_0001001a")},
{"M-135_Diff", adm::parseAudioStreamFormatId("AS_0001001b")},
{"M+135", adm::parseAudioStreamFormatId("AS_0001001c")},
{"M-135", adm::parseAudioStreamFormatId("AS_0001001d")},
{"M+180", adm::parseAudioStreamFormatId("AS_00010009")},
{"U+000", adm::parseAudioStreamFormatId("AS_0001000e")},
// {"U+022", adm::parseAudioStreamFormatId("")},
// {"U-022", adm::parseAudioStreamFormatId("")},
{"U+030", adm::parseAudioStreamFormatId("AS_0001000d")},
{"U-030", adm::parseAudioStreamFormatId("AS_0001000f")},
{"U+045", adm::parseAudioStreamFormatId("AS_00010022")},
{"U-045", adm::parseAudioStreamFormatId("AS_00010023")},
// {"U+060", adm::parseAudioStreamFormatId("")},
// {"U-060", adm::parseAudioStreamFormatId("")},
{"U+090", adm::parseAudioStreamFormatId("AS_00010013")},
{"U-090", adm::parseAudioStreamFormatId("AS_00010014")},
{"U+110", adm::parseAudioStreamFormatId("AS_00010010")},
{"U-110", adm::parseAudioStreamFormatId("AS_00010012")},
{"U+135", adm::parseAudioStreamFormatId("AS_0001001e")},
{"U-135", adm::parseAudioStreamFormatId("AS_0001001f")},
{"U+180", adm::parseAudioStreamFormatId("AS_00010011")},
{"UH+180", adm::parseAudioStreamFormatId("AS_00010028")},
{"T+000", adm::parseAudioStreamFormatId("AS_0001000c")},
{"B+000", adm::parseAudioStreamFormatId("AS_00010015")},
// {"B+022", adm::parseAudioStreamFormatId("")},
// {"B-022", adm::parseAudioStreamFormatId("")},
// {"B+030", adm::parseAudioStreamFormatId("")},
// {"B-030", adm::parseAudioStreamFormatId("")},
{"B+045", adm::parseAudioStreamFormatId("AS_00010016")},
{"B-045", adm::parseAudioStreamFormatId("AS_00010017")},
// {"B+060", adm::parseAudioStreamFormatId("")},
// {"B-060", adm::parseAudioStreamFormatId("")},
// {"B+090", adm::parseAudioStreamFormatId("")},
// {"B-090", adm::parseAudioStreamFormatId("")},
// {"B+110", adm::parseAudioStreamFormatId("")},
// {"B-110", adm::parseAudioStreamFormatId("")},
// {"B+135", adm::parseAudioStreamFormatId("")},
// {"B-135", adm::parseAudioStreamFormatId("")},
// {"B+180", adm::parseAudioStreamFormatId("")},
{"LFE", adm::parseAudioStreamFormatId("AS_00010004")},
{"LFE1", adm::parseAudioStreamFormatId("AS_00010020")},
{"LFE2", adm::parseAudioStreamFormatId("AS_00010021")}};
}

const std::map<std::string, std::vector<std::string>>
speakerLabelsLookupTable() {
return std::map<std::string, std::vector<std::string>>{
{"0+1+0", {"M+000"}},
{"0+2+0", {"M+030", "M-030"}},
{"0+3+0", {"M+030", "M-030", "M+000"}},
{"0+4+0", {"M+030", "M-030", "M+000", "M+180"}},
{"0+5+0", {"M+030", "M-030", "M+000", "LFE", "M+110", "M-110"}},
{"0+6+0", {"M+030", "M-030", "M+000", "LFE", "M+110", "M-110", "M+180"}},
{"0+7+0", {"M+030", "M-030", "M+000", "LFE", "M+090", "M-090", "M+135", "M-135"}},
{"2+5+0",
{"M+030", "M-030", "M+000", "LFE", "M+110", "M-110", "U+030",
"U-030"}},
{"2+7+0",
{"M+030", "M-030", "M+000", "LFE", "M+110", "M-110", "U+090",
"U-090", "M+SC", "M-SC"}},
{"4+5+0",
{"M+030", "M-030", "M+000", "LFE", "M+110", "M-110", "U+030", "U-030",
"U+110", "U-110"}},
Expand All @@ -119,20 +195,21 @@ namespace adm {
"U+110", "U-110", "B+000"}},
{"3+7+0",
{"M+000", "M+030", "M-030", "U+045", "U-045", "M+090", "M-090",
"M+135", "M-135", "UH+180", "LFE1", "LFE2"}},
"M+135", "M-135", "UH+180", "LFE1", "LFE2"}},
{"4+7+0",
{"M+030", "M-030", "M+000", "LFE", "M+090", "M-090", "M+135",
"M-135", "U+045", "U-045", "U+135", "U-135"}},
{"4+9+0",
{"M+030", "M-030", "M+000", "LFE", "M+090", "M-090", "M+135", "M-135",
"U+045", "U-045", "U+135", "U-135", "M+SC", "M-SC"}},
{"9+9+0",
{"M+030", "M-030", "M+000", "LFE", "M+110", "M-110", "U+090", "U-090",
"M+135_Diff", "M-135_Diff", "U+030", "U-030", "U+000", "U+110", "U-110",
"U+090", "U-090", "U+135", "U-135"}},
{"9+10+3", {"M+060", "M-060", "M+000", "LFE1", "M+135", "M-135",
"M+030", "M-030", "M+180", "LFE2", "M+090", "M-090",
"U+045", "U-045", "U+000", "T+000", "U+135", "U-135",
"U+090", "U-090", "U+180", "B+000", "B+045", "B-045"}},
{"0+7+0",
{"M+030", "M-030", "M+000", "LFE", "M+090", "M-090", "M+135",
"M-135"}},
{"4+7+0",
{"M+030", "M-030", "M+000", "LFE", "M+090", "M-090", "M+135", "M-135",
"U+045", "U-045", "U+135", "U-135"}}};
"U+090", "U-090", "U+180", "B+000", "B+045", "B-045"}}};
}

const adm::AudioTrackFormatId audioTrackFormatHoaLookup(
Expand All @@ -155,6 +232,46 @@ namespace adm {
AudioTrackFormatIdCounter(1));
}

const adm::AudioTrackFormatId audioTrackFormatHoaLookup(
int order, int degree, int normalization)
{
// ACN starts from 0, while AudioTrackFormatId starts from 1
int trackFormatIdValue =
order * order + order + degree + 1 + normalization * 0x100;
return adm::AudioTrackFormatId(TypeDefinition::HOA,
AudioTrackFormatIdValue(trackFormatIdValue),
AudioTrackFormatIdCounter(1));
}

const adm::AudioStreamFormatId audioStreamFormatHoaLookup(
int order, int degree, std::string normalization) {
int normalizationTypeValue;
if (normalization == "SN3D") {
normalizationTypeValue = 0;
} else if (normalization == "N3D") {
normalizationTypeValue = 1;
} else if (normalization == "FuMa") {
normalizationTypeValue = 2;
} else {
throw std::invalid_argument("Not a supported normalization value.");
}
// ACN starts from 0, while AudioTrackFormatId starts from 1
int trackFormatIdValue =
order * order + order + degree + 1 + normalizationTypeValue * 0x100;
return adm::AudioStreamFormatId(TypeDefinition::HOA,
AudioStreamFormatIdValue(trackFormatIdValue));
}

const adm::AudioStreamFormatId audioStreamFormatHoaLookup(int order,
int degree,
int normalization) {
// ACN starts from 0, while AudioTrackFormatId starts from 1
int trackFormatIdValue =
order * order + order + degree + 1 + normalization * 0x100;
return adm::AudioStreamFormatId(TypeDefinition::HOA,
AudioStreamFormatIdValue(trackFormatIdValue));
}

std::shared_ptr<Document> getCommonDefinitions() {
std::stringstream commonDefinitions;
getEmbeddedFile("common_definitions.xml", commonDefinitions);
Expand Down