Krotos Modules 3
Loading...
Searching...
No Matches
CatIDSearch.cpp
Go to the documentation of this file.
1namespace krotos
2{
3namespace UCS
4{
5std::array<std::string, 753> CatIDs = {
6 "AIRBlow", "AIRBrst", "AIRHiss", "AIRMisc", "AIRSuck", "AERODoor", "AEROHeli", "AEROInt",
7 "AEROJet", "AEROMech", "AEROMil", "AEROMisc", "AEROProp", "AERORadio", "AERORckt", "ALRMBell",
8 "ALRMBuzr", "ALRMClok", "ALRMElec", "ALRMMisc", "ALRMSirn", "AMBAir", "AMBAlpn", "AMBAmus",
9 "AMBBird", "AMBCele", "AMBCnst", "AMBDsrt", "AMBDsgn", "AMBEmrg", "AMBFant", "AMBFarm",
10 "AMBForst", "AMBGras", "AMBHist", "AMBTech", "AMBHosp", "AMBInd", "AMBInsc", "AMBLake",
11 "AMBMrkt", "AMBMisc", "AMBNaut", "AMBOffc", "AMBPark", "AMBPrisn", "AMBPrtst", "AMBPubl",
12 "AMBRlgn", "AMBHome", "AMBRest", "AMBRoom", "AMBRurl", "AMBSchl", "AMBSci", "AMBSea",
13 "AMBSprt", "AMBSubn", "AMBSwmp", "AMBTown", "AMBTraf", "AMBTran", "AMBTrop", "AMBTndra",
14 "AMBUndr", "AMBUndwtr", "AMBUrbn", "AMBWar", "ANMLAmph", "ANMLAqua", "ANMLBat", "ANMLCat",
15 "ANMLWcat", "ANMLDog", "ANMLWdog", "ANMLFarm", "ANMLHors", "ANMLInsc", "ANMLMisc", "ANMLPrim",
16 "ANMLRept", "ANMLRdnt", "ANMLWild", "ADR", "ASSET", "BNCE", "IR", "LPGRP",
17 "MIX", "PFX", "PROD", "RAW", "REF", "SCNE", "TEST", "TMARK",
18 "WIP", "WTF", "BEEPAppl", "BEEP", "BEEPLofi", "BEEPMed", "BEEPTimer", "BEEPVeh",
19 "BELLAnml", "BELLDoor", "BELLGong", "BELLHand", "BELLLrg", "BELLMisc", "BIRDPrey", "BIRDCrow",
20 "BIRDFowl", "BIRDMisc", "BIRDSea", "BIRDSong", "BIRDTrop", "BIRDWade", "BOATAir", "BOATWash",
21 "BOATDoor", "BOATElec", "BOATFish", "BOATHorn", "BOATInt", "BOATMech", "BOATMil", "BOATMisc",
22 "BOATMotr", "BOATRace", "BOATRow", "BOATSail", "BOATShip", "BOATStm", "BOATSub", "BOATUndwtr",
23 "BLLTBy", "BLLTImpt", "BLLTMisc", "BLLTRico", "BLLTShel", "TOONAnml", "TOONBoing", "TOONClang",
24 "TOONCreak", "TOONHorn", "TOONImpt", "TOONMach", "TOONMisc", "TOONMx", "TOONPluk", "TOONPop",
25 "TOONShake", "TOONSplt", "TOONSqk", "TOONStrch", "TOONSwsh", "TOONTwang", "TOONVeh", "TOONVox",
26 "TOONWarb", "TOONWhis", "TOONZip", "CERMBrk", "CERMCrsh", "CERMFric", "CERMHndl", "CERMImpt",
27 "CERMMisc", "CERMMvmt", "CERMTonl", "CHAINBrk", "CHAINHndl", "CHAINImpt", "CHAINMisc", "CHAINMvmt",
28 "CHEMAcid", "CHEMMisc", "CHEMReac", "CLOCKChim", "CLOCKMech", "CLOCKMisc", "CLOCKTick", "CLOTHFlp",
29 "CLOTHHndl", "CLOTHImpt", "CLOTHMisc", "CLOTHMvmt", "CLOTHRip", "COMAv", "COMCam", "COMCell",
30 "COMMic", "COMMisc", "COMPhono", "COMRadio", "COMStatic", "COMTelm", "COMTelph", "COMTv",
31 "COMTran", "COMType", "CMPTDriv", "CMPTKey", "CMPTMisc", "CREAAqua", "CREAAvian", "CREABeast",
32 "CREABlob", "CREADino", "CREADrgn", "CREAElem", "CREAEthr", "CREAHmn", "CREAInsc", "CREAMisc",
33 "CREAMnstr", "CREARept", "CREASmall", "CREASrce", "CRWDAngr", "CRWDApls", "CRWDBatl", "CRWDCele",
34 "CRWDCheer", "CRWDChld", "CRWDConv", "CRWDLaff", "CRWDLoop", "CRWDMisc", "CRWDPanic", "CRWDQuiet",
35 "CRWDReac", "CRWDSing", "CRWDSprt", "CRWDWalla", "DSGNBass", "DSGNBoom", "DSGNBram", "DSGNDist",
36 "DSGNDron", "DSGNErie", "DSGNEthr", "DSGNGran", "DSGNImpt", "DSGNMisc", "DSGNMorph", "DSGNRise",
37 "DSGNRmbl", "DSGNRythm", "DSGNSrce", "DSGNStngr", "DSGNSynth", "DSGNTonl", "DSGNVocl", "DSGNWhsh",
38 "DESTRClpse", "DESTRCrsh", "DESTRMisc", "DIRTCrsh", "DIRTDust", "DIRTHndl", "DIRTImpt", "DIRTMisc",
39 "DIRTMvmt", "DIRTTonl", "DOORAntq", "DOORAppl", "DOORCab", "DOORComp", "DOORCreak", "DOORDungn",
40 "DOORElec", "DOORGate", "DOORGlas", "DOORHdwr", "DOORTech", "DOORHydr", "DOORKnck", "DOORMetl",
41 "DOORMisc", "DOORPlas", "DOORPrisn", "DOORRevl", "DOORSlid", "DOORSton", "DOORSwng", "DOORWood",
42 "DRWRMetl", "DRWRMisc", "DRWRPlas", "DRWRWood", "ELECArc", "ELECBuzz", "ELECEmf", "ELECMisc",
43 "ELECSprk", "ELECZap", "EQUIPBridle", "EQUIPTech", "EQUIPMisc", "EQUIPRec", "EQUIPSprt", "EQUIPTact",
44 "EXPLDsgn", "EXPLMisc", "EXPLReal", "FARTDsgn", "FARTMisc", "FARTReal", "FGHTBf", "FGHTClth",
45 "FGHTGrab", "FGHTImpt", "FGHTMisc", "FIREBurn", "FIREBrst", "FIRECrkl", "FIREGas", "FIREIgn",
46 "FIREMisc", "FIRESizz", "FIRETrch", "FIRETurb", "FIREWhsh", "FRWKComr", "FRWKMisc", "FRWKRec",
47 "FOLYClth", "FOLYFeet", "FOLYHand", "FOLYMisc", "FOLYProp", "FOODCook", "FOODDrnk", "FOODEat",
48 "FOODGware", "FOODIngr", "FOODKware", "FOODMisc", "FOODPour", "FOODTware", "FEETAnml", "FEETCrea",
49 "FEETHors", "FEETHmn", "FEETMisc", "GAMEArcd", "GAMEBoard", "GAMECas", "GAMEMisc", "GAMEVideo",
50 "GEOFuma", "GEOGeyser", "GEOLava", "GEOMisc", "GEOMudpot", "GLASBrk", "GLASCrsh", "GLASFric",
51 "GLASHndl", "GLASImpt", "GLASMisc", "GLASMvmt", "GLASTonl", "GOREBlood", "GOREBone", "GOREBurn",
52 "GOREFlsh", "GOREMisc", "GOREOoze", "GORESrce", "GORESplt", "GORESqsh", "GOREStab", "GUNAntq",
53 "GUNArtl", "GUNAuto", "GUNCano", "GUNHndl", "GUNTech", "GUNMech", "GUNMisc", "GUNPis",
54 "GUNRif", "GUNShotg", "GUNSupr", "HORNAir", "HORNCele", "HORNMisc", "HORNTrad", "HMNBlow",
55 "HMNBrth", "HMNBurp", "HMNCough", "HMNHart", "HMNKiss", "HMNMisc", "HMNPee", "HMNSkin",
56 "HMNSneez", "HMNSniff", "HMNSnor", "HMNSpit", "HMNVomit", "ICEBrk", "ICECrsh", "ICEFric",
57 "ICEHndl", "ICEImpt", "ICEMisc", "ICEMvmt", "ICETonl", "LASRBeam", "LASRGun", "LASRImpt",
58 "LASRMisc", "LETHRCreak", "LETHRHndl", "LETHRImpt", "LETHRMisc", "LETHRMvmt", "LIQBubl", "LIQImpt",
59 "LIQMisc", "LIQMvmt", "LIQSuct", "MACHAmus", "MACHAntq", "MACHAppl", "MACHCnst", "MACHElev",
60 "MACHEscl", "MACHFan", "MACHGrdn", "MACHGym", "MACHTech", "MACHHvac", "MACHInd", "MACHMech",
61 "MACHMed", "MACHMisc", "MACHOffc", "MACHPump", "MAGAngl", "MAGElem", "MAGEvil", "MAGMisc",
62 "MAGPoof", "MAGShim", "MAGSpel", "MECHClik", "MECHGear", "MECHHydr", "MECHLtch", "MECHLvr",
63 "MECHLock", "MECHMisc", "MECHPuly", "MECHRtch", "MECHRelay", "MECHRolr", "MECHSwtch", "METLBrk",
64 "METLCrsh", "METLFric", "METLHndl", "METLImpt", "METLMisc", "METLMvmt", "METLTonl", "MOTRAntq",
65 "MOTRComb", "MOTRElec", "MOTRMisc", "MOTRSrvo", "MOTRTurb", "MOVEActv", "MOVEAnml", "MOVECrea",
66 "MOVECrwd", "MOVEHmn", "MOVEInsc", "MOVEMisc", "MOVEPres", "MUSCBell", "MUSCBrass", "MUSCChim",
67 "MUSCChor", "MUSCExpr", "MUSCInst", "MUSCKeyd", "MUSCLoop", "MUSCMisc", "MUSCPerc", "MUSCTnprc",
68 "MUSCPrfm", "MUSCPluck", "MUSCSmpl", "MUSCShake", "MUSCSong", "MUSCStngr", "MUSCStr", "MUSCSynth",
69 "MUSCToy", "MUSCWind", "NATDAval", "NATDQuak", "NATDMisc", "NATDTorn", "NATDTsun", "NATDThyp",
70 "NATDVolc", "OBJBag", "OBJBook", "OBJCoin", "OBJCont", "OBJFash", "OBJFurn", "OBJGrdn",
71 "OBJGym", "OBJHsehld", "OBJJewl", "OBJKey", "OBJLug", "OBJMed", "OBJMisc", "OBJOffc",
72 "OBJPack", "OBJTape", "OBJUmbr", "OBJWhled", "OBJWrite", "OBJZipr", "PAPRFltr", "PAPRFric",
73 "PAPRHndl", "PAPRImpt", "PAPRMisc", "PAPRRip", "PAPRTonl", "PLASBrk", "PLASCrsh", "PLASFric",
74 "PLASHndl", "PLASImpt", "PLASMisc", "PLASMvmt", "PLASTonl", "RAINClth", "RAINConc", "RAIN",
75 "RAINGlas", "RAINInt", "RAINMetl", "RAINPlas", "RAINVege", "RAINWatr", "RAINWood", "ROBTMisc",
76 "ROBTMvmt", "ROBTVox", "ROCKBrk", "ROCKCrsh", "ROCKFric", "ROCKHndl", "ROCKImpt", "ROCKMisc",
77 "ROCKMvmt", "ROCKTonl", "ROPECreak", "ROPEHndl", "ROPEImpt", "ROPEMisc", "ROPEMvmt", "RUBRCrsh",
78 "RUBRFric", "RUBRHndl", "RUBRImpt", "RUBRMisc", "RUBRMvmt", "RUBRTonl", "SCIAlrm", "SCICmpt",
79 "SCIDoor", "SCIEnrg", "SCIImpt", "SCIMach", "SCIMech", "SCIMisc", "SCIRetro", "SCIShip",
80 "SCIVeh", "SCIWeap", "SNOWCrsh", "SNOWFric", "SNOWHndl", "SNOWImpt", "SNOWMisc", "SNOWMvmt",
81 "SPRTCourt", "SPRTField", "SPRTGym", "SPRTIndor", "SPRTMisc", "SPRTSkate", "SPRTTrck", "SPRTWatr",
82 "SPRTWntr", "SWSH", "WHSH", "TOOLGrdn", "TOOLHand", "TOOLMisc", "TOOLPneu", "TOOLPowr",
83 "TOYElec", "TOYMech", "TOYMisc", "TRNBrake", "TRNClak", "TRNDoor", "TRNDiesl", "TRNElec",
84 "TRNHspd", "TRNHorn", "TRNInt", "TRNMech", "TRNMisc", "TRNSteam", "TRNSbwy", "TRNTram",
85 "UIAlert", "UIBeep", "UIClick", "UIData", "UIGlitch", "UIMisc", "UIMvmt", "VEGEGras",
86 "VEGELeaf", "VEGEMisc", "VEGETree", "VEHAlrm", "VEHAntq", "VEHAtv", "VEHBike", "VEHBrake",
87 "VEHBus", "VEHCar", "VEHCnst", "VEHDoor", "VEHElec", "VEHEmrg", "VEHFarm", "VEHFrght",
88 "VEHBy", "VEHHorn", "VEHInt", "VEHJalop", "VEHMech", "VEHMil", "VEHMisc", "VEHMoto",
89 "VEHRace", "VEHSirn", "VEHSkid", "VEHSusp", "VEHTire", "VEHTruck", "VEHUtil", "VEHWagn",
90 "VEHWndw", "VOXAlien", "VOXBaby", "VOXCheer", "VOXChld", "VOXCry", "VOXEfrt", "VOXFem",
91 "VOXFutz", "VOXHist", "VOXLaff", "VOXMale", "VOXMisc", "VOXReac", "VOXScrm", "VOXSing",
92 "VOXWhsp", "WATRBubl", "WATRDran", "WATRDrip", "WATRFizz", "WATRFlow", "WATRFoun", "WATRImpt",
93 "WATRLap", "WATRMisc", "WATRMvmt", "WATRPlmb", "WATRPour", "WATRSplsh", "WATRSpray", "WATRStm",
94 "WATRSurf", "WATRTurb", "WATRUndwtr", "WATRFall", "WATRWave", "WEAPArmr", "WEAPArro", "WEAPAxe",
95 "WEAPBlnt", "WEAPBow", "WEAPKnif", "WEAPMisc", "WEAPPole", "WEAPSiege", "WEAPSwrd", "WEAPWhip",
96 "HAIL", "WTHR", "STORM", "THUN", "WHSTHmn", "WHSTMech", "WHSTMisc", "WINDDsgn",
97 "WIND", "WINDGust", "WINDInt", "WINDTonl", "WINDTurb", "WINDVege", "WNDWCover", "WNDWHdwr",
98 "WNDWKnck", "WNDWMetl", "WNDWMisc", "WNDWPlas", "WNDWWood", "WINGBird", "WINGCrea", "WINGInsc",
99 "WINGMisc", "WOODBrk", "WOODCrsh", "WOODFric", "WOODHandl", "WOODImpt", "WOODMisc", "WOODMvmt",
100 "WOODTonl"};
101}
102
104{
105 generator.seed(std::random_device{}());
106
107 std::sort(UCS::CatIDs.begin(), UCS::CatIDs.end());
108
109 // To-Do: searching for all factory assets - should potentially be done in a separate thread
110
111 std::size_t count = 0;
112 for (const auto& path : File(root).findChildFiles(2, true, "*.wav"))
113 {
114 auto basename = path.getFileName().toStdString();
115 // try to avoid duplicate files coming from different folders
116 if (filenames.count(basename) == 0)
117 {
118 auto success = addDatasetItem(path.getFullPathName().toStdString());
119 if (success)
120 ++count;
121 }
122 filenames.insert(basename);
123 }
124 filenames.clear();
125 DBG("UCS file count: " << count);
126}
127
129{
130 //
131}
132
133bool CatIDSearch::addDatasetItem(std::string path)
134{
135 auto key = extractCatID(path);
136 auto success = std::binary_search(UCS::CatIDs.begin(), UCS::CatIDs.end(), key);
137 if (success)
138 {
139 dataset[key].push_back(path);
140 }
141 return success;
142}
143
144std::string CatIDSearch::extractCatID(std::string path)
145{
146 auto filename = File(path).getFileName().toStdString();
147 std::string delimiter = "_";
148 std::string CatID = filename.substr(0, filename.find(delimiter)); // UCS category or partial/full filename
149 return CatID;
150}
151
152std::string CatIDSearch::findSimilar(std::string path)
153{
154 auto key = extractCatID(path);
155 auto success = std::binary_search(UCS::CatIDs.begin(), UCS::CatIDs.end(), key);
156 if (success)
157 {
158 // key was a valid CatID
159 auto filepaths = dataset[key];
160 DBG("UCS CatID: " << key);
161 DBG("number of results: " << filepaths.size());
162 if (!filepaths.empty())
163 {
164 std::uniform_int_distribution<std::size_t> distribution(0, filepaths.size() - 1);
165 std::size_t idx = distribution(generator);
166 auto result = filepaths[idx];
167 // Note: might want to check file attributes like duration before returning
168 // e.g. if the query file is several minutes long we might not want to return a file that's 1-second long
169 return result;
170 }
171 }
172 return path;
173}
174
175std::vector<std::string> CatIDSearch::findAllSimilar(std::string path)
176{
177 std::vector<std::string> results = {path};
178
179 auto key = extractCatID(path);
180 auto success = std::binary_search(UCS::CatIDs.begin(), UCS::CatIDs.end(), key);
181 if (success)
182 {
183 // key was a valid CatID
184 auto filepaths = dataset[key];
185 std::sort(filepaths.begin(), filepaths.end());
186 return filepaths;
187 }
188 return results;
189}
190
191} // namespace krotos
~CatIDSearch()
Definition CatIDSearch.cpp:128
std::vector< std::string > findAllSimilar(std::string path)
Definition CatIDSearch.cpp:175
bool addDatasetItem(std::string path)
Definition CatIDSearch.cpp:133
CatIDSearch(std::string root)
Definition CatIDSearch.cpp:103
std::string extractCatID(std::string path)
Definition CatIDSearch.cpp:144
std::set< std::string > filenames
Definition CatIDSearch.h:22
std::string findSimilar(std::string path)
Definition CatIDSearch.cpp:152
std::mt19937 generator
Definition CatIDSearch.h:20
std::map< std::string, std::vector< std::string > > dataset
Definition CatIDSearch.h:21
std::array< std::string, 753 > CatIDs
Definition CatIDSearch.cpp:5
Definition AirAbsorptionFilter.cpp:2