dtpulse.hpp (6785B)
1 2 #include <string> 3 #include <sstream> 4 #include <iomanip> 5 #include <iostream> 6 #include <vector> 7 #include <algorithm> 8 #include <typeinfo> 9 #include <stdexcept> 10 #include <math.h> 11 12 #ifndef MY_GLOBALS_H 13 #define MY_GLOBALS_H 14 extern std::string b64lookup; 15 extern std::string integerlookup; 16 extern std::string knoblookup; 17 extern std::string inputlookup; 18 extern std::string knobandinputlookup; 19 #endif 20 21 class Token { 22 public: 23 std::string type; 24 std::string value; 25 int index; 26 int duration; 27 Token(std::string t, std::string v); 28 Token(std::string t, std::string v, int dex, int dur); 29 Token(std::string t, std::string v, int dex); 30 Token(std::string t, int val); 31 Token(const Token& source); 32 void print(); 33 }; 34 class Parser { 35 public: 36 Parser(); 37 Parser(std::string expr); 38 std::string expression; 39 std::vector<Token> tokens; 40 char peekChar(); 41 char skipAndPeekChar(); 42 void skipChar(); 43 44 Token peekToken(); 45 Token skipAndPeekToken(); 46 void setForCookies(); 47 void setForLaundry(); 48 void setForLaundryPoly(); 49 void setForQuantizer(); 50 void skipToken(); 51 void setExactValue(Token t); 52 void setForExactIntegers(Token t); 53 void setFormula(Token t, std::vector<std::string> operatorWhitelist, bool laundryMode); 54 void setForVariables(Token t); 55 void setForChanceOfIntegers(Token t); 56 void setForRandoms(Token t); 57 void replaceLettersWithNumbers(Token t); 58 void setForInterleave(Token t, std::vector<std::string> whitelist); 59 void setForAtExpand(Token t, std::vector<std::string> whitelist, bool laundryMode); 60 void setForSquareBrackets(Token t, std::vector<std::string> whitelist, bool laundryMode); 61 void setFinal(Token t, std::vector<std::string> whitelist); 62 bool inError; 63 std::string parseFloat(Token t); 64 std::vector<Token> tokenStack; 65 std::vector<float> exactFloats; 66 std::vector<std::vector<Token>> randomVector; 67 std::vector<Token> atExpandTokens(std::vector<std::vector<Token>> tokenVecVec, int atNum); 68 std::vector<Token> countExpandTokens(std::vector<std::vector<Token>> tokenVecVec, int atNum); 69 private: 70 int currentIndex; 71 void ParseExactValue(Token t); 72 void ParseExactInteger(Token t); 73 void ParseFormula(Token t, std::vector<std::string> operatorWhitelist, bool laundryMode); 74 void ParseVariable(Token t); 75 void ParseRandomSequence(Token t); 76 void ParseInterleave(Token t, std::vector<std::string> whitelist); 77 void ParseAtExpand(Token t, std::vector<std::string> whitelist, bool laundryMode); 78 void ParseSquareBrackets(Token t, std::vector<std::string> whitelist, bool laundryMode); 79 void ParseChanceOfInteger(Token t); 80 int ParseAtPart(Token t); 81 }; 82 class AbsoluteSequence { 83 public: 84 AbsoluteSequence(std::string expr, std::string lookup); 85 AbsoluteSequence(); 86 void randomizeIndex(int index); 87 std::vector<int> indexSequence; 88 std::vector<int> workingIndexSequence; 89 std::vector<float> exactFloats; 90 std::vector<std::vector<int>> randomIndexes; 91 std::vector<std::vector<Token>> randomTokens; 92 std::vector<Token> tokenStack; 93 int readHead; 94 int numTokens; 95 void print(); 96 bool inError; 97 void skipStep(); 98 int peekStep(); 99 int peekWorkingStep(); 100 int skipAndPeek(); 101 void incrementAndCheck(); 102 int getReadHead(); 103 int getCurrentAddressAtReadHead(); 104 std::string getWorkingStepDisplay(); 105 }; 106 107 class LaundrySoupSequence { 108 public: 109 LaundrySoupSequence(std::string expr); 110 LaundrySoupSequence(const std::vector<Token>& tokens); 111 LaundrySoupSequence(); 112 void Tokenize(std::string formula); 113 void Setup(std::vector<Token> tokens); 114 std::vector<Token> tokenStack; 115 std::vector<int> pulseSequence; 116 std::vector<int> workingPulseSequence; 117 std::vector<int> makePulseSequence(std::vector<Token> tokens); 118 int readHead; 119 int numSteps; 120 bool inError; 121 void print(); 122 int peekStep(); 123 void skipStep(); 124 int skipAndPeek(); 125 int peekWorkingStep(); 126 void incrementAndCheck(); 127 bool atLastStep(); 128 void randomizePulseValue(int index); 129 }; 130 class Quantizer { 131 public: 132 Quantizer(std::string intervals, int divisions, int trans); 133 Quantizer(); 134 float quantize(float val); 135 float quantizeEven(float val); 136 float quantizeEven(float val, int iTranspose); 137 float findEvenSpacingValue(float input, std::vector<float> allowedValues); 138 float findEvenSpacingImpure(float input); 139 float fNumDivisions; 140 std::vector<float> mappedValues; 141 int numDivisions; 142 int transpose; 143 bool parseError; 144 int numSteps; 145 float fTranspose; 146 void print(); 147 private: 148 Parser scaleParser; 149 float findClosestValue(float input, std::vector<float> allowedValues); 150 151 std::vector<float> generateMappedValues(); 152 }; 153 class LaundryPoly { 154 public: 155 LaundrySoupSequence lss[16]; 156 int maxIndex; 157 int maxSteps; 158 LaundryPoly(std::string formula); 159 LaundryPoly(); 160 bool maxChannelAtLastStep(); 161 162 void print(); 163 bool inError; 164 }; 165 bool matchesAny(std::string val, std::vector<std::string> whitelist); 166 bool is_digits(const std::string &str); 167 void padTo(std::string &str, const size_t num, const char paddingChar ); 168 169 std::vector <int> parseString(std::string expr); 170 std::vector <int> parseDt(std::string input, int offset, std::string lookup); 171 std::vector <int> parseLookup(std::string input, int offset, std::string lookup); 172 std::vector<int> parseEntireString(std::string input, std::string lookup, int type); 173 std::vector<int> parseStringAsValues(std::string input, std::string lookup); 174 std::vector<int> parseStringAsTimes(std::string input, std::string lookup); 175 void printVector(std::vector <int> intVector); 176 void printFloatVector(std::vector<float> floatVector); 177 void printTokenVector(std::vector<std::vector<Token>> tokenVector); 178 void printTokenVector(std::vector<Token> tokenVector); 179 std::string splitRecur(std::string input); 180 void parseRecur(Token t); 181 std::string interleaveExpand(std::vector<std::string> blocks); 182 std::vector<Token> interleaveExpand(std::vector<std::vector<Token>> blocks); 183 std::string hashExpand(std::string input, int hashnum); 184 std::string atExpand(std::string input, int atnum, std::string lookup); 185 std::string countExpand(std::string input, int atnum); 186 std::string concatVectorFromLookup(std::vector<int> vector, std::string lookup); 187 std::vector<Token> tokenizeString(std::string input); 188 bool matchParens(std::string value); 189 std::string evalToken(std::string input, std::string type, std::vector<Token> tStack); 190 void whoKnows(std::string input); 191 void whoKnowsLaundry(std::string input); 192 void whoKnowsLaundryPoly(std::string input); 193 void whoKnowsQuantize(std::string input); 194 std::vector<int> getIndicesFromTokenStack(std::vector<Token> tokens); 195 std::vector<int> duplicateIntVector(std::vector<int> input); 196 std::string getByteString(float f); 197 void replaceAll(std::string& str, const std::string& from, const std::string& to); 198 float mapChannelCountToVoltage(int ch); 199 int mapVoltageToChannelCount(float vv); 200 int myPow(int x, int p); 201 std::vector<std::string> split(std::string strToSplit, char delimeter); 202 void swap (int *a, int *b);